You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dlab.apache.org by bh...@apache.org on 2019/07/25 11:31:22 UTC

[incubator-dlab] branch v2.1.1 updated (d052709 -> fbeb333)

This is an automated email from the ASF dual-hosted git repository.

bhliva pushed a change to branch v2.1.1
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git.


    from d052709  Merge pull request #99 from apache/v2.1-master-merged
     add e756741  Merge pull request #11 from apache/DLAB-380
     add 0d26914  added Nginx parameter client_max_body_size
     add 586d9a1  Merge pull request #12 from apache/DLAB-447
     add 20f4ae8  DLAB-418 updated readme
     add 1867260  Merge pull request #8 from apache/feature-DLAB-418
     add 0c7322c  [DLAB-363]: Upgrade Angular version to 7.x
     add fe5fd4a  [DLAB-363]: rx new version breaking changes fixes
     add 306b655  [DLAB-363]: debugging deprecated components
     add c70b67a  [DLAB-363]: fixed models circular dependencies
     add 228d75c  [DLAB-363]: fixed services circular dependencies
     add 6257b2f  [DLAB-363]: fixed components circular dependencies; privacy invocation
     add 3a59e76  [DLAB-363]: added http interceptor with jwt service
     add 749a2b4  [DLAB-363]: changed fonts props according prod build
     add 88f1116  [DLAB-363]: moved core service collections
     add e5a6216  [DLAB-363]: added no cache interceptor
     add c489911  [DLAB-363]: added service changes to app.module
     add 372fb4b  [DLAB-363]: adapted backup module
     add 6442d9d  [DLAB-363]: adapted login module
     add 6a0ae96  [DLAB-363]: added storage service
     add 1660e8f  [DLAB-363]: prevent state change issues on templates
     add 618beb2  [DLAB-363]: prevent state change issues on templates
     add ec66195  [DLAB-363]: prevent state change issues on templates
     add 23fe50e  [DLAB-363]: updated storage service
     add bd72bde  [DLAB-363]: updated billing, rolesManagement, healthStatus  services
     add 3d10578  [DLAB-363]: updated main facade with new option types
     add af282fb  [DLAB-363]: updated scheduler services
     add 9f3f3a1  [DLAB-363]: updated users request Ņonverting
     add bb65966  Merge branch 'develop' of github.com:epam/DLab into bugfix-DLAB-311
     add 66d79c8  [DLAB-373]: fixed issue with start stop edge requests
     add 7c7a604  [DLAB-373]: fixed issue with action butts aligning
     add d1cc5ef  [DLAB-373]: added extra check on edge actions to prevent premature error
     add ce305b6  [DLAB-373]: additional header param for key uploading
     add 249dc8b  [DLAB-373]: fixed issue with library installation
     add 6ae0a25  [DLAB-373]: fixed issue with dowmloading csv report and pem key
     add 0cbdaf3  [DLAB-373]: updated cdk and material packages
     add fd0d3d5  [DLAB-373]: moved loading of BrowserAnimationsModule to the top of list
     add 524758d  [DLAB-373]: replaced mat input component with field wrapper
     add 0c8362c  [DLAB-373]: adapted ng rangepicher with new packages versions
     add dd1f4d8  [DLAB-373]: fixed initialUserAccessKeyCheck added takeWhile alive
     add ccd3c2b  [DLAB-373]: fixed error parse format on auth check request
     add 807d13b  [DLAB-373]: added redirect to login page on unauthorized response
     add 7d4016c  [DLAB-373]: added notification module
     add 55daf6f  [DLAB-373]: removed unused service files
     add d953944  [DLAB-373]: added missed license header
     add f6c1ec8  [DLAB-373]: fixed issue with backup response reader
     add 747003a  [DLAB-373]: updated toasts templates according new notification module
     add 1bcaeff  [DLAB-373]: fixed build prod command
     add 7f13e70  [DLAB-373]: fixed validation messages posirioning
     add e98b277  [DLAB-373]: theme differences fixes
     add a4bf3b1  [DLAB-373]: added build dev command
     add 5da9dad  merge develop into bugfix-DLAB-311
     add 8199053  Merge pull request #14 from apache/bugfix-DLAB-311
     add dce86ca  DLAB-434 fixed bug on billing connected with filtering by shared resources
     add ac65176  Merge pull request #15 from apache/bugfix-DLAB-434
     add 1979e30  [DLAB-462]: Warning concerning limit fixes
     add f432e4b  Merge pull request #18 from apache/DLAB-462
     add 66e0eaa  [DLAB-375]: active manage env link
     add b879b8c  [DLAB-375]: added isAdmin property to manage views
     add 6e29cd2  [DLAB-375]: moved modal dialogs; admin preferences
     add 4f48d6c  [DLAB-375]: moved admin preferences functionality to management page
     add 4299eeb  [DLAB-375]: changed statusbar link to environment management page
     add 6691e3b  [DLAB-375]: toggle management env grids by admin access
     add 7426997  [DLAB-375]: toggle management env grids by admin access
     add 5f7fedc  [DLAB-375]:added service data for health status of all/personal accounts
     add 1918151  [DLAB-375]: unified health status params, simplified params reading
     add 88a7d94  [DLAB-375]: missed entry Components declaration added
     add ea2520a  [DLAB-375]: deprecated imports cleanup
     add d437305  [DLAB-375]: deprecated imports cleanup
     add b59b1c1  DLAB-434 fixed bug connected with filtering by shared resources
     add 4886f5a  DLAB-000 removed unused code
     add 81235ef  added script for deploying LDAP server
     add dacbd0f  DLAB-000 updated licence header for ldab deployment script
     add 66c5ce7  DLAB-000 licence headers were updated for java and js files
     add c2abd62  DLAB-000 updated notice and licence files
     add 075aaeb  DLAB-000 update license header for integration tests
     add c14079b  DLAB-000 updated license headers
     add ee68d4e  DLAB-000 license headers updated
     add f762434  merge develop into DLAB-375
     add 2b08c03  Merge pull request #21 from apache/DLAB-375
     add ea5a99a  [DLAB-375]: removed unexpected argument
     add f832c3e  Merge pull request #22 from apache/DLAB-375
     add a431128  [DLAB-477]: active filter fixes during first env creation
     add aabd415  [DLAB-477]: active filter fixes during first env creation
     add 0eced0c  Merge pull request #24 from apache/DLAB-477
     add 363be87  Fix for gcp entropy bug
     add a4e06ba  Fix for gcp entropy bug
     add 748a157  Fix for gcp entropy bug, placed fix in ensure_pkg function
     add 80eee57  Merge pull request #26 from Dyoma33/EPMCDLAB-390
     add b641d5b  fixed issue with removing shared bucket;
     add f6b3437  Merge pull request #27 from apache/DLAB-52
     add dbec36f  [DLAB-475] Parametrise also keras r package same as python library
     add 350dd37  [DLAB-475] Parametrise also keras r package same as python library
     add 529cc77  Merge pull request #28 from ioleksandr/DLAB-475
     add 9fca6e8  [DLAB-318] fix DeepLearning creation for GCP
     add f3aa28b  Merge pull request #30 from ioleksandr/DLAB-318
     add 1714ef6  Deleted toree binaries from source code and wrote function that downloads those files from official toree repository
     add 6dd0a9d  bugfix
     add 59aed6b  bugfix
     add 1b7d2be  Bugfix, moving execution of download_toree function to position when conf files are already copied to ssn. Previously execution failed, cause at the moment of execution of function there was no folder, where toree should have been placed.
     add ad0848f  Bugfix, moving execution of download_toree function to position when conf files are already copied to ssn. Previously execution failed, cause at the moment of execution of function there was no folder, where toree should have been placed.
     add c8b4b63  Bugfix
     add 340d823  Bugfix
     add c7bf730  Bugfix
     add 83d560d  Merge pull request #29 from Dyoma33/EPMCDLAB-328
     add e3db50b  [DLAB-318] partial changes to use GCP images. - create image after provision notebook - check if image exist - run notebook from image
     add 92e1ce1  [DLAB-318] partial changes to use GCP images. - add role policies - terminate image on env termination - run notebook(two disks) from image - small fixes - refactor termination script
     add 5dc35b7  [DLAB-318] final partial changes to use GCP images. - one more role permission - add shared image steps for other notebooks - remove image on notebook configure step
     add 1455168  typo fix
     add 919389b  typo fix
     add fc58499  typo fix
     add d3415c8  Refactoring. Added link to download toree-assembly-0.2.0.jar instead of pulling it from toree_kernel.tar.gz.
     add de83a8f  Fixed data engine creation issue, jira ticket 328. Files from toree_kernel.tar.gz were placed in "/home/{user-name}/.local/share/jupyter/kernels/{cluster-name}/toree-0.2.0-incubating/", and should be directly in cluster folder.
     add e7cf207  Merge pull request #34 from Dyoma33/epmcdlab-dev-328
     add 55a4676  Assigned role to ssn service account that allow to use BigQuery API, ticket 529
     add db2dabf  Merge pull request #36 from Dyoma33/EPMCDLAB-dev-529
     add 5458efb  [DLAB-529] Added Bigquery job User role
     add d9320d1  Merge pull request #41 from Dyoma33/DLAB-dev-529
     add eba0942  [DLAB-532] Fixed matplotlib downloading bug
     add 71ed477  Merge pull request #43 from Dyoma33/DLAB-dev-532
     add a35a550  added installation and configuration of reverse proxy;
     add 4ed0a4f  fixed issue with reverse proxy for jupyter
     add 1426dfd  added reverse proxy to all notebooks and dataengine
     add 7f25aaa  fixed issue with missed scripts
     add 31dd48f  added reverse proxy to dataengine-service
     add 309b82f  fixed typo
     add 597c14e  Merge branch 'develop' of github.com:apache/incubator-dlab into DLAB-253
     add 18dc734  Merge branch 'develop' of github.com:apache/incubator-dlab into DLAB-253
     add b171ae7  fixed issue with DNS name for Dataproc
     add a86be19  fixed issue with DNS name for Dataproc
     add c19c8f7  added additional output
     add cb997d6  fixed issue with http proxy on edge node;
     add ff68bae  fixed typo
     add e31a935  Merge pull request #44 from apache/DLAB-253
     add 7cf976e  DLAB-524 added possibility to use bundles from maven repo during java dependencies installation
     add 4644641  Merge pull request #45 from apache/bugfix-DLAB-524
     add dbbc91b  Fixed issue with S3 bucket tagging
     add 8f2fed6  Merge pull request #46 from apache/DLAB-518
     add 9cac83c  [DLAB-538]: fixed issue with roles updation in firefox
     add 93384eb  Merge pull request #47 from apache/DLAB-538
     add 6e44c41  DLAB-530 fixed bug connected with availability of resource templates
     add 36d86f7  DLAB-000 removed test
     add 2f1b703  fixed typo
     add efa4f09  fixed issue with spark reconfiguration after stop
     add 2e222ee  fixed issue with missed spark properties
     add a34eb23  fixed issue with missed spark properties
     add a4c3bdb  fixed issue with jar list
     add 0848a23  fixed typo
     add e5f26c6  Merge pull request #49 from apache/DLAB-483
     add 345c332  Merge branch 'develop' into DLAB-285
     add 0ff5153  Merge pull request #51 from ioleksandr/DLAB-285
     add 3225e23  [DLAB-475] Parametrise also keras r package same as python library (for Debian)
     add b0601ce  Merge pull request #54 from ioleksandr/DLAB-475-d
     add c4bb8b3  [DLAB-540] Updated nvidia driver version
     add 1a7cd82  [DLAB-535] Updated debian image and set up installing linux-aws-hwe for kernel upgrade
     add 37a3af5  [DLAB-535] Changed package name linux-modules-extra to linux-modules, cause there no extra packages for new kernel
     add 290f3de  Merge pull request #53 from Dyoma33/DLAB-535
     add 95fdf7b  [DLAB-535] Fixed instance creation issue due to missing -y flag and added condition to install linux-aws-hwe only on AWS
     add 2d83485  Merge pull request #57 from Dyoma33/DLAB-535-dev
     add 9c6f497  added reverse proxy to azure
     add c6c2c4a  fixed typo
     add 2d2d1b7  Fixed issue with type of Edge IP address
     add 63f001e  fixed typo
     add afc04ea  increased keep-alive timeout for nginx;
     add 522a66e  fixed typo;
     add 1017a12  fixed issue with timeout
     add 3f2eecc  fixed issue with timeout
     add dfbce93  Merge pull request #59 from apache/DLAB-252
     add 2c899b4  [DLAB-552]: Fix notebook stopping/termination fails on GCP
     add 038fb9d  Merge pull request #60 from ioleksandr/DLAB-552
     add 70a9151  [DLAB-573]:fixed issue with azure_client_id
     add afa9711  [DLAB-573]: added needed parameters
     add 044a120  DLAB-573 added refresh token param for spark reconfiguration
     add 34ef8f4  Merge pull request #65 from apache/DLAB-573-dev
     add aff4ce5  DLAB-000 fixed bug connected with cluster configuration dto
     add 24d92a7  DLAB-000 2.1 Release notes updated
     add 78acb1d  [DLAB-372]: added fixes on Manage Git Credentials page
     add 8ee12bb  [DLAB-573]: fixed preemptible node validation
     add b7d3df5  [DLAB-573]: fixed preemptible node validation
     add dd801d2  Merge pull request #63 from apache/DLAB-537
     add 49bd075  [DLAB-378]: fixed issue with edge node action selectors
     add 4b2d6e3  Merge pull request #50 from apache/DLAB-378_2
     add 59058fc  Merge branch 'develop' of github.com:apache/incubator-dlab into DLAB-372
     add 0600f33  Merge pull request #66 from apache/DLAB-372
     add fb8d1c9  [DLAB-449]: fixed issue with error handling on login
     add a722270  [DLAB-449]: fixed issue with in grid multiselect filters
     add 5dda84c  [DLAB-449]: libraries version fixes
     add 2b002e0  [DLAB-449]: fixed issue with extra scrollbar for users column
     add f68e584  [DLAB-449]: reset classes on resource creation without permission
     add 5c2e232  [DLAB-449]: added headers to alert dialogs
     add a8c1b59  Merge branch 'develop' of github.com:apache/incubator-dlab into DLAB-449
     add c6f2b5d  merge develop into DLAB-449
     add b54b336  Merge pull request #62 from apache/DLAB-449
     add 623fd3c  [DLAB-531]: Fix broken python on jupyter/zeppelin after DataProc install
     add 759651d  Merge pull request #67 from ioleksandr/DLAB-531
     add 4a9afaf  [DLAB-578]: merge preemptible node labels
     add e0ff817  [DLAB-576]: Added succeess notification after creating/removing account
     add dbc9c05  [DLAB-577][Manage roles]: removed extra scrollbar from users column
     add 790f827  Merge pull request #69 from apache/DLAB-576
     add f804563  [DLAB-550]: fixed Issues with merging of Health status and Environment Management pages
     add 70605a8  Merge pull request #68 from apache/DLAB-550
     add 1ac5a1a  Merge branch 'develop' of github.com:apache/incubator-dlab into DLAB-578
     add cc643a1  Merge pull request #70 from apache/DLAB-578
     add 41ee4c7  DLAB-518 fixed bug with wrong billing information for personal bucket
     add c0f3d8b  Merge pull request #71 from apache/bugfix-DLAB-518
     add 69f9d28  [DLAB-77] Created Rstudio with Tensorflow image
     add 3d9a205  [DLAB-77] Corrected Tensorflow version
     add 6677420  Merge pull request #72 from Dyoma33/DLAB-77-dev
     add 005f11e  DLAB-527 fixed bug connected with billing on azure
     add 086fc51  Merge pull request #73 from apache/bugfix-DLAB-527
     add ddc2044  [DLAB-77] Fixed result.write operation
     add ceb071c  Merge pull request #74 from Dyoma33/DLAB-77-dev
     add 2f79cd9  DLAB-574 removed azure_client_id param from docker requests
     add c042f0d  Merge pull request #75 from apache/bugfix-DLAB-574
     add 7bea848  [DLAB-77] Added username and pass to json
     add be9cc6a  Merge pull request #76 from Dyoma33/DLAB-77-dev
     add ce25664  DLAB-000 unit test fixed
     add 0b74de8  [DLAB-551]: Fix problem with create notebooks of the same template simultaneously
     add cd23b5d  [DLAB-551]: Fix problem with create notebooks of the same template simultaneously   add all templates
     add effe960  Merge pull request #77 from ioleksandr/DLAB-551
     add 0410ffc  [DLAB-589] Remove n1-standard-1 shape
     add 7932305  Merge pull request #78 from Dyoma33/DLAB-580
     add c1c4451  [DLAB-77-551] Fixed image creation issue for Tensor-Rstudio
     add 04ccc64  Merge pull request #79 from Dyoma33/DLAB-77-dev
     add b898523  [DLAB-77] Added missing coma
     add e3bc758  Merge pull request #80 from Dyoma33/DLAB-77-dev
     add 12771be  [DLAB-551]: add forgotten lib
     add 31518ab  Merge pull request #81 from ioleksandr/DLAB-551
     add 06f1da6  DLAB-582 added API for getting DLab version
     add d2deca8  Merge pull request #82 from apache/feature-DLAB-582
     add 2ee1914  [DLAB-77] Fixed dataengine creation issue due to missing GPU in spark cluster nodes
     add 2d42d33  Merge pull request #83 from Dyoma33/DLAB-77-dev
     add 709033c  create ssn subnet in chosen zone
     add 970b474  create ssn subnet in chosen zone
     add efb4852  create ssn subnet in chosen zone
     add ad5c564  fix_typo
     add b362662  typo fix
     add a25502c  add possibility to choose zone on edge provisioning
     add 7f9695e  [DLAB-599] Add possibility to choose zone during DLab deployment
     add 837e8f1  [DLAB-599] Add possibility to choose zone during DLab deployment
     add d27782d  [GCP]: Fix Data Engine creation fails on DeepLearning  -remove old and unsupported library Caffe  -change versionc of cuda for Data Engine on deeplearning
     add 7c6f1c9  Merge pull request #84 from apache/DLAB-523
     add d58afd8  [DLAB-580] Changed shape in integration tests
     add 6cfbeb5  Merge pull request #85 from Dyoma33/DLAB-580
     add 0858bba  [DLAB-456]: fixed issue with header structure
     add 3e3c33a  Merge pull request #86 from apache/DLAB-456
     add 583cf02  [DLAB-593]: Fixed issue with removing IAM resources
     add e66a70a  Merge pull request #87 from apache/DLAB-593
     add 4c04431  [DLAB-594]: added tags for Elastic IPs
     add 2cad14f  [DLAB-594]: added tags for VPCs,subnets, Route tables, SGs and IAM roles
     add e506e4b  [DLAB-594]: fixed issue with creating IAM role and added tag for peering connection
     add 4348401  [DLAB-594]: fixed issue with creating IAM role
     add 6c7a30a  [DLAB-594]: fixed issue with removing peering connection during rolling back
     add e2b5f80  debugging
     add 74788b1  [DLAB-594]: Fixed issue second VPC
     add b8bec80  [DLAB-594]: Fixed typo
     add 4900f52  [DLAB-594]: Fixed typo
     add f74984a  Merge pull request #88 from apache/DLAB-594
     add ae2926a  [DLAB-596]: Fixed issue with header structure after Dataengine creation with custom Spark configuration
     add aff5303  Merge pull request #89 from apache/DLAB-596
     add 404eb3c  [DLAB-597]: Fixed issue with getting list of Service Accounts
     add 8dae908  Merge pull request #90 from apache/DLAB-597-fix
     add bdc7fea  DLAB-453 added possibility to terminate computational by scheduler
     add d1842f7  Merge pull request #91 from apache/feature-DLAB-453-1
     add 9260408  EPMCDLAB-000 refactored ldap authentication
     add d2a1a40  DLAB-000 fixed merge conflicts
     add 875566d  DLAB-000 copyright updated
     add 85f0db8  Merge pull request #92 from apache/ldab_refactored
     add 22aba18  [DLAB-600]: Fixed issue with missed tags
     add bbf8b59  Merge pull request #93 from apache/DLAB-600
     add 8d86774  [DLAB-592]: use DataProc v1.4 instead of v1.1
     add 4bfaf01  Merge pull request #94 from apache/DLAB-592
     add bbf373e  DLAB-602 fixed bug connected with wrong error message in case of wrong user login entered
     add b6e7f8a  Merge pull request #95 from apache/bugfix-DLAB-602-1
     add 4c04126  [DLAB-580] Removed n1-standard-1 shape from Dataproc jenkins job
     add 55cd899  Merge pull request #96 from Dyoma33/DLAB-580
     add e4d5dd4  DLAB-570 fixed bug connected with wrong key status in case of fail
     add 7d37d3c  Merge branch 'bugfix-DLAB-570' of github.com:apache/incubator-dlab into DLAB-572
     add 4e21daa  [DLAB-572]: added handler on edge creation failing; app version added
     add 76c8a67  [DLAB-572]: linter configuration updates
     add 87e5ba8  DLAB-572 added status to health status page in case of edge is not exist
     add 652e3eb  [DLAB-583]: added meta data service
     add b990cac  Merge pull request #97 from apache/DLAB-572
     add 25f93b5  DLAB-000 changed error message in case of wrong credentials
     add 4e0c60f  DLAB-000 changed error message in case of wrong credentials for dev mode
     add 5077696  Merge branch 'develop' into DLAB-599
     add a43f961  Merge pull request #98 from apache/DLAB-599
     add 264f901  [DLAB-590] add information to status.json about error
     add 1693024  Merge pull request #100 from apache/DLAB-590
     add 6ef4981  DLAB-603 added public ip to getAllEnv API
     add e68872d  Merge pull request #101 from apache/feature-DLAB-603
     add 5961fff  DLAB-000 removed --rm arg from docker status command
     add 216a632  DLAB-000 moved dlab-process module to provisioning service
     add 697ebb4  DLAB-000 removed not needed classes
     add 5465d33  DLAB-000 removed dlab-auth-common and dlab-rest-client module
     add d5cdabb  Merge pull request #102 from apache/refactoring
     add 36f93e9  [DLAB-606] create peering route for secondary VPC
     add 8450ca0  Merge pull request #103 from apache/DLAB-606
     add f2b2fab  [DLAB-603]: added Edge IP on management grid
     add 826848e  Merge pull request #104 from apache/DLAB-603
     add dcd7dfa  DLAB-582 added scm maven properties
     add 6f5c164  [DLAB-582]: added copying of git directory
     add 9d14250  Merge pull request #105 from apache/bugfix-DLAB-582
     add ce3633c  DLAB-000 fixed bug on gcp connected with security configuration
     add d0c23d2  [DLAB-592] Upgrade Dataproc to 1.2 and 1.4 [bugfix]  - update Zeppelin from 0.8.0 to 0.8.1 for Spark 2.4.0 support  - change autotest Dataproc version to 1.2 from 1.1
     add e681bd1  Merge pull request #107 from apache/DLAB-592
     add 393e8a1  [DLAB-569]: Added installation of NTPd
     add 9d0fc97  [DLAB-569]: Fixed issue with NTP in private subnet
     add b1d0863  [DLAB-569]: Fixed issue with NTP in private subnet
     add 3bf62d8  [DLAB-569]: Fixed issue with NTP in private subnet
     add 8f8ddaa  [DLAB-569]: Fixed issue with NTP in private subnet
     add a40d5e2  [DLAB-569]: Fixed issue with NTP in private subnet
     add 9b2266c  [DLAB-569]: fixed issue with ntpd
     add 302c380  Merge pull request #106 from apache/DLAB-569
     add 7d9c594  [DLAB-598]: added cluster version on Data Engine Service popup
     add 28bc5e3  Merge pull request #108 from apache/DLAB-598
     add 8e1662e  [DLAB-607]: added last status check on key upload complete
     add 755c938  [DLAB-607]: added key upload proccess emitter
     add 03e76b1  [DLAB-607]: added extra health status check on admin page for action managing rights
     add ba059cc  [DLAB-607]: refresh data after  key upload
     add 3da8f9e  [DLAB-612]: case sensitivity of current user fixes
     add d009337  Merge pull request #110 from apache/DLAB-607
     add 3e7a730  DLAB-000 updated versions of notebook templates for IT
     add dbdee77  DLAB-000 updated EMR version for IT
     add 8ea57be  [DLAB-613][Azure][Data Lake]: fixed issue with login
     add fea9db2  Merge pull request #111 from apache/DLAB-613
     add f622c90  [DLAB-617]: fixed labels spacing between values on Notebook popup
     add aaa896e  Merge pull request #112 from apache/DLAB-617
     add 970d431  [DLAB-615]: added possibility to manage all users instances in spite of  Admins edge status
     add b36975e  Merge pull request #113 from apache/DLAB-615
     add e2baf50  [DLAB-579]: fixed issue with filters labeling on billing report grid
     add 97e9cbe  Merge pull request #114 from apache/DLAB-579
     add 97af247  EPMCDLAB-000 changed logic for inactivity checking
     add b497ae5  EPMCDLAB-000 inactivity bugfix
     add 05f5143  add markers for spark and emr
     add 29c1762  partial changes
     add 2c7e43e  correct names of notebooks
     add 2b1edbf  change function for other notebooks
     add e5ea52f  fixes for previous commit
     add 56f36f8  remove java idle marker
     add c16d3c4  create initial inactivity log
     add 9b36fc1  create initial inactivity log
     add a91f8bc  changes in edge SG port range for spark application master
     add 67c154a  fix for rstudio
     add e4342eb  EPMCDLAB-000 fixed merge conflicts
     add a3dda6b  DLAB-406 prevent executing exploratory scheduler when it has corresponding computational with status creating/terminating/configuring
     add 4e97969  Merge pull request #3 from apache/bugfix-DLAB-406
     add db483d4  DLAB-401 last activity field is updated when any action was performed with instance
     add b44c1f2  Merge pull request #4 from apache/bugfix-DLAB-401
     add bb8056b  DLAB-415 added possibility to consider cluster inactivity when executing stop scheduler for exploratory
     add b2ebbcd  Merge pull request #5 from apache/feature-DLAB-415
     add ef7c735  [DLAB-402] Update last time inactivity after restarting by starting time [DLAB-405] Changes in names of idle_check parameters
     add 7152eb7  Merge pull request #6 from ioleksandr/inactivity_integration
     add 6108bbe  DLAB-410 forbid to show reminder for inactivity scheduler
     add 224b9d1  Merge pull request #7 from apache/bugfix-DLAB-410
     add 1cb5c3c  DLAB-444 fixed bug connected with scheduler with more than 1 computational
     add 1b59798  Merge pull request #9 from apache/bugfix-DLAB-444
     add cd949fd  DLAB-442 fixed bug with scheduler when no computational resources exist on exploratory
     add 5f80ab6  Merge pull request #10 from apache/bugfix-DLAB-442
     add 0e2c6a4  DLAB-445 fixed bug connected with computational last activity updating
     add 99b3e4b  Merge pull request #13 from apache/bugfix-DLAB-445
     add 2220603  merge develop into inactivity_integration
     add eacac5e  [DLAB-395]: removed days selection note
     add 379d67b  [DLAB-395]: removed base info notification in case scheduler is not set
     add 1ce57d8  [DLAB-395]: close scheduler after inactivity settings is settled up
     add d317e60  [DLAB-398]: changed inactivityLimits; Include max_inactivity in request
     add 0ae19f3  [DLAB-398]: added switcher of scheduler by type
     add ce9015c  [DLAB-398]: select offset state fixes; time picker theme fixes
     add 25598d0  [DLAB-398]: added force scheduler usage even some jobs are ran on computational resources
     add 5b24b4d  [DLAB-416]: removed inherit settings for notebook without active dataengines
     add 7cda4ff  [DLAB-465] Fix problem with Inactivity file which doesn't have ID for Data Engine Cluster in Azure and GCP
     add 9d9562c  Merge pull request #20 from ioleksandr/inactivity_integration
     add f8460f3  DLAB-406 fixed bug with inactivity scheduler
     add a7903eb  DLAB-471 adding parameter that will remove docker container for check inactivity after it is executed
     add 1422829  [DLAB-482] fix fail of Spark configuration on installing kernels step
     add e249549  Merge pull request #23 from ioleksandr/inactivity_integration
     add 47979d7  DLAB-527 fixed bug connected with azure billing
     add 99a5829  Merge remote-tracking branch 'remotes/origin/develop' into inactivity_integration
     add 121ffc5  DLAB-000 Licence headers updated
     add 635251d  [DLAB-480]: fixed action buttons overlapping in case of not selected hours
     add 3c975be  [DLAB-480]: added scheduler.calculations; setDefault for week selections model
     add eef52dd  [DLAB-480]: prevent float and negative numbers; inactivity validation fixes
     add 7ca2e08  [DLAB-480]: error handling labeling fixes
     add 102d497  [DLAB-480]: added consider_inactivity patameter to idle time scheduler
     add 63b1b25  [DLAB-480]: moved general isNumeric Key check into utils
     add 539bbcb  [DLAB-480]: updated scheduler with set/reset actions separation
     add f738195  DLAB-000 fixed bug connected with inactivity scheduler
     add 9bacc95  [DLAB-454]: added controls for resources termination
     add 04860fe  [DLAB-454]: added controls for resources termination
     add 4bb0fbc  [DLAB-454]: added terminate_datetime request parameter
     add f4fdcbe  DLAB-000 fixed merge conflicts
     add 6426d06  DLAB-000 fixed merge conflicts
     add 5586273  Change copyrights due to new standards
     add e7f029b  [DLAB-454]: added terminate date validity check
     add f168cd6  Merge branch 'develop' of github.com:apache/incubator-dlab into inactivity_integration
     add 9a56ccb  Merge remote-tracking branch 'origin/inactivity_integration' into inactivity_integration
     add 234f465  Merge pull request #109 from apache/inactivity_integration
     add bccbee4  [DLAB-583]: added meta data fixes
     add b40c062  Merge pull request #115 from apache/DLAB-583
     add 6ce6964  [DLAB-docker-script] Created script that rebuilds docker images on ssn
     add b1f4eab  [DLAB-docker-script] Added conditional for azure_auth.json.
     add 04dd664  [DLAB-docker-script] Bugfix
     add 7c232b5  [DLAB-docker-script] Changed name to more appropriate
     add ad2aa2c  [DLAB-docker-script] Parametrized docker-build script
     add a9fc846  Merge pull request #116 from apache/docker-script
     add ba2bd75  Update README.md
     add 0533553  DLAB-0 added release notes link
     add 107a039  [DLAB-592] Change dataproc and Zeppelin version because of bug in 0.8.1
     add 9d8f298  Merge pull request #117 from apache/DLAB-592
     add 764000d  [DLAB-592] Change Zeppelin version to 0.8.0 in descriptions
     add e42803a  Merge pull request #119 from apache/DLAB-592
     add f0d166f  [DLAB-290]: metadata infolist fixes
     add 87ddd9b  Merge pull request #120 from apache/DLAB-290
     add 15c5db6  DLAB-0 Changed manifest dlab version property name
     add d0c9806  change ssn primary drive size first configuration of guacamole
     add 0d22e40  change ssn primary drive size first configuration of guacamole
     add 8640b86  change ssn primary drive size first configuration of guacamole
     add 616c4c0  change ssn primary drive size first configuration of guacamole
     add 6f604a4  Update configure_docker.py
     add 546ac58  Update configure_docker.py
     add c14cc21  Merge remote-tracking branch 'origin/DLAB-3' into DLAB-3
     add 8ac2297  Update configure_docker.py
     add 4f09046  Update configure_docker.py
     add 2e49780  Update configure_docker.py
     add 4fe05f7  Update configure_docker.py
     add 7b96471  Update configure_docker.py
     add 146e250  Update configure_docker.py
     add d2fd4dd  Update configure_docker.py
     add d094ac8  add cron reboot job and autorestart to dockers
     add ef32ed9  add cron reboot job and autorestart to dockers
     add c89eb75  add cron reboot job and autorestart to dockers
     add 0496b4c  Update configure_docker.py
     add 1645fc8  Merge remote-tracking branch 'origin/DLAB-3' into DLAB-3
     add 973ca43  add cron reboot job and autorestart to dockers
     add 21344ef  add cron reboot job and autorestart to dockers
     add 2ce65bf  final fixes
     add c5b71de  final fixes
     add ccc00a3  final fixes
     add d5e6e97  pass fix
     add 7f6f1a0  change size of storage device for GCP also
     new 0fb6b6b  DLAB-000 fixed merge conflicts
     new b9f736e  [DLAB-4]: added guacamole-common-js lib
     new 255cb90  [DLAB-4]: added web terminal component
     new ad18801  [DLAB-4]: redirect to terminal with new tab by notebook ip
     new 736a26e  [DLAB-4]: added routing to web terminal connection
     new 45378b0  [DLAB-4]: added terminal per notebook on actions panel
     new 1a7be78  [DLAB-4]: fixed location and token for connection
     new 84ee642  DLAB-2 added backend for web terminal
     new deb3d36  DLAB-2 added possibility to use admin key during ssh connection
     new 4e70035  DLAB-2 disabled gzip handler for guacamole servlet
     new 040ecad  [DLAB-583]: added meta data service
     new fbeb333  [DLAB-583]: added meta data fixes

The 12 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 README.md                                          |   180 +-
 USER_GUIDE.md                                      |     2 +-
 infrastructure-provisioning/scripts/deploy_dlab.py |     1 +
 infrastructure-provisioning/scripts/deploy_ldap.sh |    26 +-
 infrastructure-provisioning/src/base/entrypoint.py |     4 +
 .../src/base/scripts/install_prerequisites.py      |     7 +-
 .../src/dataengine/scripts/configure_dataengine.py |     8 +-
 .../src/deeplearning/fabfile.py                    |    16 +
 .../scripts/configure_deep_learning_node.py        |     7 +-
 .../edge/scripts/configure_nginx_reverse_proxy.py  |     3 +-
 .../{emr.conf => dataengine-service.conf}          |     0
 .../src/edge/templates/nginx.conf                  |     8 +-
 .../api/{git_creds.py => check_inactivity.py}      |     2 +-
 .../src/general/conf/dlab.ini                      |     2 +
 .../files/aws/dataengine-service_Dockerfile        |     3 +
 .../src/general/files/aws/dataengine_Dockerfile    |     1 +
 .../src/general/files/aws/deeplearning_Dockerfile  |     3 +
 .../src/general/files/aws/jupyter_Dockerfile       |     3 +
 .../src/general/files/aws/rstudio_Dockerfile       |     3 +
 .../src/general/files/aws/ssn_Dockerfile           |     2 +-
 .../src/general/files/aws/ssn_policy.json          |     3 +-
 .../general/files/aws/tensor-rstudio_Dockerfile    |     3 +
 .../src/general/files/aws/tensor_Dockerfile        |     3 +
 .../src/general/files/aws/tensor_description.json  |     2 +-
 .../src/general/files/aws/zeppelin_Dockerfile      |     3 +
 .../src/general/files/azure/base_Dockerfile        |     1 +
 .../src/general/files/azure/dataengine_Dockerfile  |     1 +
 .../general/files/azure/deeplearning_Dockerfile    |     3 +
 .../src/general/files/azure/jupyter_Dockerfile     |     4 +
 .../src/general/files/azure/rstudio_Dockerfile     |     3 +
 .../src/general/files/azure/ssn_Dockerfile         |     1 +
 .../src/general/files/azure/tensor_Dockerfile      |     3 +
 .../src/general/files/azure/zeppelin_Dockerfile    |     3 +
 .../src/general/files/gcp/base_Dockerfile          |     1 +
 .../files/gcp/dataengine-service_Dockerfile        |     5 +-
 .../files/gcp/dataengine-service_description.json  |     5 +-
 .../src/general/files/gcp/dataengine_Dockerfile    |     3 +-
 .../general/files/gcp/dataengine_description.json  |     1 -
 .../src/general/files/gcp/deeplearning_Dockerfile  |     3 +
 .../src/general/files/gcp/jupyter_Dockerfile       |     3 +
 .../src/general/files/gcp/jupyter_description.json |     1 -
 .../src/general/files/gcp/rstudio_Dockerfile       |     3 +
 .../src/general/files/gcp/rstudio_description.json |     1 -
 .../src/general/files/gcp/ssn_Dockerfile           |     1 +
 .../src/general/files/gcp/ssn_policy.json          |     7 +-
 .../src/general/files/gcp/ssn_roles.json           |     3 +-
 .../files/{aws => gcp}/tensor-rstudio_Dockerfile   |     5 +-
 ...iption.json => tensor-rstudio_description.json} |     6 +-
 .../src/general/files/gcp/tensor_Dockerfile        |     3 +
 .../src/general/files/gcp/tensor_description.json  |     6 +-
 .../src/general/files/gcp/zeppelin_Dockerfile      |     3 +
 .../general/files/gcp/zeppelin_description.json    |     1 -
 .../src/general/lib/aws/actions_lib.py             |   409 +-
 .../src/general/lib/aws/meta_lib.py                |     5 +-
 .../src/general/lib/azure/actions_lib.py           |    45 +-
 .../src/general/lib/gcp/actions_lib.py             |   124 +-
 .../src/general/lib/gcp/meta_lib.py                |    80 +-
 .../src/general/lib/os/debian/common_lib.py        |    15 +
 .../src/general/lib/os/debian/notebook_lib.py      |    39 -
 .../src/general/lib/os/fab.py                      |    25 +
 .../src/general/lib/os/redhat/common_lib.py        |    19 +-
 .../src/general/lib/os/redhat/notebook_lib.py      |    46 -
 .../general/scripts/aws/common_create_bucket.py    |     3 +-
 .../scripts/aws/common_create_role_policy.py       |     5 +-
 .../general/scripts/aws/common_create_subnet.py    |    11 +-
 .../aws/common_notebook_configure_dataengine.py    |     6 +-
 .../general/scripts/aws/common_start_notebook.py   |    14 +
 .../scripts/aws/dataengine-service_configure.py    |     9 +-
 .../general/scripts/aws/dataengine_configure.py    |    11 +-
 .../src/general/scripts/aws/dataengine_start.py    |    52 +-
 .../general/scripts/aws/deeplearning_configure.py  |    20 +-
 .../scripts/aws/edge_associate_elastic_ip.py       |     7 +-
 .../src/general/scripts/aws/edge_configure.py      |     2 +-
 .../src/general/scripts/aws/edge_prepare.py        |    87 +-
 .../src/general/scripts/aws/jupyter_configure.py   |    30 +-
 .../jupyter_dataengine-service_create_configs.py   |     2 +
 .../src/general/scripts/aws/rstudio_configure.py   |    18 +-
 .../scripts/aws/ssn_associate_elastic_ip.py        |     7 +-
 .../src/general/scripts/aws/ssn_configure.py       |    60 +-
 .../src/general/scripts/aws/ssn_create_vpc.py      |     5 +
 .../src/general/scripts/aws/ssn_prepare.py         |   112 +-
 .../scripts/aws/tensor-rstudio_configure.py        |    22 +-
 .../src/general/scripts/aws/tensor_configure.py    |    18 +-
 .../src/general/scripts/aws/zeppelin_configure.py  |    28 +-
 .../azure/common_notebook_configure_dataengine.py  |     5 +-
 .../general/scripts/azure/common_start_notebook.py |    14 +
 .../general/scripts/azure/dataengine_configure.py  |    90 +-
 .../src/general/scripts/azure/dataengine_start.py  |    20 +
 .../scripts/azure/deeplearning_configure.py        |   106 +-
 .../src/general/scripts/azure/edge_configure.py    |    67 +-
 .../src/general/scripts/azure/edge_prepare.py      |    35 +-
 .../src/general/scripts/azure/jupyter_configure.py |    79 +-
 .../src/general/scripts/azure/rstudio_configure.py |    78 +-
 .../src/general/scripts/azure/ssn_configure.py     |     2 +
 .../src/general/scripts/azure/tensor_configure.py  |    83 +-
 .../general/scripts/azure/zeppelin_configure.py    |    91 +-
 .../general/scripts/gcp/common_create_instance.py  |     7 +-
 .../gcp/common_notebook_configure_dataengine.py    |     6 +-
 .../general/scripts/gcp/common_prepare_notebook.py |    38 +-
 .../general/scripts/gcp/common_start_notebook.py   |    14 +
 .../general/scripts/gcp/common_stop_notebook.py    |    17 +-
 .../scripts/gcp/common_terminate_notebook.py       |    14 +-
 .../scripts/gcp/dataengine-service_configure.py    |    79 +-
 .../scripts/gcp/dataengine-service_jars_parser.py  |    14 +-
 .../general/scripts/gcp/dataengine_configure.py    |    71 +-
 .../src/general/scripts/gcp/dataengine_prepare.py  |     2 +-
 .../src/general/scripts/gcp/dataengine_start.py    |    22 +
 .../general/scripts/gcp/deeplearning_configure.py  |    83 +-
 .../src/general/scripts/gcp/edge_configure.py      |    43 +-
 .../src/general/scripts/gcp/edge_prepare.py        |     8 +-
 .../src/general/scripts/gcp/jupyter_configure.py   |    83 +-
 .../src/general/scripts/gcp/rstudio_configure.py   |    95 +-
 .../src/general/scripts/gcp/ssn_configure.py       |     3 +
 .../src/general/scripts/gcp/ssn_prepare.py         |     6 +-
 .../scripts/gcp/ssn_terminate_gcp_resources.py     |    10 +
 ...io_configure.py => tensor-rstudio_configure.py} |   123 +-
 .../src/general/scripts/gcp/tensor_configure.py    |    92 +-
 .../src/general/scripts/gcp/zeppelin_configure.py  |    93 +-
 ...mmon_configure_proxy.py => check_inactivity.py} |    41 +-
 .../general/scripts/os/common_clean_instance.py    |     4 +
 .../scripts/os/common_configure_reverse_proxy.py   |     8 +-
 .../general/scripts/os/common_configure_spark.py   |    20 +-
 .../os/deeplearning_install_dataengine_kernels.py  |     5 +
 .../os/jupyter_install_dataengine_kernels.py       |     5 +
 ...igure_spark.py => notebook_inactivity_check.py} |    46 +-
 .../os/rstudio_install_dataengine_kernels.py       |     5 +
 .../tensor-rstudio_install_dataengine_kernels.py   |     5 +
 .../os/tensor_install_dataengine_kernels.py        |     5 +
 .../update_inactivity_on_start.py}                 |    18 +-
 .../os/zeppelin_install_dataengine_kernels.py      |     5 +
 .../gcp/jenkins_jobs/create_data_engine/config.xml |     4 +-
 .../create_dataengine-service/config.xml           |     5 +-
 .../jenkins_jobs/create_notebook_server/config.xml |     2 +-
 .../jenkins_jobs/start_notebook_server/config.xml  |     1 +
 .../jenkins_jobs/stop_notebook_server/config.xml   |     1 +
 .../terminate_notebook_server/config.xml           |     1 +
 ..._spark-defaults_local.conf => inactive.service} |    10 +-
 .../src/general/templates/os/inactive.sh           |    49 +
 ...ok_spark-defaults_local.conf => inactive.timer} |    12 +-
 .../src/general/templates/os/inactive_rs.sh        |    48 +
 infrastructure-provisioning/src/jupyter/fabfile.py |    16 +
 .../src/jupyter/scripts/configure_jupyter_node.py  |     5 +
 infrastructure-provisioning/src/rstudio/fabfile.py |    16 +
 .../src/rstudio/scripts/configure_rstudio_node.py  |     7 +-
 .../src/ssn/files/gcp/mongo_roles.json             |    32 +-
 .../src/ssn/scripts/configure_docker.py            |    44 +
 .../src/ssn/scripts/configure_ssn_node.py          |    14 +-
 .../src/ssn/templates/docker_build.py              |    73 +
 .../src/tensor-rstudio/fabfile.py                  |    16 +
 .../scripts/configure_tensor-rstudio_node.py       |     5 +
 infrastructure-provisioning/src/tensor/fabfile.py  |    16 +
 .../src/tensor/scripts/configure_tensor_node.py    |     5 +
 .../src/zeppelin/fabfile.py                        |    16 +
 .../zeppelin/scripts/configure_zeppelin_node.py    |     5 +
 .../deeplearning/deeplearning-notebook.json        |     4 +-
 .../azure_templates/jupyter/jupyter-notebook.json  |     4 +-
 .../azure_templates/rstudio/rstudio-notebook.json  |     4 +-
 .../examples/ec2_templates/deeplearning/EMR.json   |     2 +-
 .../ec2_templates/deeplearning/EMR_spot.json       |     2 +-
 .../deeplearning/deeplearning-notebook.json        |     4 +-
 .../examples/ec2_templates/jupyter/EMR.json        |     2 +-
 .../examples/ec2_templates/jupyter/EMR_spot.json   |     2 +-
 .../ec2_templates/jupyter/jupyter-notebook.json    |     4 +-
 .../examples/ec2_templates/rstudio/EMR.json        |     2 +-
 .../examples/ec2_templates/rstudio/EMR_spot.json   |     2 +-
 .../ec2_templates/rstudio/rstudio-notebook.json    |     4 +-
 .../examples/ec2_templates/tensor/EMR.json         |     2 +-
 .../examples/ec2_templates/tensor/EMR_spot.json    |     2 +-
 .../examples/ec2_templates/zeppelin/EMR.json       |     2 +-
 .../examples/ec2_templates/zeppelin/EMR_spot.json  |     2 +-
 .../gcp_templates/deeplearning/dataproc.json       |     6 +-
 .../examples/gcp_templates/jupyter/dataproc.json   |     6 +-
 .../examples/gcp_templates/rstudio/dataproc.json   |     6 +-
 .../examples/gcp_templates/tensor/dataproc.json    |     6 +-
 .../examples/gcp_templates/zeppelin/dataproc.json  |     6 +-
 .../epam/dlab/automation/test/TestServices.java    |     4 +-
 pom.xml                                            |    12 +-
 .../com/epam/dlab/mongo/DlabResourceTypeDAO.java   |     7 +-
 .../dlab/core/parser/ParserStatisticsTest.java     |    64 -
 .../epam/dlab/auth/conf/GcpLoginConfiguration.java |     2 +-
 services/dlab-auth-common/pom.xml                  |    56 -
 .../InfrastructureMetaInfoDTO.java}                |    22 +-
 .../java/com/epam/dlab/dto/SchedulerJobDTO.java    |     7 +
 .../SparkComputationalCreateAzure.java             |     8 -
 .../exploratory/ExploratoryActionStartAzure.java   |    76 +-
 .../azure/exploratory/ExploratoryCreateAzure.java  |    16 -
 .../com/epam/dlab/dto/base/DataEngineType.java     |    54 +-
 .../computational/CheckInactivityStatusDTO.java    |    30 +-
 .../ComputationalCheckInactivityDTO.java           |    52 +-
 .../ExploratoryCheckInactivityAction.java}         |     7 +-
 .../dlab/dto/exploratory/ExploratoryStatusDTO.java |    12 +
 .../ComputationalResourceShapeDto.java             |   198 +-
 services/dlab-process/pom.xml                      |    60 -
 .../com/epam/dlab/process/ProcessConveyorTest.java |   225 -
 services/dlab-rest-client/pom.xml                  |    42 -
 .../java/com/epam/dlab/util/AnnotationUtils.java   |    61 -
 .../main/java/com/epam/dlab/util/ObjectUtils.java  |    49 -
 services/dlab-webapp-common/pom.xml                |    18 +-
 .../com/epam/dlab/auth/SecurityAuthorizer.java     |     0
 .../dlab/auth/SecurityUnauthorizedHandler.java     |     0
 .../src/main/java/com/epam/dlab/auth/UserInfo.java |     0
 .../main/java/com/epam/dlab/auth/UserInfoDAO.java  |    10 +-
 .../epam/dlab/auth/UserVerificationService.java    |     2 +-
 .../com/epam/dlab/auth/contract/SecurityAPI.java   |     0
 .../com/epam/dlab/auth/dto/UserCredentialDTO.java  |     1 -
 .../auth/oauth2/Oauth2AuthenticationService.java   |     0
 .../auth/rest/AbstractAuthenticationService.java   |     0
 .../epam/dlab/auth/rest/ConfigurableResource.java  |     0
 .../auth/rest/UserSessionDurationAuthorizer.java   |     0
 .../auth/rest/UserSessionDurationCallback.java     |     0
 .../com/epam/dlab/rest/client/RESTService.java     |     0
 .../epam/dlab/rest/client/RESTServiceFactory.java  |     0
 .../com/epam/dlab/rest/contracts/ApiCallbacks.java |     4 +-
 .../dlab/rest/contracts/InfrasctructureAPI.java    |     3 +-
 .../java/com/epam/dlab/rest/contracts/KeyAPI.java  |     3 +-
 services/provisioning-service/pom.xml              |    10 +-
 services/provisioning-service/provisioning.yml     |     2 +-
 .../epam/dlab/backendapi/core/DockerWarmuper.java  |     2 +-
 .../backendapi/core/commands/RunDockerCommand.java |     8 +-
 .../handlers/CheckInactivityCallbackHandler.java   |    94 +-
 .../dlab/backendapi/modules/ProductionModule.java  |     3 +
 .../backendapi/modules/ProvisioningDevModule.java  |    19 +-
 .../resources/InfrastructureResource.java          |    19 +-
 .../backendapi/resources/base/KeyResource.java     |    23 +-
 .../service/CheckInactivityService.java}           |     8 +-
 .../service/impl/CheckInactivityService.java       |   103 -
 .../service/impl/CheckInactivityServiceImpl.java   |   114 +
 .../backendapi/service/impl/DockerService.java     |     3 +
 .../{ReuploadKeyService.java => KeyService.java}   |    29 +-
 .../com/epam/dlab/process/ProcessConveyor.java     |     6 +-
 .../dlab/process/builder/ProcessInfoBuilder.java   |     0
 .../process/exception/DlabProcessException.java    |     0
 .../com/epam/dlab/process/model/DlabProcess.java   |     0
 .../com/epam/dlab/process/model/ProcessId.java     |     0
 .../com/epam/dlab/process/model/ProcessInfo.java   |     0
 .../com/epam/dlab/process/model/ProcessStatus.java |     0
 .../com/epam/dlab/process/model/ProcessStep.java   |     0
 .../aws/dataengine-service_check_inactivity.json   |     8 +
 .../aws/dataengine_check_inactivity.json           |     8 +
 .../aws/notebook_check_inactivity.json             |    16 +-
 .../azure/dataengine-service_check_inactivity.json |     8 +
 .../azure/dataengine_check_inactivity.json         |     8 +
 .../azure/notebook_check_inactivity.json           |    22 +-
 .../gcp/dataengine-service_check_inactivity.json   |     8 +
 .../gcp/dataengine_check_inactivity.json           |     8 +
 .../gcp/notebook_check_inactivity.json             |    22 +-
 .../dlab/backendapi/core/DockerWarmuperTest.java   |     4 +-
 services/security-aws/pom.xml                      |     7 +-
 .../aws/service/AwsUserVerificationService.java    |    16 +-
 services/security-azure/pom.xml                    |     4 -
 .../auth/azure/AzureAuthenticationResource.java    |    14 +-
 services/security-gcp/pom.xml                      |    15 +-
 .../auth/gcp/service/GcpAuthenticationService.java |     2 +-
 services/security-service/pom.xml                  |     6 +
 services/security-service/security.yml             |   112 +-
 .../dlab/auth/SecurityServiceConfiguration.java    |    39 +-
 .../epam/dlab/auth/core/CacheableReference.java    |    56 -
 .../epam/dlab/auth/core/DlabLdapConnection.java    |     2 +-
 .../dlab/auth/core/DlabLdapConnectionFactory.java  |    49 +
 .../com/epam/dlab/auth/core/LdapFilterCache.java   |    79 -
 .../java/com/epam/dlab/auth/core/LoginCache.java   |    83 -
 .../com/epam/dlab/auth/core/LoginConveyor.java     |    67 -
 .../java/com/epam/dlab/auth/core/LoginStep.java    |    47 -
 .../com/epam/dlab/auth/core/UserInfoBuilder.java   |   197 -
 .../java/com/epam/dlab/auth/dao/LdapUserDAO.java   |   189 +-
 .../com/epam/dlab/auth/dao/LdapUserDAOImpl.java    |   165 +
 .../main/java/com/epam/dlab/auth/dao/Request.java  |    92 +-
 .../epam/dlab/auth/dao/SearchRequestBuilder.java   |    26 -
 .../epam/dlab/auth/dao/UserInfoDAODumbImpl.java    |     6 +-
 .../epam/dlab/auth/dao/UserInfoDAOMongoImpl.java   |    85 +-
 .../dlab/auth/dao/filter/SearchResultMapper.java   |    31 -
 .../auth/dao/filter/SearchResultProcessor.java     |    68 -
 .../com/epam/dlab/auth/dao/script/DeepMap.java     |    57 -
 .../epam/dlab/auth/dao/script/ScriptHolder.java    |    59 -
 .../dao/script/SearchResultToDictionaryMapper.java |    98 -
 .../auth/modules/AwsSecurityServiceModule.java     |     4 +-
 .../auth/modules/AzureSecurityServiceModule.java   |     4 +-
 .../auth/modules/GcpSecurityServiceModule.java     |     8 +-
 .../dlab/auth/modules/SecurityServiceModule.java   |    13 +-
 .../SynchronousLdapAuthenticationResource.java     |    80 +
 .../SynchronousLdapAuthenticationService.java      |   186 -
 .../dlab/auth/service/AuthenticationService.java}  |    15 +-
 .../service/impl/LdapAuthenticationService.java    |    89 +
 .../test/java/com/epam/dlab/auth/aws/AwsTest.java  |    78 -
 .../com/epam/dlab/auth/core/LoginConveyorTest.java |   131 -
 .../dlab/auth/dao/script/ScriptHolderTest.java     |    65 -
 .../java/com/epam/dlab/auth/ldap/AuthTest.java     |    29 -
 .../java/com/epam/dlab/auth/ldap/BasicTest.java    |   116 -
 .../java/com/epam/dlab/auth/ldap/JsonTest.java     |    84 -
 .../java/com/epam/dlab/auth/ldap/ScriptList.java   |    76 -
 .../impl/LdapAuthenticationServiceTest.java        |   139 +
 services/self-service/pom.xml                      |    14 +-
 services/self-service/self-service.yml             |    12 +
 .../dlab/backendapi/SelfServiceApplication.java    |    30 +
 .../SelfServiceApplicationConfiguration.java       |    16 +
 .../epam/dlab/backendapi/dao/BaseBillingDAO.java   |    21 +-
 .../com/epam/dlab/backendapi/dao/BillingDAO.java   |     4 +-
 .../epam/dlab/backendapi/dao/ComputationalDAO.java |    14 +-
 .../java/com/epam/dlab/backendapi/dao/EnvDAO.java  |    21 +-
 .../epam/dlab/backendapi/dao/ExploratoryDAO.java   |    33 +-
 .../epam/dlab/backendapi/dao/SchedulerJobDAO.java  |    62 +-
 .../dlab/backendapi/dao/aws/AwsBillingDAO.java     |   309 +-
 .../dlab/backendapi/dao/azure/AzureBillingDAO.java |   325 +-
 .../dlab/backendapi/dao/gcp/GcpBillingDao.java     |     5 +-
 .../epam/dlab/backendapi/modules/DevModule.java    |    31 +-
 .../dlab/backendapi/modules/ProductionModule.java  |     1 +
 .../resources/InfrastructureInfoResource.java      |     9 +
 .../resources/aws/BillingResourceAws.java          |    62 +-
 .../resources/azure/BillingResourceAzure.java      |     2 +-
 .../callback/CheckInactivityCallback.java          |    40 +-
 .../resources/callback/ComputationalCallback.java  |    45 +-
 .../resources/callback/ExploratoryCallback.java    |     3 +-
 .../callback/base/KeyUploaderCallback.java         |     5 +-
 .../AwsBillingFilter.java => BillingFilter.java}   |    23 +-
 .../backendapi/resources/dto/UserResourceInfo.java |     8 +
 .../resources/dto/aws/AwsBillingFilter.java        |    17 +-
 .../resources/dto/azure/AzureBillingFilter.java    |    16 +-
 .../com/epam/dlab/backendapi/roles/UserGroup.java  |    31 -
 .../schedulers/CheckInactivityScheduledJob.java    |    12 +-
 .../computational/StopComputationalJob.java        |     2 -
 ...onalJob.java => TerminateComputationalJob.java} |    19 +-
 .../dlab/backendapi/service/BillingService.java    |    73 +-
 .../dlab/backendapi/service/GuacamoleService.java  |    10 +
 .../dlab/backendapi/service/InactivityService.java |    15 +-
 .../service/InfrastructureInfoService.java         |     3 +
 .../backendapi/service/SchedulerJobService.java    |     5 -
 .../backendapi/service/aws/AwsBillingService.java  |    10 +-
 .../service/azure/AzureBillingService.java         |   172 +-
 .../service/impl/EnvironmentServiceImpl.java       |     3 +-
 .../service/impl/GuacamoleServiceImpl.java         |    61 +
 .../service/impl/InactivityServiceImpl.java        |   100 +-
 .../impl/InfrastructureInfoServiceBase.java        |    15 +
 .../service/impl/MavenCentralLibraryService.java   |     6 +-
 .../service/impl/SchedulerJobServiceImpl.java      |   123 +-
 .../servlet/guacamole/GuacamoleSecurityFilter.java |    56 +
 .../servlet/guacamole/GuacamoleServlet.java        |    32 +
 .../epam/dlab/backendapi/util/RequestBuilder.java  |  1072 +-
 .../validation/SchedulerJobDTOValidator.java       |     2 +-
 .../src/main/resources/webapp/.angular-cli.json    |    61 -
 .../src/main/resources/webapp/angular.json         |   113 +
 .../src/main/resources/webapp/package-lock.json    | 15502 +++++++++++++++++++
 .../src/main/resources/webapp/package.json         |    49 +-
 .../main/resources/webapp/src/app/app.module.ts    |    35 +-
 .../resources/webapp/src/app/app.routing.module.ts |     9 +-
 .../dictionary => collections}/dictionary.ts       |    10 +-
 .../core/collections/index.ts}                     |     5 +-
 .../resources/webapp/src/app/core/core.module.ts   |     4 +-
 .../app/core/directives/click-outside.directive.ts |    20 +-
 .../src/app/core/interceptors/error.interceptor.ts |    58 +
 .../http.token.interceptor.ts}                     |    38 +-
 .../core/interceptors/httpInterceptor.service.ts   |   101 -
 .../core/interceptors/logInterceptor.factory.ts    |    27 -
 .../nocache.interceptor.ts}                        |    36 +-
 ...mputationalResourceApplicationTemplate.model.ts |     3 +-
 .../models/computationalResourceImage.model.ts     |     4 +-
 .../models/exploratoryEnvironmentVersion.model.ts  |     3 +-
 .../app/core/models/resourceShapeTypes.model.ts    |     2 +-
 .../webapp/src/app/core/pipes/highlight.pipe.ts    |     1 -
 .../src/app/core/services/appRouting.service.ts    |     2 +-
 .../core/services/applicationSecurity.service.ts   |   199 +-
 .../services/applicationServiceFacade.service.ts   |   334 +-
 .../src/app/core/services/authorization.guard.ts   |    17 +-
 .../webapp/src/app/core/services/backup.service.ts |    17 +-
 .../src/app/core/services/billingReport.service.ts |    15 +-
 .../src/app/core/services/checkParams.guard.ts     |    26 +-
 .../src/app/core/services/cloudProvider.guard.ts   |     4 +-
 .../services/dataengineConfiguration.service.ts    |    25 +-
 .../src/app/core/services/healthStatus.service.ts  |   120 +-
 .../webapp/src/app/core/services/index.ts          |     1 +
 .../core/services/librariesInstallation.service.ts |    40 +-
 .../src/app/core/services/manageUngit.service.ts   |    18 +-
 .../services/managementEnvironments.service.ts     |    15 +-
 .../app/core/services/rolesManagement.service.ts   |    45 +-
 .../src/app/core/services/scheduler.service.ts     |    28 +-
 .../{appRouting.service.ts => storage.service.ts}  |    36 +-
 .../src/app/core/services/userAccessKey.service.ts |    41 +-
 .../src/app/core/services/userResource.service.ts  |    85 +-
 .../webapp/src/app/core/util/checkUtils.ts         |     9 +
 .../util/collections/dictionary/idictionary.ts     |    28 -
 .../webapp/src/app/core/util/errorUtils.ts         |     9 +-
 .../webapp/src/app/core/util/fileUtils.ts          |     9 +-
 .../resources/webapp/src/app/core/util/index.ts    |     2 -
 .../app/health-status/environment-status.model.ts  |    54 -
 .../health-status-grid.component.html              |    69 -
 .../health-status-grid.component.ts                |    90 -
 .../app/health-status/health-status.component.html |    50 -
 .../app/health-status/health-status.component.scss |    37 -
 .../app/health-status/health-status.component.ts   |   233 -
 .../src/app/health-status/health-status.module.ts  |    73 -
 .../webapp/src/app/login/login.component.css       |     8 +-
 .../webapp/src/app/login/login.component.ts        |     5 +-
 .../backup-dilog/backup-dilog.component.html       |     0
 .../backup-dilog/backup-dilog.component.scss       |     0
 .../backup-dilog/backup-dilog.component.ts         |     2 +-
 .../resources/webapp/src/app/management/index.ts   |    61 +-
 .../manage-environment-dilog.component.html        |     0
 .../manage-environment-dilog.component.scss        |     0
 .../manage-environment-dilog.component.ts          |    14 +-
 .../group-name-validarion.directive.ts             |     1 -
 .../manage-roles-groups.component.html             |     0
 .../manage-roles-groups.component.scss             |     4 +-
 .../manage-roles-groups.component.ts               |    12 +-
 .../management-grid/management-grid.component.html |   114 +-
 .../management-grid/management-grid.component.scss |     3 +
 .../management-grid/management-grid.component.ts   |    82 +-
 .../src/app/management/management.component.html   |    35 +-
 .../src/app/management/management.component.scss   |     8 +-
 .../src/app/management/management.component.ts     |   248 +-
 .../webapp/src/app/management/management.model.ts  |    32 +-
 .../ssn-monitor/ssn-monitor.component.html         |     0
 .../ssn-monitor/ssn-monitor.component.scss         |     0
 .../ssn-monitor/ssn-monitor.component.ts           |     0
 .../src/main/resources/webapp/src/app/operators.ts |     4 -
 .../src/app/reporting/reporting.component.ts       |    20 +-
 .../webapp/src/app/reporting/reporting.module.ts   |     6 +-
 .../src/app/reporting/toolbar/toolbar.component.ts |     5 +-
 .../cluster-details/cluster-details.component.html |    10 +-
 .../cluster-details/cluster-details.component.ts   |    15 +-
 ...utational-resource-create-dialog.component.html |    53 +-
 ...utational-resource-create-dialog.component.scss |    13 +-
 ...mputational-resource-create-dialog.component.ts |    39 +-
 .../computational-resource-create.model.ts         |     2 +-
 .../computational-resource-create-dialog/index.ts  |     3 -
 .../computational-resources-list.component.html    |     2 +-
 .../computational-resources-list.component.ts      |    25 +-
 .../ami-create-dialog.component.scss               |     7 +-
 .../ami-create-dialog.component.ts                 |    14 +-
 .../detail-dialog/detail-dialog.component.html     |    68 +-
 .../detail-dialog/detail-dialog.component.ts       |    16 +-
 .../resources/exploratory/detail-dialog/index.ts   |     1 -
 ...ratory-environment-create-dialog.component.html |     2 +-
 ...loratory-environment-create-dialog.component.ts |    18 +-
 .../exploratory-environment-create.model.ts        |     2 +-
 .../exploratory-environment-create-dialog/index.ts |     3 -
 .../exploratory/install-libraries/index.ts         |     3 -
 .../install-libraries.component.html               |     2 +-
 .../install-libraries.component.scss               |     6 +-
 .../install-libraries.component.ts                 |    61 +-
 .../install-libraries/install-libraries.model.ts   |     2 +-
 .../manage-ungit/manage-ungit.component.html       |     9 +-
 .../manage-ungit/manage-ungit.component.scss       |     9 +-
 .../manage-ungit/manage-ungit.component.ts         |    20 +-
 .../resources/manage-ungit/manage-ungit.model.ts   |     2 +-
 .../src/app/resources/resources-grid/index.ts      |     8 +-
 .../resources-grid/resources-grid.component.css    |    11 +-
 .../resources-grid/resources-grid.component.html   |    18 +-
 .../resources-grid/resources-grid.component.ts     |    46 +-
 .../src/app/resources/resources.component.html     |     2 +-
 .../src/app/resources/resources.component.ts       |    25 +-
 .../scheduler/scheduler.calculations.ts}           |    34 +-
 .../resources/scheduler/scheduler.component.html   |   188 +-
 .../resources/scheduler/scheduler.component.scss   |    82 +-
 .../app/resources/scheduler/scheduler.component.ts |   252 +-
 .../src/app/resources/scheduler/scheduler.model.ts |    25 +-
 .../webapp/src/app/shared/bubble/bubble.service.ts |     2 +-
 .../shared/form-controls/dropdowns.component.scss  |     7 +
 .../confirmation-dialog.component.html             |     2 +-
 .../confirmation-dialog.component.ts               |    22 +-
 .../confirmation-dialog.model.ts                   |    12 +-
 .../key-upload-dialog.component.ts                 |    14 +-
 .../key-upload-dialog/key-upload.model.ts          |     8 +-
 .../app/shared/modal-dialog/modal.component.html   |    41 +-
 .../app/shared/modal-dialog/modal.component.scss   |    25 +-
 .../notification-dialog.component.ts               |     4 +-
 .../webapp/src/app/shared/navbar/index.ts          |     5 +-
 .../src/app/shared/navbar/navbar.component.html    |    29 +-
 .../src/app/shared/navbar/navbar.component.scss    |    29 +-
 .../src/app/shared/navbar/navbar.component.ts      |    73 +-
 .../shared/time-picker/time-picker.component.scss  |     3 +
 .../shared/time-picker/time-picker.component.ts    |     6 +-
 .../login.module.ts => webterminal/index.ts}       |    20 +-
 .../webterminal.component.html}                    |     5 +-
 .../webterminal.component.scss}                    |    16 +-
 .../src/app/webterminal/webterminal.component.ts   |    75 +
 .../webapp/src/assets/styles/_general.scss         |    18 +-
 .../resources/webapp/src/assets/styles/_reset.scss |     3 +-
 .../resources/webapp/src/assets/styles/_theme.scss |   193 +-
 .../webapp/src/dictionary/aws.dictionary.ts        |     1 +
 .../webapp/src/dictionary/azure.dictionary.ts      |     1 +
 .../webapp/src/dictionary/gcp.dictionary.ts        |     1 +
 .../webapp/src/dictionary/global.dictionary.ts     |     4 +-
 .../src/main/resources/webapp/src/polyfills.ts     |     1 -
 .../src/main/resources/webapp/src/styles.scss      |    12 +-
 .../main/resources/webapp/src/tsconfig.app.json    |     8 +-
 .../main/resources/webapp/src/tsconfig.spec.json   |    20 +-
 .../src/main/resources/webapp/tsconfig.json        |    16 +-
 .../src/main/resources/webapp/tslint.json          |     3 +-
 .../resources/InfrastructureInfoResourceTest.java  |    17 +
 .../service/impl/InactivityServiceImplTest.java    |   187 -
 .../impl/MavenCentralLibraryServiceTest.java       |     3 +-
 .../service/impl/ReuploadKeyServiceImplTest.java   |    10 +-
 .../service/impl/SchedulerJobServiceImplTest.java  |    99 +-
 .../dlab/backendapi/util/RequestBuilderTest.java   |     4 -
 493 files changed, 23862 insertions(+), 8057 deletions(-)
 rename infrastructure-provisioning/src/edge/templates/locations/{emr.conf => dataengine-service.conf} (100%)
 copy infrastructure-provisioning/src/general/api/{git_creds.py => check_inactivity.py} (97%)
 copy infrastructure-provisioning/src/general/files/{aws => gcp}/tensor-rstudio_Dockerfile (91%)
 copy infrastructure-provisioning/src/general/files/gcp/{tensor_description.json => tensor-rstudio_description.json} (73%)
 copy infrastructure-provisioning/src/general/scripts/gcp/{rstudio_configure.py => tensor-rstudio_configure.py} (62%)
 copy infrastructure-provisioning/src/general/scripts/os/{common_configure_proxy.py => check_inactivity.py} (61%)
 copy infrastructure-provisioning/src/general/scripts/os/{notebook_reconfigure_spark.py => notebook_inactivity_check.py} (68%)
 copy infrastructure-provisioning/src/general/scripts/{gcp/common_download_git_certfile.py => os/update_inactivity_on_start.py} (76%)
 copy infrastructure-provisioning/src/general/templates/os/{notebook_spark-defaults_local.conf => inactive.service} (88%)
 create mode 100644 infrastructure-provisioning/src/general/templates/os/inactive.sh
 copy infrastructure-provisioning/src/general/templates/os/{notebook_spark-defaults_local.conf => inactive.timer} (88%)
 create mode 100644 infrastructure-provisioning/src/general/templates/os/inactive_rs.sh
 create mode 100644 infrastructure-provisioning/src/ssn/templates/docker_build.py
 delete mode 100644 services/billing-aws/src/test/java/com/epam/dlab/core/parser/ParserStatisticsTest.java
 delete mode 100644 services/dlab-auth-common/pom.xml
 copy services/dlab-model/src/main/java/com/epam/dlab/{model/systeminfo/DiskInfo.java => dto/InfrastructureMetaInfoDTO.java} (78%)
 copy integration-tests/src/main/java/com/epam/dlab/automation/model/DeployClusterDto.java => services/dlab-model/src/main/java/com/epam/dlab/dto/computational/ComputationalCheckInactivityDTO.java (55%)
 copy services/{dlab-mongo-migration/src/main/java/com/epam/dlab/migration/DbMigration.java => dlab-model/src/main/java/com/epam/dlab/dto/exploratory/ExploratoryCheckInactivityAction.java} (84%)
 delete mode 100644 services/dlab-process/pom.xml
 delete mode 100644 services/dlab-process/src/test/java/com/epam/dlab/process/ProcessConveyorTest.java
 delete mode 100644 services/dlab-rest-client/pom.xml
 delete mode 100644 services/dlab-utils/src/main/java/com/epam/dlab/util/AnnotationUtils.java
 delete mode 100644 services/dlab-utils/src/main/java/com/epam/dlab/util/ObjectUtils.java
 rename services/{dlab-auth-common => dlab-webapp-common}/src/main/java/com/epam/dlab/auth/SecurityAuthorizer.java (100%)
 rename services/{dlab-auth-common => dlab-webapp-common}/src/main/java/com/epam/dlab/auth/SecurityUnauthorizedHandler.java (100%)
 rename services/{dlab-auth-common => dlab-webapp-common}/src/main/java/com/epam/dlab/auth/UserInfo.java (100%)
 rename services/{dlab-auth-common => dlab-webapp-common}/src/main/java/com/epam/dlab/auth/UserInfoDAO.java (79%)
 rename services/{dlab-auth-common => dlab-webapp-common}/src/main/java/com/epam/dlab/auth/UserVerificationService.java (95%)
 rename services/{dlab-auth-common => dlab-webapp-common}/src/main/java/com/epam/dlab/auth/contract/SecurityAPI.java (100%)
 rename services/{dlab-auth-common => dlab-webapp-common}/src/main/java/com/epam/dlab/auth/dto/UserCredentialDTO.java (99%)
 rename services/{dlab-auth-common => dlab-webapp-common}/src/main/java/com/epam/dlab/auth/oauth2/Oauth2AuthenticationService.java (100%)
 rename services/{dlab-auth-common => dlab-webapp-common}/src/main/java/com/epam/dlab/auth/rest/AbstractAuthenticationService.java (100%)
 rename services/{dlab-auth-common => dlab-webapp-common}/src/main/java/com/epam/dlab/auth/rest/ConfigurableResource.java (100%)
 rename services/{dlab-auth-common => dlab-webapp-common}/src/main/java/com/epam/dlab/auth/rest/UserSessionDurationAuthorizer.java (100%)
 rename services/{dlab-auth-common => dlab-webapp-common}/src/main/java/com/epam/dlab/auth/rest/UserSessionDurationCallback.java (100%)
 rename services/{dlab-rest-client => dlab-webapp-common}/src/main/java/com/epam/dlab/rest/client/RESTService.java (100%)
 rename services/{dlab-rest-client => dlab-webapp-common}/src/main/java/com/epam/dlab/rest/client/RESTServiceFactory.java (100%)
 copy services/{self-service/src/main/java/com/epam/dlab/backendapi/service/ExternalLibraryService.java => provisioning-service/src/main/java/com/epam/dlab/backendapi/service/CheckInactivityService.java} (69%)
 delete mode 100644 services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/CheckInactivityService.java
 create mode 100644 services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/CheckInactivityServiceImpl.java
 rename services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/{ReuploadKeyService.java => KeyService.java} (82%)
 rename services/{dlab-process => provisioning-service}/src/main/java/com/epam/dlab/process/ProcessConveyor.java (100%)
 rename services/{dlab-process => provisioning-service}/src/main/java/com/epam/dlab/process/builder/ProcessInfoBuilder.java (100%)
 rename services/{dlab-process => provisioning-service}/src/main/java/com/epam/dlab/process/exception/DlabProcessException.java (100%)
 rename services/{dlab-process => provisioning-service}/src/main/java/com/epam/dlab/process/model/DlabProcess.java (100%)
 rename services/{dlab-process => provisioning-service}/src/main/java/com/epam/dlab/process/model/ProcessId.java (100%)
 rename services/{dlab-process => provisioning-service}/src/main/java/com/epam/dlab/process/model/ProcessInfo.java (100%)
 rename services/{dlab-process => provisioning-service}/src/main/java/com/epam/dlab/process/model/ProcessStatus.java (100%)
 rename services/{dlab-process => provisioning-service}/src/main/java/com/epam/dlab/process/model/ProcessStep.java (100%)
 create mode 100644 services/provisioning-service/src/main/resources/mock_response/aws/dataengine-service_check_inactivity.json
 create mode 100644 services/provisioning-service/src/main/resources/mock_response/aws/dataengine_check_inactivity.json
 create mode 100644 services/provisioning-service/src/main/resources/mock_response/azure/dataengine-service_check_inactivity.json
 create mode 100644 services/provisioning-service/src/main/resources/mock_response/azure/dataengine_check_inactivity.json
 create mode 100644 services/provisioning-service/src/main/resources/mock_response/gcp/dataengine-service_check_inactivity.json
 create mode 100644 services/provisioning-service/src/main/resources/mock_response/gcp/dataengine_check_inactivity.json
 delete mode 100644 services/security-service/src/main/java/com/epam/dlab/auth/core/CacheableReference.java
 create mode 100644 services/security-service/src/main/java/com/epam/dlab/auth/core/DlabLdapConnectionFactory.java
 delete mode 100644 services/security-service/src/main/java/com/epam/dlab/auth/core/LdapFilterCache.java
 delete mode 100644 services/security-service/src/main/java/com/epam/dlab/auth/core/LoginCache.java
 delete mode 100644 services/security-service/src/main/java/com/epam/dlab/auth/core/LoginConveyor.java
 delete mode 100644 services/security-service/src/main/java/com/epam/dlab/auth/core/LoginStep.java
 delete mode 100644 services/security-service/src/main/java/com/epam/dlab/auth/core/UserInfoBuilder.java
 create mode 100644 services/security-service/src/main/java/com/epam/dlab/auth/dao/LdapUserDAOImpl.java
 delete mode 100644 services/security-service/src/main/java/com/epam/dlab/auth/dao/SearchRequestBuilder.java
 delete mode 100644 services/security-service/src/main/java/com/epam/dlab/auth/dao/filter/SearchResultMapper.java
 delete mode 100644 services/security-service/src/main/java/com/epam/dlab/auth/dao/filter/SearchResultProcessor.java
 delete mode 100644 services/security-service/src/main/java/com/epam/dlab/auth/dao/script/DeepMap.java
 delete mode 100644 services/security-service/src/main/java/com/epam/dlab/auth/dao/script/ScriptHolder.java
 delete mode 100644 services/security-service/src/main/java/com/epam/dlab/auth/dao/script/SearchResultToDictionaryMapper.java
 create mode 100644 services/security-service/src/main/java/com/epam/dlab/auth/resources/SynchronousLdapAuthenticationResource.java
 delete mode 100644 services/security-service/src/main/java/com/epam/dlab/auth/resources/SynchronousLdapAuthenticationService.java
 copy services/{self-service/src/main/java/com/epam/dlab/backendapi/service/GitCredentialService.java => security-service/src/main/java/com/epam/dlab/auth/service/AuthenticationService.java} (74%)
 create mode 100644 services/security-service/src/main/java/com/epam/dlab/auth/service/impl/LdapAuthenticationService.java
 delete mode 100644 services/security-service/src/test/java/com/epam/dlab/auth/aws/AwsTest.java
 delete mode 100644 services/security-service/src/test/java/com/epam/dlab/auth/core/LoginConveyorTest.java
 delete mode 100644 services/security-service/src/test/java/com/epam/dlab/auth/dao/script/ScriptHolderTest.java
 delete mode 100644 services/security-service/src/test/java/com/epam/dlab/auth/ldap/AuthTest.java
 delete mode 100644 services/security-service/src/test/java/com/epam/dlab/auth/ldap/BasicTest.java
 delete mode 100644 services/security-service/src/test/java/com/epam/dlab/auth/ldap/JsonTest.java
 delete mode 100644 services/security-service/src/test/java/com/epam/dlab/auth/ldap/ScriptList.java
 create mode 100644 services/security-service/src/test/java/com/epam/dlab/auth/service/impl/LdapAuthenticationServiceTest.java
 copy services/self-service/src/main/java/com/epam/dlab/backendapi/resources/dto/{aws/AwsBillingFilter.java => BillingFilter.java} (72%)
 delete mode 100644 services/self-service/src/main/java/com/epam/dlab/backendapi/roles/UserGroup.java
 copy services/self-service/src/main/java/com/epam/dlab/backendapi/schedulers/computational/{StopComputationalJob.java => TerminateComputationalJob.java} (70%)
 create mode 100644 services/self-service/src/main/java/com/epam/dlab/backendapi/service/GuacamoleService.java
 create mode 100644 services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/GuacamoleServiceImpl.java
 create mode 100644 services/self-service/src/main/java/com/epam/dlab/backendapi/servlet/guacamole/GuacamoleSecurityFilter.java
 create mode 100644 services/self-service/src/main/java/com/epam/dlab/backendapi/servlet/guacamole/GuacamoleServlet.java
 delete mode 100644 services/self-service/src/main/resources/webapp/.angular-cli.json
 create mode 100644 services/self-service/src/main/resources/webapp/angular.json
 create mode 100644 services/self-service/src/main/resources/webapp/package-lock.json
 rename services/self-service/src/main/resources/webapp/src/app/core/{util/collections/dictionary => collections}/dictionary.ts (89%)
 copy services/self-service/src/main/resources/webapp/src/{environments/environment.prod.ts => app/core/collections/index.ts} (94%)
 create mode 100644 services/self-service/src/main/resources/webapp/src/app/core/interceptors/error.interceptor.ts
 copy services/self-service/src/main/resources/webapp/src/app/core/{services/appRouting.service.ts => interceptors/http.token.interceptor.ts} (51%)
 copy services/self-service/src/main/resources/webapp/src/app/core/{services/appRouting.service.ts => interceptors/nocache.interceptor.ts} (59%)
 copy services/self-service/src/main/resources/webapp/src/app/core/services/{appRouting.service.ts => storage.service.ts} (52%)
 delete mode 100644 services/self-service/src/main/resources/webapp/src/app/core/util/collections/dictionary/idictionary.ts
 delete mode 100644 services/self-service/src/main/resources/webapp/src/app/health-status/environment-status.model.ts
 delete mode 100644 services/self-service/src/main/resources/webapp/src/app/health-status/health-status-grid/health-status-grid.component.html
 delete mode 100644 services/self-service/src/main/resources/webapp/src/app/health-status/health-status-grid/health-status-grid.component.ts
 delete mode 100644 services/self-service/src/main/resources/webapp/src/app/health-status/health-status.component.html
 delete mode 100644 services/self-service/src/main/resources/webapp/src/app/health-status/health-status.component.scss
 delete mode 100644 services/self-service/src/main/resources/webapp/src/app/health-status/health-status.component.ts
 delete mode 100644 services/self-service/src/main/resources/webapp/src/app/health-status/health-status.module.ts
 rename services/self-service/src/main/resources/webapp/src/app/{health-status => management}/backup-dilog/backup-dilog.component.html (100%)
 rename services/self-service/src/main/resources/webapp/src/app/{health-status => management}/backup-dilog/backup-dilog.component.scss (100%)
 rename services/self-service/src/main/resources/webapp/src/app/{health-status => management}/backup-dilog/backup-dilog.component.ts (97%)
 rename services/self-service/src/main/resources/webapp/src/app/{health-status => management}/manage-environment/manage-environment-dilog.component.html (100%)
 rename services/self-service/src/main/resources/webapp/src/app/{health-status => management}/manage-environment/manage-environment-dilog.component.scss (100%)
 rename services/self-service/src/main/resources/webapp/src/app/{health-status => management}/manage-environment/manage-environment-dilog.component.ts (92%)
 rename services/self-service/src/main/resources/webapp/src/app/{health-status => management}/manage-roles-groups/group-name-validarion.directive.ts (99%)
 rename services/self-service/src/main/resources/webapp/src/app/{health-status => management}/manage-roles-groups/manage-roles-groups.component.html (100%)
 rename services/self-service/src/main/resources/webapp/src/app/{health-status => management}/manage-roles-groups/manage-roles-groups.component.scss (98%)
 rename services/self-service/src/main/resources/webapp/src/app/{health-status => management}/manage-roles-groups/manage-roles-groups.component.ts (94%)
 rename services/self-service/src/main/resources/webapp/src/app/{health-status => management}/ssn-monitor/ssn-monitor.component.html (100%)
 rename services/self-service/src/main/resources/webapp/src/app/{health-status => management}/ssn-monitor/ssn-monitor.component.scss (100%)
 rename services/self-service/src/main/resources/webapp/src/app/{health-status => management}/ssn-monitor/ssn-monitor.component.ts (100%)
 copy services/self-service/src/main/resources/webapp/src/app/{core/util/fileUtils.ts => resources/scheduler/scheduler.calculations.ts} (54%)
 copy services/self-service/src/main/resources/webapp/src/app/{login/login.module.ts => webterminal/index.ts} (74%)
 copy services/self-service/src/main/resources/webapp/src/app/{app.component.html => webterminal/webterminal.component.html} (92%)
 rename services/self-service/src/main/resources/webapp/src/app/{health-status/health-status-grid/health-status-grid.component.scss => webterminal/webterminal.component.scss} (81%)
 create mode 100644 services/self-service/src/main/resources/webapp/src/app/webterminal/webterminal.component.ts
 delete mode 100644 services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/InactivityServiceImplTest.java


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org


[incubator-dlab] 04/12: [DLAB-4]: redirect to terminal with new tab by notebook ip

Posted by bh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bhliva pushed a commit to branch v2.1.1
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git

commit ad18801246d64cb7cbccf029a91f8f7b9bf36f71
Author: Andriana Kovalyshyn <an...@epam.com>
AuthorDate: Tue May 7 17:13:02 2019 +0300

    [DLAB-4]: redirect to terminal with new tab by notebook ip
---
 .../detail-dialog/detail-dialog.component.html     | 168 +++++++++++----------
 .../resources/exploratory/detail-dialog/index.ts   |   3 +-
 2 files changed, 92 insertions(+), 79 deletions(-)

diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.html b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.html
index 1b2ac38..8e9373e 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.html
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.html
@@ -18,100 +18,112 @@
   -->
 
 <modal-dialog #bindDialog modalClass="detail-dialog modal-lg header-white">
-    <modal-header></modal-header>
-    <modal-content>
-        <div *ngIf="notebook">
-            <table class="detail-header">
-                <tr>
-                    <td>{{notebook.template_name}}</td>
-                    <td>
-                        <span class="status" ngClass="{{notebook.status || ''}}">
+  <modal-header></modal-header>
+  <modal-content>
+    <div *ngIf="notebook">
+      <table class="detail-header">
+        <tr>
+          <td>{{notebook.template_name}}</td>
+          <td>
+            <span class="status" ngClass="{{notebook.status || ''}}">
               {{notebook.status}}
             </span>
-                    </td>
-                    <td>{{notebook.shape}}</td>
-                </tr>
-            </table>
-            <div class="content-box">
-                <div class="detail-info" *ngIf="notebook.error_message">
-                    <p class="failed">{{ notebook.error_message }}</p>
-                </div>
+          </td>
+          <td>{{notebook.shape}}</td>
+        </tr>
+      </table>
+      <div class="content-box">
+        <div class="detail-info" *ngIf="notebook.error_message">
+          <p class="failed">{{ notebook.error_message }}</p>
+        </div>
 
-                <div class="scroll-box" id="scrolling">
-                    <div class="detail-info" *ngIf="!notebook.error_message">
-                        <p>Edge Node IP Address {{notebook.ip}}</p>
-                        <p *ngIf="notebook.status === 'running'">Up time {{upTimeInHours}} hour(s) since {{upTimeSince || "not specified."}}</p>
-                        <p>Open following URL(s) in your browser to access this box:</p>
-                        <div class="links_block">
-                            <p *ngFor="let item of notebook.url">
-                                <strong class="description">{{item.description}}: &#32;</strong>
-                                <a class="ellipsis" href="{{item.url}}" target="_blank">&#32;{{item.url}}</a>
-                            </p>
-                        </div>
-                        <p *ngIf="notebook.username">Node User: &#32;<strong>{{ notebook.username }}</strong></p>
-                        <p *ngIf="notebook.password">Password: &#32;<strong>{{ notebook.password }}</strong></p>
+        <div class="scroll-box" id="scrolling">
+          <div class="detail-info" *ngIf="!notebook.error_message">
+            <p>Edge Node IP Address {{notebook.ip}}</p>
+            <p *ngIf="notebook.status === 'running'">Up time {{upTimeInHours}} hour(s) since
+              {{upTimeSince || "not specified."}}</p>
+            <p>Open following URL(s) in your browser to access this box:</p>
+            <div class="links_block">
+              <p *ngFor="let item of notebook.url">
+                <strong class="description">{{item.description}}: &#32;</strong>
+                <a class="ellipsis" href="{{item.url}}" target="_blank">&#32;{{item.url}}</a>
+              </p>
+            </div>
+            <p *ngIf="notebook.username">Node User: &#32;<strong>{{ notebook.username }}</strong></p>
+            <p *ngIf="notebook.password">Password: &#32;<strong>{{ notebook.password }}</strong></p>
 
-                        <p class="m-top-30">{{ DICTIONARY.personal_storage }}: &#32;</p>
-                        <div class="links_block">
-                            <p *ngIf="DICTIONARY.cloud_provider === 'azure' && notebook.account_name">{{ DICTIONARY.account }}
-                                <strong>{{ notebook.account_name}}</strong></p>
-                            <p *ngIf="notebook.bucket_name">{{ DICTIONARY.container }} <strong>{{ notebook.bucket_name }}</strong></p>
-                        </div>
-                        <p>{{ DICTIONARY.collaboration_storage }}: &#32;</p>
-                        <div class="links_block">
-                            <p *ngIf="DICTIONARY.cloud_provider === 'azure' && notebook.shared_account_name">{{ DICTIONARY.account }}
-                                <strong>{{ notebook.shared_account_name}}</strong></p>
-                            <p *ngIf="notebook.shared_bucket_name">{{ DICTIONARY.container }}
-                                <strong>{{ notebook.shared_bucket_name }}</strong></p>
-                        </div>
-                        <br />
+            <p class="m-top-30">{{ DICTIONARY.personal_storage }}: &#32;</p>
+            <div class="links_block">
+              <p *ngIf="DICTIONARY.cloud_provider === 'azure' && notebook.account_name">{{ DICTIONARY.account }}
+                <strong>{{ notebook.account_name}}</strong></p>
+              <p *ngIf="notebook.bucket_name">{{ DICTIONARY.container }} <strong>{{ notebook.bucket_name }}</strong></p>
+            </div>
+            <p>{{ DICTIONARY.collaboration_storage }}: &#32;</p>
+            <div class="links_block">
+              <p *ngIf="DICTIONARY.cloud_provider === 'azure' && notebook.shared_account_name">{{ DICTIONARY.account }}
+                <strong>{{ notebook.shared_account_name}}</strong></p>
+              <p *ngIf="notebook.shared_bucket_name">{{ DICTIONARY.container }}
+                <strong>{{ notebook.shared_bucket_name }}</strong></p>
+            </div>
+            <br />
 
-                        <div *ngIf="DICTIONARY.cloud_provider === 'azure' && notebook.datalake_name">
-                            <p>Data Lake Store: &#32;</p>
-                            <div class="links_block">
-                                <p>Data Lake Store Account: &#32;<strong>{{ notebook.datalake_name }}</strong></p>
-                                <p>Personal folder: &#32;<strong>{{ notebook.datalake_directory }}</strong></p>
-                                <p>Collaboration folder: &#32;<strong>{{ notebook.datalake_shared_directory }}</strong></p>
-                            </div>
-                        </div>
+            <div *ngIf="DICTIONARY.cloud_provider === 'azure' && notebook.datalake_name">
+              <p>Data Lake Store: &#32;</p>
+              <div class="links_block">
+                <p>Data Lake Store Account: &#32;<strong>{{ notebook.datalake_name }}</strong></p>
+                <p>Personal folder: &#32;<strong>{{ notebook.datalake_directory }}</strong></p>
+                <p>Collaboration folder: &#32;<strong>{{ notebook.datalake_shared_directory }}</strong></p>
+              </div>
+            </div>
 
-                        <p>
-                            <a href="#/help/accessnotebookguide" target="_blank">
-                                <small class="helper_instruction">
+            <p>
+              <a href="#/help/accessnotebookguide" target="_blank">
+                <small class="helper_instruction">
                   <i class="material-icons">help_outline</i>
                   Read instruction how to create the tunnel</small>
-                            </a>
-                        </p>
-                    </div>
+              </a>
+            </p>
+          </div>
 
-                    <div class="checkbox-group" *ngIf="notebook.image !== 'docker.dlab-zeppelin'; else not_support" [hidden]="notebook.status !== 'running'">
-                        <label>
+          <div class="checkbox-group" *ngIf="notebook.image !== 'docker.dlab-zeppelin'; else not_support"
+            [hidden]="notebook.status !== 'running'">
+            <label>
               <input #configurationNode type="checkbox" (change)="selectConfiguration()" /> Cluster configurations
             </label>
-                        <div class="checkbox-group">
-                            <form [formGroup]="configurationForm" novalidate>
-                                <div class="config-details" *ngIf="configuration?.nativeElement['checked'] || false">
-                                    <textarea formControlName="configuration_parameters" id="config" placeholder="Cluster configuration template, JSON" data-gramm_editor="false"></textarea>
-                                    <span class="danger_color" *ngIf="!configurationForm.controls.configuration_parameters.valid && configurationForm.controls['configuration_parameters'].dirty">Configuration
+            <div class="checkbox-group">
+              <form [formGroup]="configurationForm" novalidate>
+                <div class="config-details" *ngIf="configuration?.nativeElement['checked'] || false">
+                  <textarea formControlName="configuration_parameters" id="config"
+                    placeholder="Cluster configuration template, JSON" data-gramm_editor="false"></textarea>
+                  <span class="danger_color"
+                    *ngIf="!configurationForm.controls.configuration_parameters.valid && configurationForm.controls['configuration_parameters'].dirty">Configuration
                     parameters is not in a valid format</span>
-                                </div>
-                            </form>
-                        </div>
-                    </div>
-                    <ng-template #not_support>
-                        <small [hidden]="notebook.status !== 'running'">Spark default configuration for Apache Zeppelin can not be
+                </div>
+              </form>
+            </div>
+          </div>
+          <ng-template #not_support>
+            <small [hidden]="notebook.status !== 'running'">Spark default configuration for Apache Zeppelin can not be
               changed from DLab UI. Currently it can be done directly through Apache Zeppelin interpreter menu.
               For more details please refer for Apache Zeppelin <a
                 href="https://zeppelin.apache.org/docs/0.8.0/usage/interpreter/overview.html" target="_blank">official
                 documentation</a>.
             </small>
-                    </ng-template>
-                    <div [scrollTo]="configuration?.nativeElement['checked'] || false" class="text-center m-top-20 m-bott-10" *ngIf="(configuration?.nativeElement['checked'] || false) && notebook.status === 'running'">
-                        <button mat-raised-button type="button" (click)="bindDialog.close()" class="butt action">Cancel</button>
-                        <button mat-raised-button type="submit" [disabled]="!configurationForm.valid" class="butt butt-success action" [ngClass]="{'not-allowed': !configurationForm.valid}" (click)="editClusterConfiguration(configurationForm.value)">Update</button>
-                    </div>
-                </div>
-            </div>
+          </ng-template>
+          <div [scrollTo]="configuration?.nativeElement['checked'] || false" class="text-center m-top-20 m-bott-10"
+            *ngIf="(configuration?.nativeElement['checked'] || false) && notebook.status === 'running'">
+            <button mat-raised-button type="button" (click)="bindDialog.close()" class="butt action">Cancel</button>
+            <button mat-raised-button type="submit" [disabled]="!configurationForm.valid"
+              class="butt butt-success action" [ngClass]="{'not-allowed': !configurationForm.valid}"
+              (click)="editClusterConfiguration(configurationForm.value)">Update</button>
+          </div>
+        </div>
+
+        <div>
+          <label>Terminal: </label>
+          <a target="_blank" [routerLink]="['/terminal',  notebook.ip]" mat-raised-button type="button" class="butt action">Open terminal</a>
         </div>
-    </modal-content>
+      </div>
+    </div>
+  </modal-content>
 </modal-dialog>
\ No newline at end of file
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/index.ts b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/index.ts
index 12fecee..0a7bcac 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/index.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/index.ts
@@ -20,7 +20,7 @@
 import { NgModule } from '@angular/core';
 import { CommonModule } from '@angular/common';
 import { FormsModule, ReactiveFormsModule } from '@angular/forms';
-
+import { RouterModule } from '@angular/router';
 import { ModalModule } from '../../../shared';
 import { MaterialModule } from '../../../shared/material.module';
 import { DetailDialogComponent } from './detail-dialog.component';
@@ -34,6 +34,7 @@ export * from './detail-dialog.component';
     ModalModule,
     FormsModule,
     ReactiveFormsModule,
+    RouterModule,
     MaterialModule,
     DirectivesModule
   ],


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org


[incubator-dlab] 12/12: [DLAB-583]: added meta data fixes

Posted by bh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bhliva pushed a commit to branch v2.1.1
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git

commit fbeb3338b548b040dfce11fb4f4aa8eda02de8e1
Author: Andriana Kovalyshyn <an...@epam.com>
AuthorDate: Fri Apr 26 15:15:32 2019 +0300

    [DLAB-583]: added meta data fixes
---
 .../src/app/shared/navbar/navbar.component.html    | 23 ++++++++++++++++++----
 .../src/app/shared/navbar/navbar.component.scss    | 13 +++++++++---
 2 files changed, 29 insertions(+), 7 deletions(-)

diff --git a/services/self-service/src/main/resources/webapp/src/app/shared/navbar/navbar.component.html b/services/self-service/src/main/resources/webapp/src/app/shared/navbar/navbar.component.html
index d13c23e..914edbc 100644
--- a/services/self-service/src/main/resources/webapp/src/app/shared/navbar/navbar.component.html
+++ b/services/self-service/src/main/resources/webapp/src/app/shared/navbar/navbar.component.html
@@ -42,13 +42,28 @@
     <a *ngIf="healthStatus.status" [routerLink]="['/environment_management']" class="statusbar">
       <span class="material-icons" ngClass="{{healthStatus.status || ''}}">radio_button_checked</span>
     </a>
-    <a *ngIf="metadata" class="statusbar" #info (click)="actions.toggle($event, info)">
-      <span class="material-icons meta">share</span>
+    <!-- *ngIf="metadata" -->
+    <a  class="statusbar" #info (click)="actions.toggle($event, info)">
+      <span class="material-icons meta">info</span>
     </a>
     <bubble-up #actions class="list-menu" position="bottom-right">
       <div class="app-info">
-          <p><strong>Version: </strong> {{ metadata?.version }}</p>
-          <p><strong>Branch: </strong> {{ metadata?.branch }}</p>
+          <p>
+            <strong>Version: </strong>
+            <span class="ellipsis">{{ metadata?.version }}</span>
+          </p>
+          <p>
+            <strong>Branch: </strong>
+            <span class="ellipsis">{{ metadata?.branch }}</span>
+          </p>
+          <p>
+            <strong>Revision: </strong>
+            <span class="ellipsis">{{ metadata?.commmit }}</span>
+          </p>
+          <p>
+            <strong>Release notes: </strong>
+            <span class="ellipsis">{{ metadata?.release_notes }}</span>
+          </p>
       </div>
     </bubble-up>
     <button class="btn btn-logout" (click)="logout_btnClick()">Log out <span class="user-name">{{currentUserName}}</span></button>
diff --git a/services/self-service/src/main/resources/webapp/src/app/shared/navbar/navbar.component.scss b/services/self-service/src/main/resources/webapp/src/app/shared/navbar/navbar.component.scss
index e79d196..cc52dc6 100644
--- a/services/self-service/src/main/resources/webapp/src/app/shared/navbar/navbar.component.scss
+++ b/services/self-service/src/main/resources/webapp/src/app/shared/navbar/navbar.component.scss
@@ -45,7 +45,7 @@
 
     .statusbar {
       display: flex;
-      width: 60px;
+      width: 50px;
       height: 46px;
       text-decoration: none;
       justify-content: center;
@@ -70,9 +70,9 @@
         }
       }
       .meta {
-        color: #fff;
+        color: #c7d4d6;
         &:hover {
-          color: #c7d4d6;
+          color: #fff;
         }
       }
     }
@@ -100,6 +100,13 @@
       color: #455c74;
       font-size: 16px;
       font-weight: 600;
+      width: 120px;
+      display: inline-block;
+    }
+    span {
+      width: 180px;
+      display: inline-block;
+      vertical-align: bottom;
     }
   }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org


[incubator-dlab] 10/12: DLAB-2 disabled gzip handler for guacamole servlet

Posted by bh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bhliva pushed a commit to branch v2.1.1
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git

commit 4e70035fc481446185d8dc959884c5b16005805a
Author: bhliva <bo...@epam.com>
AuthorDate: Tue May 7 13:47:24 2019 +0300

    DLAB-2 disabled gzip handler for guacamole servlet
---
 .../dlab/backendapi/resources/base/KeyResource.java   |  4 +---
 services/self-service/self-service.yml                |  2 --
 .../epam/dlab/backendapi/SelfServiceApplication.java  | 19 ++++++++++++++++++-
 3 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/base/KeyResource.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/base/KeyResource.java
index fcacef0..bbff7b9 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/base/KeyResource.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/base/KeyResource.java
@@ -46,13 +46,11 @@ public class KeyResource {
 
 	private final KeyService keyService;
 	private final ProvisioningServiceApplicationConfiguration configuration;
-	private final String keyContent;
 
 	@Inject
 	public KeyResource(KeyService keyService, ProvisioningServiceApplicationConfiguration configuration) {
 		this.keyService = keyService;
 		this.configuration = configuration;
-		this.keyContent = keyService.getAdminKey();
 	}
 
 
@@ -69,7 +67,7 @@ public class KeyResource {
 
 	@GET
 	public String getAdminKey(@Auth UserInfo userInfo) {
-		return keyContent;
+		return keyService.getAdminKey();
 	}
 
 	private void replaceKeyfile(ReuploadKeyDTO dto) throws IOException {
diff --git a/services/self-service/self-service.yml b/services/self-service/self-service.yml
index 8ae3c02..6e25287 100644
--- a/services/self-service/self-service.yml
+++ b/services/self-service/self-service.yml
@@ -67,8 +67,6 @@ maxSessionDurabilityMilliseconds: 288000000
 </#if>
 
 server:
-  gzip:
-    enabled: false
   requestLog:
     appenders:
     - type: file
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/SelfServiceApplication.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/SelfServiceApplication.java
index 1a8f59b..979464f 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/SelfServiceApplication.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/SelfServiceApplication.java
@@ -48,11 +48,15 @@ import io.dropwizard.Application;
 import io.dropwizard.assets.AssetsBundle;
 import io.dropwizard.forms.MultiPartBundle;
 import io.dropwizard.jersey.setup.JerseyEnvironment;
+import io.dropwizard.jetty.BiDiGzipHandler;
 import io.dropwizard.setup.Bootstrap;
 import io.dropwizard.setup.Environment;
 import io.federecio.dropwizard.swagger.SwaggerBundle;
 import io.federecio.dropwizard.swagger.SwaggerBundleConfiguration;
 import lombok.extern.slf4j.Slf4j;
+import org.eclipse.jetty.server.Handler;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.handler.HandlerWrapper;
 
 import javax.servlet.DispatcherType;
 import java.util.EnumSet;
@@ -62,6 +66,7 @@ import java.util.EnumSet;
  */
 @Slf4j
 public class SelfServiceApplication extends Application<SelfServiceApplicationConfiguration> {
+	private static final String GUACAMOLE_SERVLET_PATH = "/api/tunnel";
 	private static Injector appInjector;
 
 	public static Injector getInjector() {
@@ -110,6 +115,7 @@ public class SelfServiceApplication extends Application<SelfServiceApplicationCo
 				new RestoreHandlerStartupListener(injector.getInstance(Key.get(RESTService.class,
 						Names.named(ServiceConsts.PROVISIONING_SERVICE_NAME))));
 		environment.lifecycle().addServerLifecycleListener(restoreHandlerStartupListener);
+		environment.lifecycle().addServerLifecycleListener(this::disableGzipHandlerForGuacamoleServlet);
 		environment.lifecycle().manage(injector.getInstance(IndexCreator.class));
 		environment.lifecycle().manage(injector.getInstance(EnvStatusListener.class));
 		environment.lifecycle().manage(injector.getInstance(ExploratoryLibCache.class));
@@ -120,7 +126,7 @@ public class SelfServiceApplication extends Application<SelfServiceApplicationCo
 
 		final String guacamoleServletName = "GuacamoleServlet";
 		environment.servlets().addServlet(guacamoleServletName, injector.getInstance(GuacamoleServlet.class))
-				.addMapping("/api/tunnel");
+				.addMapping(GUACAMOLE_SERVLET_PATH);
 		environment.servlets().addFilter("GuacamoleSecurityFilter",
 				injector.getInstance(GuacamoleSecurityFilter.class))
 				.addMappingForServletNames(EnumSet.allOf(DispatcherType.class), true, guacamoleServletName);
@@ -169,6 +175,17 @@ public class SelfServiceApplication extends Application<SelfServiceApplicationCo
 		jersey.register(injector.getInstance(ApplicationSettingResource.class));
 	}
 
+	private void disableGzipHandlerForGuacamoleServlet(Server server) {
+		Handler handler = server.getHandler();
+		while (handler instanceof HandlerWrapper) {
+			handler = ((HandlerWrapper) handler).getHandler();
+			if (handler instanceof BiDiGzipHandler) {
+				log.debug("Disabling Gzip handler for guacamole servlet");
+				((BiDiGzipHandler) handler).setExcludedPaths(GUACAMOLE_SERVLET_PATH);
+			}
+		}
+	}
+
 	private void applyMongoMigration(SelfServiceApplicationConfiguration configuration) {
 		final MongoServiceFactory mongoFactory = configuration.getMongoFactory();
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org


[incubator-dlab] 01/12: DLAB-000 fixed merge conflicts

Posted by bh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bhliva pushed a commit to branch v2.1.1
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git

commit 0fb6b6bf0ae976e22d4bb8807421f1ed89c2cef4
Merge: d052709 7f6f1a0
Author: bhliva <bo...@epam.com>
AuthorDate: Thu Jul 25 12:53:19 2019 +0300

    DLAB-000 fixed merge conflicts

 README.md                                          |   180 +-
 USER_GUIDE.md                                      |     2 +-
 infrastructure-provisioning/scripts/deploy_dlab.py |     1 +
 infrastructure-provisioning/scripts/deploy_ldap.sh |    26 +-
 infrastructure-provisioning/src/base/entrypoint.py |     4 +
 .../src/base/scripts/install_prerequisites.py      |     7 +-
 .../src/dataengine/scripts/configure_dataengine.py |     8 +-
 .../src/deeplearning/fabfile.py                    |    16 +
 .../scripts/configure_deep_learning_node.py        |     7 +-
 .../edge/scripts/configure_nginx_reverse_proxy.py  |     3 +-
 .../{emr.conf => dataengine-service.conf}          |     0
 .../src/edge/templates/nginx.conf                  |     8 +-
 .../check_inactivity.py}                           |    65 +-
 .../src/general/conf/dlab.ini                      |     2 +
 .../files/aws/dataengine-service_Dockerfile        |     3 +
 .../src/general/files/aws/dataengine_Dockerfile    |     1 +
 .../src/general/files/aws/deeplearning_Dockerfile  |     3 +
 .../src/general/files/aws/jupyter_Dockerfile       |     3 +
 .../src/general/files/aws/rstudio_Dockerfile       |     3 +
 .../src/general/files/aws/ssn_Dockerfile           |     2 +-
 .../src/general/files/aws/ssn_policy.json          |     3 +-
 .../general/files/aws/tensor-rstudio_Dockerfile    |     3 +
 .../src/general/files/aws/tensor_Dockerfile        |     3 +
 .../src/general/files/aws/tensor_description.json  |     2 +-
 .../src/general/files/aws/zeppelin_Dockerfile      |     3 +
 .../src/general/files/azure/base_Dockerfile        |     1 +
 .../src/general/files/azure/dataengine_Dockerfile  |     1 +
 .../general/files/azure/deeplearning_Dockerfile    |     3 +
 .../src/general/files/azure/jupyter_Dockerfile     |     4 +
 .../src/general/files/azure/rstudio_Dockerfile     |     3 +
 .../src/general/files/azure/ssn_Dockerfile         |     1 +
 .../src/general/files/azure/tensor_Dockerfile      |     3 +
 .../src/general/files/azure/zeppelin_Dockerfile    |     3 +
 .../src/general/files/gcp/base_Dockerfile          |     1 +
 .../files/gcp/dataengine-service_Dockerfile        |     5 +-
 .../files/gcp/dataengine-service_description.json  |     5 +-
 .../src/general/files/gcp/dataengine_Dockerfile    |     3 +-
 .../general/files/gcp/dataengine_description.json  |     1 -
 .../src/general/files/gcp/deeplearning_Dockerfile  |     3 +
 .../src/general/files/gcp/jupyter_Dockerfile       |     3 +
 .../src/general/files/gcp/jupyter_description.json |     1 -
 .../src/general/files/gcp/rstudio_Dockerfile       |     3 +
 .../src/general/files/gcp/rstudio_description.json |     1 -
 .../src/general/files/gcp/ssn_Dockerfile           |     1 +
 .../src/general/files/gcp/ssn_policy.json          |     7 +-
 .../src/general/files/gcp/ssn_roles.json           |     3 +-
 .../files/{aws => gcp}/tensor-rstudio_Dockerfile   |     5 +-
 ...iption.json => tensor-rstudio_description.json} |     6 +-
 .../src/general/files/gcp/tensor_Dockerfile        |     3 +
 .../src/general/files/gcp/tensor_description.json  |     6 +-
 .../src/general/files/gcp/zeppelin_Dockerfile      |     3 +
 .../general/files/gcp/zeppelin_description.json    |     1 -
 .../src/general/lib/aws/actions_lib.py             |   409 +-
 .../src/general/lib/aws/meta_lib.py                |     5 +-
 .../src/general/lib/azure/actions_lib.py           |    45 +-
 .../src/general/lib/gcp/actions_lib.py             |   124 +-
 .../src/general/lib/gcp/meta_lib.py                |    80 +-
 .../src/general/lib/os/debian/common_lib.py        |    15 +
 .../src/general/lib/os/debian/notebook_lib.py      |    39 -
 .../src/general/lib/os/fab.py                      |    25 +
 .../src/general/lib/os/redhat/common_lib.py        |    19 +-
 .../src/general/lib/os/redhat/notebook_lib.py      |    46 -
 .../general/scripts/aws/common_create_bucket.py    |     3 +-
 .../scripts/aws/common_create_role_policy.py       |     5 +-
 .../general/scripts/aws/common_create_subnet.py    |    11 +-
 .../aws/common_notebook_configure_dataengine.py    |     6 +-
 .../general/scripts/aws/common_start_notebook.py   |    14 +
 .../scripts/aws/dataengine-service_configure.py    |     9 +-
 .../general/scripts/aws/dataengine_configure.py    |    11 +-
 .../src/general/scripts/aws/dataengine_start.py    |    52 +-
 .../general/scripts/aws/deeplearning_configure.py  |    20 +-
 .../scripts/aws/edge_associate_elastic_ip.py       |     7 +-
 .../src/general/scripts/aws/edge_configure.py      |     2 +-
 .../src/general/scripts/aws/edge_prepare.py        |    87 +-
 .../src/general/scripts/aws/jupyter_configure.py   |    30 +-
 .../jupyter_dataengine-service_create_configs.py   |     2 +
 .../src/general/scripts/aws/rstudio_configure.py   |    18 +-
 .../scripts/aws/ssn_associate_elastic_ip.py        |     7 +-
 .../src/general/scripts/aws/ssn_configure.py       |    60 +-
 .../src/general/scripts/aws/ssn_create_vpc.py      |     5 +
 .../src/general/scripts/aws/ssn_prepare.py         |   112 +-
 .../scripts/aws/tensor-rstudio_configure.py        |    22 +-
 .../src/general/scripts/aws/tensor_configure.py    |    18 +-
 .../src/general/scripts/aws/zeppelin_configure.py  |    28 +-
 .../azure/common_notebook_configure_dataengine.py  |     5 +-
 .../general/scripts/azure/common_start_notebook.py |    14 +
 .../general/scripts/azure/dataengine_configure.py  |    90 +-
 .../src/general/scripts/azure/dataengine_start.py  |    20 +
 .../scripts/azure/deeplearning_configure.py        |   106 +-
 .../src/general/scripts/azure/edge_configure.py    |    67 +-
 .../src/general/scripts/azure/edge_prepare.py      |    35 +-
 .../src/general/scripts/azure/jupyter_configure.py |    79 +-
 .../src/general/scripts/azure/rstudio_configure.py |    78 +-
 .../src/general/scripts/azure/ssn_configure.py     |     2 +
 .../src/general/scripts/azure/tensor_configure.py  |    83 +-
 .../general/scripts/azure/zeppelin_configure.py    |    91 +-
 .../general/scripts/gcp/common_create_instance.py  |     7 +-
 .../gcp/common_notebook_configure_dataengine.py    |     6 +-
 .../general/scripts/gcp/common_prepare_notebook.py |    38 +-
 .../general/scripts/gcp/common_start_notebook.py   |    14 +
 .../general/scripts/gcp/common_stop_notebook.py    |    17 +-
 .../scripts/gcp/common_terminate_notebook.py       |    14 +-
 .../scripts/gcp/dataengine-service_configure.py    |    79 +-
 .../scripts/gcp/dataengine-service_jars_parser.py  |    14 +-
 .../general/scripts/gcp/dataengine_configure.py    |    71 +-
 .../src/general/scripts/gcp/dataengine_prepare.py  |     2 +-
 .../src/general/scripts/gcp/dataengine_start.py    |    22 +
 .../general/scripts/gcp/deeplearning_configure.py  |    83 +-
 .../src/general/scripts/gcp/edge_configure.py      |    43 +-
 .../src/general/scripts/gcp/edge_prepare.py        |     8 +-
 .../src/general/scripts/gcp/jupyter_configure.py   |    83 +-
 .../src/general/scripts/gcp/rstudio_configure.py   |    95 +-
 .../src/general/scripts/gcp/ssn_configure.py       |     3 +
 .../src/general/scripts/gcp/ssn_prepare.py         |     6 +-
 .../scripts/gcp/ssn_terminate_gcp_resources.py     |    10 +
 ...io_configure.py => tensor-rstudio_configure.py} |   123 +-
 .../src/general/scripts/gcp/tensor_configure.py    |    92 +-
 .../src/general/scripts/gcp/zeppelin_configure.py  |    93 +-
 .../check_inactivity.py}                           |    56 +-
 .../general/scripts/os/common_clean_instance.py    |     4 +
 .../scripts/os/common_configure_reverse_proxy.py   |     8 +-
 .../general/scripts/os/common_configure_spark.py   |    20 +-
 .../os/deeplearning_install_dataengine_kernels.py  |     5 +
 .../os/jupyter_install_dataengine_kernels.py       |     5 +
 .../scripts/os/notebook_inactivity_check.py        |    73 +
 .../os/rstudio_install_dataengine_kernels.py       |     5 +
 .../tensor-rstudio_install_dataengine_kernels.py   |     5 +
 .../os/tensor_install_dataengine_kernels.py        |     5 +
 .../update_inactivity_on_start.py}                 |    40 +-
 .../os/zeppelin_install_dataengine_kernels.py      |     5 +
 .../gcp/jenkins_jobs/create_data_engine/config.xml |     4 +-
 .../create_dataengine-service/config.xml           |     5 +-
 .../jenkins_jobs/create_notebook_server/config.xml |     2 +-
 .../jenkins_jobs/start_notebook_server/config.xml  |     1 +
 .../jenkins_jobs/stop_notebook_server/config.xml   |     1 +
 .../terminate_notebook_server/config.xml           |     1 +
 .../os/inactive.service}                           |    19 +-
 .../src/general/templates/os/inactive.sh           |    49 +
 .../os/inactive.timer}                             |    21 +-
 .../src/general/templates/os/inactive_rs.sh        |    48 +
 infrastructure-provisioning/src/jupyter/fabfile.py |    16 +
 .../src/jupyter/scripts/configure_jupyter_node.py  |     5 +
 infrastructure-provisioning/src/rstudio/fabfile.py |    16 +
 .../src/rstudio/scripts/configure_rstudio_node.py  |     7 +-
 .../src/ssn/files/gcp/mongo_roles.json             |    32 +-
 .../src/ssn/scripts/configure_docker.py            |    44 +
 .../src/ssn/scripts/configure_ssn_node.py          |    14 +-
 .../src/ssn/templates/docker_build.py              |    73 +
 .../src/tensor-rstudio/fabfile.py                  |    16 +
 .../scripts/configure_tensor-rstudio_node.py       |     5 +
 infrastructure-provisioning/src/tensor/fabfile.py  |    16 +
 .../src/tensor/scripts/configure_tensor_node.py    |     5 +
 .../src/zeppelin/fabfile.py                        |    16 +
 .../zeppelin/scripts/configure_zeppelin_node.py    |     5 +
 .../deeplearning/deeplearning-notebook.json        |     4 +-
 .../azure_templates/jupyter/jupyter-notebook.json  |     4 +-
 .../azure_templates/rstudio/rstudio-notebook.json  |     4 +-
 .../examples/ec2_templates/deeplearning/EMR.json   |     2 +-
 .../ec2_templates/deeplearning/EMR_spot.json       |     2 +-
 .../deeplearning/deeplearning-notebook.json        |     4 +-
 .../examples/ec2_templates/jupyter/EMR.json        |     2 +-
 .../examples/ec2_templates/jupyter/EMR_spot.json   |     2 +-
 .../ec2_templates/jupyter/jupyter-notebook.json    |     4 +-
 .../examples/ec2_templates/rstudio/EMR.json        |     2 +-
 .../examples/ec2_templates/rstudio/EMR_spot.json   |     2 +-
 .../ec2_templates/rstudio/rstudio-notebook.json    |     4 +-
 .../examples/ec2_templates/tensor/EMR.json         |     2 +-
 .../examples/ec2_templates/tensor/EMR_spot.json    |     2 +-
 .../examples/ec2_templates/zeppelin/EMR.json       |     2 +-
 .../examples/ec2_templates/zeppelin/EMR_spot.json  |     2 +-
 .../gcp_templates/deeplearning/dataproc.json       |     6 +-
 .../examples/gcp_templates/jupyter/dataproc.json   |     6 +-
 .../examples/gcp_templates/rstudio/dataproc.json   |     6 +-
 .../examples/gcp_templates/tensor/dataproc.json    |     6 +-
 .../examples/gcp_templates/zeppelin/dataproc.json  |     6 +-
 .../epam/dlab/automation/test/TestServices.java    |     4 +-
 pom.xml                                            |    12 +-
 .../com/epam/dlab/mongo/DlabResourceTypeDAO.java   |     7 +-
 .../dlab/core/parser/ParserStatisticsTest.java     |    64 -
 .../epam/dlab/auth/conf/GcpLoginConfiguration.java |     2 +-
 services/dlab-auth-common/pom.xml                  |    56 -
 .../epam/dlab/dto/InfrastructureMetaInfoDTO.java}  |    17 +-
 .../java/com/epam/dlab/dto/SchedulerJobDTO.java    |     7 +
 .../SparkComputationalCreateAzure.java             |     8 -
 .../exploratory/ExploratoryActionStartAzure.java   |    76 +-
 .../azure/exploratory/ExploratoryCreateAzure.java  |    16 -
 .../com/epam/dlab/dto/base/DataEngineType.java     |    54 +-
 .../computational/CheckInactivityStatusDTO.java    |    30 +-
 ...O.java => ComputationalCheckInactivityDTO.java} |    45 +-
 .../ExploratoryCheckInactivityAction.java}         |     7 +-
 .../dlab/dto/exploratory/ExploratoryStatusDTO.java |    12 +
 .../ComputationalResourceShapeDto.java             |   198 +-
 services/dlab-process/pom.xml                      |    60 -
 .../com/epam/dlab/process/ProcessConveyorTest.java |   225 -
 services/dlab-rest-client/pom.xml                  |    42 -
 .../java/com/epam/dlab/util/AnnotationUtils.java   |    61 -
 .../main/java/com/epam/dlab/util/ObjectUtils.java  |    49 -
 services/dlab-webapp-common/pom.xml                |    18 +-
 .../com/epam/dlab/auth/SecurityAuthorizer.java     |     0
 .../dlab/auth/SecurityUnauthorizedHandler.java     |     0
 .../src/main/java/com/epam/dlab/auth/UserInfo.java |     0
 .../main/java/com/epam/dlab/auth/UserInfoDAO.java  |    10 +-
 .../epam/dlab/auth/UserVerificationService.java    |     2 +-
 .../com/epam/dlab/auth/contract/SecurityAPI.java   |     0
 .../com/epam/dlab/auth/dto/UserCredentialDTO.java  |     1 -
 .../auth/oauth2/Oauth2AuthenticationService.java   |     0
 .../auth/rest/AbstractAuthenticationService.java   |     0
 .../epam/dlab/auth/rest/ConfigurableResource.java  |     0
 .../auth/rest/UserSessionDurationAuthorizer.java   |     0
 .../auth/rest/UserSessionDurationCallback.java     |     0
 .../com/epam/dlab/rest/client/RESTService.java     |     0
 .../epam/dlab/rest/client/RESTServiceFactory.java  |     0
 .../com/epam/dlab/rest/contracts/ApiCallbacks.java |     4 +-
 .../dlab/rest/contracts/InfrasctructureAPI.java    |     3 +-
 services/provisioning-service/pom.xml              |    10 +-
 services/provisioning-service/provisioning.yml     |     2 +-
 .../epam/dlab/backendapi/core/DockerWarmuper.java  |     2 +-
 .../backendapi/core/commands/RunDockerCommand.java |     8 +-
 .../handlers/CheckInactivityCallbackHandler.java   |    94 +-
 .../dlab/backendapi/modules/ProductionModule.java  |     3 +
 .../backendapi/modules/ProvisioningDevModule.java  |    19 +-
 .../resources/InfrastructureResource.java          |    19 +-
 .../service/CheckInactivityService.java}           |    10 +-
 .../service/impl/CheckInactivityService.java       |   103 -
 .../service/impl/CheckInactivityServiceImpl.java   |   114 +
 .../backendapi/service/impl/DockerService.java     |     3 +
 .../com/epam/dlab/process/ProcessConveyor.java     |     6 +-
 .../dlab/process/builder/ProcessInfoBuilder.java   |     0
 .../process/exception/DlabProcessException.java    |     0
 .../com/epam/dlab/process/model/DlabProcess.java   |     0
 .../com/epam/dlab/process/model/ProcessId.java     |     0
 .../com/epam/dlab/process/model/ProcessInfo.java   |     0
 .../com/epam/dlab/process/model/ProcessStatus.java |     0
 .../com/epam/dlab/process/model/ProcessStep.java   |     0
 .../aws/dataengine-service_check_inactivity.json   |     8 +
 .../aws/dataengine_check_inactivity.json           |     8 +
 .../aws/notebook_check_inactivity.json             |    16 +-
 .../azure/dataengine-service_check_inactivity.json |     8 +
 .../azure/dataengine_check_inactivity.json         |     8 +
 .../azure/notebook_check_inactivity.json           |    22 +-
 .../gcp/dataengine-service_check_inactivity.json   |     8 +
 .../gcp/dataengine_check_inactivity.json           |     8 +
 .../gcp/notebook_check_inactivity.json             |    22 +-
 .../dlab/backendapi/core/DockerWarmuperTest.java   |     4 +-
 services/security-aws/pom.xml                      |     7 +-
 .../aws/service/AwsUserVerificationService.java    |    16 +-
 services/security-azure/pom.xml                    |     4 -
 .../auth/azure/AzureAuthenticationResource.java    |    14 +-
 services/security-gcp/pom.xml                      |    15 +-
 .../auth/gcp/service/GcpAuthenticationService.java |     2 +-
 services/security-service/pom.xml                  |     6 +
 services/security-service/security.yml             |   112 +-
 .../dlab/auth/SecurityServiceConfiguration.java    |    39 +-
 .../epam/dlab/auth/core/CacheableReference.java    |    56 -
 .../epam/dlab/auth/core/DlabLdapConnection.java    |     2 +-
 .../dlab/auth/core/DlabLdapConnectionFactory.java  |    49 +
 .../com/epam/dlab/auth/core/LdapFilterCache.java   |    79 -
 .../java/com/epam/dlab/auth/core/LoginCache.java   |    83 -
 .../com/epam/dlab/auth/core/LoginConveyor.java     |    67 -
 .../java/com/epam/dlab/auth/core/LoginStep.java    |    47 -
 .../com/epam/dlab/auth/core/UserInfoBuilder.java   |   197 -
 .../java/com/epam/dlab/auth/dao/LdapUserDAO.java   |   189 +-
 .../com/epam/dlab/auth/dao/LdapUserDAOImpl.java    |   165 +
 .../main/java/com/epam/dlab/auth/dao/Request.java  |    92 +-
 .../epam/dlab/auth/dao/UserInfoDAODumbImpl.java    |     6 +-
 .../epam/dlab/auth/dao/UserInfoDAOMongoImpl.java   |    85 +-
 .../auth/dao/filter/SearchResultProcessor.java     |    68 -
 .../com/epam/dlab/auth/dao/script/DeepMap.java     |    57 -
 .../epam/dlab/auth/dao/script/ScriptHolder.java    |    59 -
 .../dao/script/SearchResultToDictionaryMapper.java |    98 -
 .../auth/modules/AwsSecurityServiceModule.java     |     4 +-
 .../auth/modules/AzureSecurityServiceModule.java   |     4 +-
 .../auth/modules/GcpSecurityServiceModule.java     |     8 +-
 .../dlab/auth/modules/SecurityServiceModule.java   |    13 +-
 .../SynchronousLdapAuthenticationResource.java     |    80 +
 .../SynchronousLdapAuthenticationService.java      |   186 -
 .../AuthenticationService.java}                    |    17 +-
 .../service/impl/LdapAuthenticationService.java    |    89 +
 .../test/java/com/epam/dlab/auth/aws/AwsTest.java  |    78 -
 .../com/epam/dlab/auth/core/LoginConveyorTest.java |   131 -
 .../dlab/auth/dao/script/ScriptHolderTest.java     |    65 -
 .../java/com/epam/dlab/auth/ldap/BasicTest.java    |   116 -
 .../java/com/epam/dlab/auth/ldap/JsonTest.java     |    84 -
 .../java/com/epam/dlab/auth/ldap/ScriptList.java   |    76 -
 .../impl/LdapAuthenticationServiceTest.java        |   139 +
 services/self-service/pom.xml                      |     8 +-
 services/self-service/self-service.yml             |    14 +-
 .../epam/dlab/backendapi/dao/BaseBillingDAO.java   |    21 +-
 .../com/epam/dlab/backendapi/dao/BillingDAO.java   |     4 +-
 .../epam/dlab/backendapi/dao/ComputationalDAO.java |    14 +-
 .../java/com/epam/dlab/backendapi/dao/EnvDAO.java  |    21 +-
 .../epam/dlab/backendapi/dao/ExploratoryDAO.java   |    33 +-
 .../epam/dlab/backendapi/dao/SchedulerJobDAO.java  |    62 +-
 .../dlab/backendapi/dao/aws/AwsBillingDAO.java     |   309 +-
 .../dlab/backendapi/dao/azure/AzureBillingDAO.java |   325 +-
 .../dlab/backendapi/dao/gcp/GcpBillingDao.java     |     5 +-
 .../epam/dlab/backendapi/modules/DevModule.java    |    16 +-
 .../resources/InfrastructureInfoResource.java      |     9 +
 .../resources/aws/BillingResourceAws.java          |    62 +-
 .../resources/azure/BillingResourceAzure.java      |     2 +-
 .../callback/CheckInactivityCallback.java          |    40 +-
 .../resources/callback/ComputationalCallback.java  |    45 +-
 .../resources/callback/ExploratoryCallback.java    |     3 +-
 .../callback/base/KeyUploaderCallback.java         |     5 +-
 .../AwsBillingFilter.java => BillingFilter.java}   |    23 +-
 .../backendapi/resources/dto/UserResourceInfo.java |     8 +
 .../resources/dto/aws/AwsBillingFilter.java        |    17 +-
 .../resources/dto/azure/AzureBillingFilter.java    |    16 +-
 .../com/epam/dlab/backendapi/roles/UserGroup.java  |    31 -
 .../schedulers/CheckInactivityScheduledJob.java    |    12 +-
 .../computational/StopComputationalJob.java        |     2 -
 .../computational/TerminateComputationalJob.java}  |    20 +-
 .../dlab/backendapi/service/BillingService.java    |    73 +-
 .../dlab/backendapi/service/InactivityService.java |    15 +-
 .../service/InfrastructureInfoService.java         |     3 +
 .../backendapi/service/SchedulerJobService.java    |     5 -
 .../backendapi/service/aws/AwsBillingService.java  |    10 +-
 .../service/azure/AzureBillingService.java         |   172 +-
 .../service/impl/EnvironmentServiceImpl.java       |     3 +-
 .../service/impl/InactivityServiceImpl.java        |   100 +-
 .../impl/InfrastructureInfoServiceBase.java        |    15 +
 .../service/impl/MavenCentralLibraryService.java   |     6 +-
 .../service/impl/SchedulerJobServiceImpl.java      |   123 +-
 .../epam/dlab/backendapi/util/RequestBuilder.java  |  1072 +-
 .../validation/SchedulerJobDTOValidator.java       |     2 +-
 .../src/main/resources/webapp/.angular-cli.json    |    61 -
 .../src/main/resources/webapp/angular.json         |   113 +
 .../src/main/resources/webapp/package-lock.json    | 15497 +++++++++++++++++++
 .../src/main/resources/webapp/package.json         |    48 +-
 .../main/resources/webapp/src/app/app.module.ts    |    33 +-
 .../resources/webapp/src/app/app.routing.module.ts |     5 -
 .../dictionary => collections}/dictionary.ts       |    10 +-
 .../collections/index.ts}                          |     8 +-
 .../resources/webapp/src/app/core/core.module.ts   |     4 +-
 .../app/core/directives/click-outside.directive.ts |    20 +-
 .../src/app/core/interceptors/error.interceptor.ts |    58 +
 .../http.token.interceptor.ts}                     |    38 +-
 .../core/interceptors/httpInterceptor.service.ts   |   101 -
 .../core/interceptors/logInterceptor.factory.ts    |    27 -
 .../nocache.interceptor.ts}                        |    36 +-
 ...mputationalResourceApplicationTemplate.model.ts |     3 +-
 .../models/computationalResourceImage.model.ts     |     4 +-
 .../models/exploratoryEnvironmentVersion.model.ts  |     3 +-
 .../app/core/models/resourceShapeTypes.model.ts    |     2 +-
 .../webapp/src/app/core/pipes/highlight.pipe.ts    |     1 -
 .../src/app/core/services/appRouting.service.ts    |     2 +-
 .../core/services/applicationSecurity.service.ts   |   199 +-
 .../services/applicationServiceFacade.service.ts   |   334 +-
 .../src/app/core/services/authorization.guard.ts   |    17 +-
 .../webapp/src/app/core/services/backup.service.ts |    17 +-
 .../src/app/core/services/billingReport.service.ts |    15 +-
 .../src/app/core/services/checkParams.guard.ts     |    26 +-
 .../src/app/core/services/cloudProvider.guard.ts   |     4 +-
 .../services/dataengineConfiguration.service.ts    |    25 +-
 .../src/app/core/services/healthStatus.service.ts  |   120 +-
 .../webapp/src/app/core/services/index.ts          |     1 +
 .../core/services/librariesInstallation.service.ts |    40 +-
 .../src/app/core/services/manageUngit.service.ts   |    18 +-
 .../services/managementEnvironments.service.ts     |    15 +-
 .../app/core/services/rolesManagement.service.ts   |    45 +-
 .../src/app/core/services/scheduler.service.ts     |    28 +-
 .../{appRouting.service.ts => storage.service.ts}  |    36 +-
 .../src/app/core/services/userAccessKey.service.ts |    41 +-
 .../src/app/core/services/userResource.service.ts  |    85 +-
 .../webapp/src/app/core/util/checkUtils.ts         |     9 +
 .../util/collections/dictionary/idictionary.ts     |    28 -
 .../webapp/src/app/core/util/errorUtils.ts         |     9 +-
 .../webapp/src/app/core/util/fileUtils.ts          |     9 +-
 .../resources/webapp/src/app/core/util/index.ts    |     2 -
 .../app/health-status/environment-status.model.ts  |    54 -
 .../health-status-grid.component.html              |    69 -
 .../health-status-grid.component.ts                |    90 -
 .../app/health-status/health-status.component.html |    50 -
 .../app/health-status/health-status.component.scss |    37 -
 .../app/health-status/health-status.component.ts   |   233 -
 .../src/app/health-status/health-status.module.ts  |    73 -
 .../webapp/src/app/login/login.component.css       |     8 +-
 .../webapp/src/app/login/login.component.ts        |     5 +-
 .../backup-dilog/backup-dilog.component.html       |     0
 .../backup-dilog/backup-dilog.component.scss       |     0
 .../backup-dilog/backup-dilog.component.ts         |     2 +-
 .../resources/webapp/src/app/management/index.ts   |    61 +-
 .../manage-environment-dilog.component.html        |     0
 .../manage-environment-dilog.component.scss        |     0
 .../manage-environment-dilog.component.ts          |    14 +-
 .../group-name-validarion.directive.ts             |     1 -
 .../manage-roles-groups.component.html             |     0
 .../manage-roles-groups.component.scss             |     4 +-
 .../manage-roles-groups.component.ts               |    12 +-
 .../management-grid/management-grid.component.html |   114 +-
 .../management-grid/management-grid.component.scss |     3 +
 .../management-grid/management-grid.component.ts   |    82 +-
 .../src/app/management/management.component.html   |    35 +-
 .../src/app/management/management.component.scss   |     8 +-
 .../src/app/management/management.component.ts     |   248 +-
 .../webapp/src/app/management/management.model.ts  |    32 +-
 .../ssn-monitor/ssn-monitor.component.html         |     0
 .../ssn-monitor/ssn-monitor.component.scss         |     0
 .../ssn-monitor/ssn-monitor.component.ts           |     0
 .../src/main/resources/webapp/src/app/operators.ts |     4 -
 .../src/app/reporting/reporting.component.ts       |    20 +-
 .../webapp/src/app/reporting/reporting.module.ts   |     6 +-
 .../src/app/reporting/toolbar/toolbar.component.ts |     5 +-
 .../cluster-details/cluster-details.component.html |    10 +-
 .../cluster-details/cluster-details.component.ts   |    15 +-
 ...utational-resource-create-dialog.component.html |    53 +-
 ...utational-resource-create-dialog.component.scss |    13 +-
 ...mputational-resource-create-dialog.component.ts |    39 +-
 .../computational-resource-create.model.ts         |     2 +-
 .../computational-resource-create-dialog/index.ts  |     3 -
 .../computational-resources-list.component.html    |     2 +-
 .../computational-resources-list.component.ts      |    25 +-
 .../ami-create-dialog.component.scss               |     7 +-
 .../ami-create-dialog.component.ts                 |    14 +-
 .../detail-dialog/detail-dialog.component.html     |   169 +-
 .../detail-dialog/detail-dialog.component.ts       |    16 +-
 ...ratory-environment-create-dialog.component.html |     2 +-
 ...loratory-environment-create-dialog.component.ts |    18 +-
 .../exploratory-environment-create.model.ts        |     2 +-
 .../exploratory-environment-create-dialog/index.ts |     3 -
 .../exploratory/install-libraries/index.ts         |     3 -
 .../install-libraries.component.html               |     2 +-
 .../install-libraries.component.scss               |     6 +-
 .../install-libraries.component.ts                 |    61 +-
 .../install-libraries/install-libraries.model.ts   |     2 +-
 .../manage-ungit/manage-ungit.component.html       |     9 +-
 .../manage-ungit/manage-ungit.component.scss       |     9 +-
 .../manage-ungit/manage-ungit.component.ts         |    20 +-
 .../resources/manage-ungit/manage-ungit.model.ts   |     2 +-
 .../src/app/resources/resources-grid/index.ts      |     5 -
 .../resources-grid/resources-grid.component.css    |     3 +
 .../resources-grid/resources-grid.component.html   |    12 +-
 .../resources-grid/resources-grid.component.ts     |    41 +-
 .../src/app/resources/resources.component.html     |     2 +-
 .../src/app/resources/resources.component.ts       |    25 +-
 .../scheduler/scheduler.calculations.ts}           |    34 +-
 .../resources/scheduler/scheduler.component.html   |   188 +-
 .../resources/scheduler/scheduler.component.scss   |    82 +-
 .../app/resources/scheduler/scheduler.component.ts |   252 +-
 .../src/app/resources/scheduler/scheduler.model.ts |    25 +-
 .../webapp/src/app/shared/bubble/bubble.service.ts |     2 +-
 .../shared/form-controls/dropdowns.component.scss  |     7 +
 .../confirmation-dialog.component.html             |     2 +-
 .../confirmation-dialog.component.ts               |    22 +-
 .../confirmation-dialog.model.ts                   |    12 +-
 .../key-upload-dialog.component.ts                 |    14 +-
 .../key-upload-dialog/key-upload.model.ts          |     8 +-
 .../app/shared/modal-dialog/modal.component.html   |    41 +-
 .../app/shared/modal-dialog/modal.component.scss   |    25 +-
 .../notification-dialog.component.ts               |     4 +-
 .../webapp/src/app/shared/navbar/index.ts          |     5 +-
 .../src/app/shared/navbar/navbar.component.html    |    29 +-
 .../src/app/shared/navbar/navbar.component.scss    |    35 +-
 .../src/app/shared/navbar/navbar.component.ts      |    73 +-
 .../shared/time-picker/time-picker.component.scss  |     3 +
 .../shared/time-picker/time-picker.component.ts    |     6 +-
 .../webapp/src/assets/styles/_general.scss         |    18 +-
 .../resources/webapp/src/assets/styles/_reset.scss |     3 +-
 .../resources/webapp/src/assets/styles/_theme.scss |   193 +-
 .../webapp/src/dictionary/aws.dictionary.ts        |     1 +
 .../webapp/src/dictionary/azure.dictionary.ts      |     1 +
 .../webapp/src/dictionary/gcp.dictionary.ts        |     1 +
 .../webapp/src/dictionary/global.dictionary.ts     |     4 +-
 .../src/main/resources/webapp/src/polyfills.ts     |     1 -
 .../src/main/resources/webapp/src/styles.scss      |    12 +-
 .../main/resources/webapp/src/tsconfig.app.json    |     8 +-
 .../main/resources/webapp/src/tsconfig.spec.json   |    20 +-
 .../src/main/resources/webapp/tsconfig.json        |    16 +-
 .../src/main/resources/webapp/tslint.json          |     3 +-
 .../resources/InfrastructureInfoResourceTest.java  |    17 +
 .../service/impl/InactivityServiceImplTest.java    |   187 -
 .../impl/MavenCentralLibraryServiceTest.java       |     3 +-
 .../service/impl/SchedulerJobServiceImplTest.java  |    99 +-
 .../dlab/backendapi/util/RequestBuilderTest.java   |     4 -
 474 files changed, 23630 insertions(+), 8010 deletions(-)

diff --cc services/self-service/src/main/resources/webapp/package-lock.json
index 0000000,9e0f215..7f36983
mode 000000,100644..100644
--- a/services/self-service/src/main/resources/webapp/package-lock.json
+++ b/services/self-service/src/main/resources/webapp/package-lock.json
@@@ -1,0 -1,15398 +1,15497 @@@
+ {
+   "name": "webapp",
+   "version": "0.0.0",
+   "lockfileVersion": 1,
+   "requires": true,
+   "dependencies": {
+     "@angular-devkit/architect": {
+       "version": "0.13.0",
+       "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.13.0.tgz",
+       "integrity": "sha512-oDBrWlfKh/0t2ag4T8gz9xzPMItxfctinlsHxhw7dPQ+etq1mIcWgQkiKiDrz4l46YiGipBRlC55j+6f37omAA==",
+       "dev": true,
+       "requires": {
+         "@angular-devkit/core": "7.3.0",
+         "rxjs": "6.3.3"
+       },
+       "dependencies": {
+         "rxjs": {
+           "version": "6.3.3",
+           "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz",
+           "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==",
+           "dev": true,
+           "requires": {
 -            "tslib": "1.9.3"
++            "tslib": "^1.9.0"
+           }
+         }
+       }
+     },
+     "@angular-devkit/build-angular": {
+       "version": "0.13.0",
+       "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.13.0.tgz",
+       "integrity": "sha512-JjoSXbmwOsuDJxngyChr6aOSZ2qsrvSL1MHwqgXhZswmC/KghBF0aZ7y8Wzr27zDCQ174Axts7+IAk6b+aWIqw==",
+       "dev": true,
+       "requires": {
+         "@angular-devkit/architect": "0.13.0",
+         "@angular-devkit/build-optimizer": "0.13.0",
+         "@angular-devkit/build-webpack": "0.13.0",
+         "@angular-devkit/core": "7.3.0",
+         "@ngtools/webpack": "7.3.0",
+         "ajv": "6.7.0",
+         "autoprefixer": "9.4.6",
+         "circular-dependency-plugin": "5.0.2",
+         "clean-css": "4.2.1",
+         "copy-webpack-plugin": "4.6.0",
+         "file-loader": "3.0.1",
+         "glob": "7.1.3",
+         "istanbul": "0.4.5",
+         "istanbul-instrumenter-loader": "3.0.1",
+         "karma-source-map-support": "1.3.0",
+         "less": "3.9.0",
+         "less-loader": "4.1.0",
+         "license-webpack-plugin": "2.1.0",
+         "loader-utils": "1.2.3",
+         "mini-css-extract-plugin": "0.5.0",
+         "minimatch": "3.0.4",
+         "node-sass": "4.11.0",
+         "opn": "5.4.0",
+         "parse5": "4.0.0",
+         "postcss": "7.0.14",
+         "postcss-import": "12.0.1",
+         "postcss-loader": "3.0.0",
+         "raw-loader": "1.0.0",
+         "rxjs": "6.3.3",
+         "sass-loader": "7.1.0",
+         "semver": "5.6.0",
+         "source-map-loader": "0.2.4",
+         "source-map-support": "0.5.10",
+         "speed-measure-webpack-plugin": "1.3.0",
+         "stats-webpack-plugin": "0.7.0",
+         "style-loader": "0.23.1",
+         "stylus": "0.54.5",
+         "stylus-loader": "3.0.2",
+         "terser-webpack-plugin": "1.2.1",
+         "tree-kill": "1.2.1",
+         "webpack": "4.29.0",
+         "webpack-dev-middleware": "3.5.1",
+         "webpack-dev-server": "3.1.14",
+         "webpack-merge": "4.2.1",
+         "webpack-sources": "1.3.0",
+         "webpack-subresource-integrity": "1.1.0-rc.6"
+       },
+       "dependencies": {
+         "glob": {
+           "version": "7.1.3",
+           "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+           "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+           "dev": true,
+           "requires": {
 -            "fs.realpath": "1.0.0",
 -            "inflight": "1.0.6",
 -            "inherits": "2.0.3",
 -            "minimatch": "3.0.4",
 -            "once": "1.4.0",
 -            "path-is-absolute": "1.0.1"
++            "fs.realpath": "^1.0.0",
++            "inflight": "^1.0.4",
++            "inherits": "2",
++            "minimatch": "^3.0.4",
++            "once": "^1.3.0",
++            "path-is-absolute": "^1.0.0"
+           }
+         },
+         "rxjs": {
+           "version": "6.3.3",
+           "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz",
+           "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==",
+           "dev": true,
+           "requires": {
 -            "tslib": "1.9.3"
++            "tslib": "^1.9.0"
+           }
+         },
+         "semver": {
+           "version": "5.6.0",
+           "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+           "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+           "dev": true
+         },
+         "source-map": {
+           "version": "0.6.1",
+           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+           "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+           "dev": true
+         },
+         "source-map-support": {
+           "version": "0.5.10",
+           "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz",
+           "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==",
+           "dev": true,
+           "requires": {
 -            "buffer-from": "1.1.1",
 -            "source-map": "0.6.1"
++            "buffer-from": "^1.0.0",
++            "source-map": "^0.6.0"
+           }
+         }
+       }
+     },
+     "@angular-devkit/build-optimizer": {
+       "version": "0.13.0",
+       "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.13.0.tgz",
+       "integrity": "sha512-fhWuzbMVV/UNYE7rHSKutrWTCZle34N5cdtFz6qhK1k/wn7Vmtg9cFOwzx0SPdIlOEn576NB4DS/4UG3B5WCUQ==",
+       "dev": true,
+       "requires": {
+         "loader-utils": "1.2.3",
+         "source-map": "0.5.6",
+         "typescript": "3.2.4",
+         "webpack-sources": "1.3.0"
+       },
+       "dependencies": {
+         "source-map": {
+           "version": "0.5.6",
+           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
+           "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
+           "dev": true
+         }
+       }
+     },
+     "@angular-devkit/build-webpack": {
+       "version": "0.13.0",
+       "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.13.0.tgz",
+       "integrity": "sha512-idtFoSbQ3Y3WqXlDlU7oTPV9TIU1kjLqce0nK1Kst+t40GTc+Q4iUJJ7KsKE3nV6TPyrL1N/IvIF7+hSJnYm8A==",
+       "dev": true,
+       "requires": {
+         "@angular-devkit/architect": "0.13.0",
+         "@angular-devkit/core": "7.3.0",
+         "rxjs": "6.3.3"
+       },
+       "dependencies": {
+         "rxjs": {
+           "version": "6.3.3",
+           "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz",
+           "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==",
+           "dev": true,
+           "requires": {
 -            "tslib": "1.9.3"
++            "tslib": "^1.9.0"
+           }
+         }
+       }
+     },
+     "@angular-devkit/core": {
+       "version": "7.3.0",
+       "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.3.0.tgz",
+       "integrity": "sha512-b0qtAUpgqLpWY8W6vWRv1aj6bXkZCP1rvywl8i8TbGMY67CWRcy5J3fNAMmjiZS+LJixFlIXYf4iOydglyJMfg==",
+       "dev": true,
+       "requires": {
+         "ajv": "6.7.0",
+         "chokidar": "2.0.4",
+         "fast-json-stable-stringify": "2.0.0",
+         "rxjs": "6.3.3",
+         "source-map": "0.7.3"
+       },
+       "dependencies": {
+         "anymatch": {
+           "version": "2.0.0",
+           "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+           "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+           "dev": true,
+           "requires": {
 -            "micromatch": "3.1.10",
 -            "normalize-path": "2.1.1"
++            "micromatch": "^3.1.4",
++            "normalize-path": "^2.1.1"
+           }
+         },
+         "arr-diff": {
+           "version": "4.0.0",
+           "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+           "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+           "dev": true
+         },
+         "array-unique": {
+           "version": "0.3.2",
+           "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+           "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+           "dev": true
+         },
+         "braces": {
+           "version": "2.3.2",
+           "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+           "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+           "dev": true,
+           "requires": {
 -            "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.2",
 -            "snapdragon": "0.8.2",
 -            "snapdragon-node": "2.1.1",
 -            "split-string": "3.1.0",
 -            "to-regex": "3.0.2"
++            "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.2",
++            "snapdragon": "^0.8.1",
++            "snapdragon-node": "^2.0.1",
++            "split-string": "^3.0.2",
++            "to-regex": "^3.0.1"
+           },
+           "dependencies": {
+             "extend-shallow": {
+               "version": "2.0.1",
+               "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+               "dev": true,
+               "requires": {
 -                "is-extendable": "0.1.1"
++                "is-extendable": "^0.1.0"
+               }
+             }
+           }
+         },
+         "chokidar": {
+           "version": "2.0.4",
+           "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
+           "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==",
+           "dev": true,
+           "requires": {
 -            "anymatch": "2.0.0",
 -            "async-each": "1.0.1",
 -            "braces": "2.3.2",
 -            "fsevents": "1.2.7",
 -            "glob-parent": "3.1.0",
 -            "inherits": "2.0.3",
 -            "is-binary-path": "1.0.1",
 -            "is-glob": "4.0.0",
 -            "lodash.debounce": "4.0.8",
 -            "normalize-path": "2.1.1",
 -            "path-is-absolute": "1.0.1",
 -            "readdirp": "2.1.0",
 -            "upath": "1.1.0"
++            "anymatch": "^2.0.0",
++            "async-each": "^1.0.0",
++            "braces": "^2.3.0",
++            "fsevents": "^1.2.2",
++            "glob-parent": "^3.1.0",
++            "inherits": "^2.0.1",
++            "is-binary-path": "^1.0.0",
++            "is-glob": "^4.0.0",
++            "lodash.debounce": "^4.0.8",
++            "normalize-path": "^2.1.1",
++            "path-is-absolute": "^1.0.0",
++            "readdirp": "^2.0.0",
++            "upath": "^1.0.5"
+           }
+         },
+         "expand-brackets": {
+           "version": "2.1.4",
+           "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+           "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+           "dev": true,
+           "requires": {
 -            "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"
++            "debug": "^2.3.3",
++            "define-property": "^0.2.5",
++            "extend-shallow": "^2.0.1",
++            "posix-character-classes": "^0.1.0",
++            "regex-not": "^1.0.0",
++            "snapdragon": "^0.8.1",
++            "to-regex": "^3.0.1"
+           },
+           "dependencies": {
+             "define-property": {
+               "version": "0.2.5",
+               "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+               "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+               "dev": true,
+               "requires": {
 -                "is-descriptor": "0.1.6"
++                "is-descriptor": "^0.1.0"
+               }
+             },
+             "extend-shallow": {
+               "version": "2.0.1",
+               "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+               "dev": true,
+               "requires": {
 -                "is-extendable": "0.1.1"
++                "is-extendable": "^0.1.0"
+               }
+             },
+             "is-accessor-descriptor": {
+               "version": "0.1.6",
+               "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+               "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+               "dev": true,
+               "requires": {
 -                "kind-of": "3.2.2"
++                "kind-of": "^3.0.2"
+               },
+               "dependencies": {
+                 "kind-of": {
+                   "version": "3.2.2",
+                   "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+                   "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+                   "dev": true,
+                   "requires": {
 -                    "is-buffer": "1.1.5"
++                    "is-buffer": "^1.1.5"
+                   }
+                 }
+               }
+             },
+             "is-data-descriptor": {
+               "version": "0.1.4",
+               "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+               "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+               "dev": true,
+               "requires": {
 -                "kind-of": "3.2.2"
++                "kind-of": "^3.0.2"
+               },
+               "dependencies": {
+                 "kind-of": {
+                   "version": "3.2.2",
+                   "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+                   "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+                   "dev": true,
+                   "requires": {
 -                    "is-buffer": "1.1.5"
++                    "is-buffer": "^1.1.5"
+                   }
+                 }
+               }
+             },
+             "is-descriptor": {
+               "version": "0.1.6",
+               "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+               "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+               "dev": true,
+               "requires": {
 -                "is-accessor-descriptor": "0.1.6",
 -                "is-data-descriptor": "0.1.4",
 -                "kind-of": "5.1.0"
++                "is-accessor-descriptor": "^0.1.6",
++                "is-data-descriptor": "^0.1.4",
++                "kind-of": "^5.0.0"
+               }
+             },
+             "kind-of": {
+               "version": "5.1.0",
+               "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+               "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+               "dev": true
+             }
+           }
+         },
+         "extglob": {
+           "version": "2.0.4",
+           "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+           "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+           "dev": true,
+           "requires": {
 -            "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"
++            "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.0",
++            "snapdragon": "^0.8.1",
++            "to-regex": "^3.0.1"
+           },
+           "dependencies": {
+             "define-property": {
+               "version": "1.0.0",
+               "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+               "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+               "dev": true,
+               "requires": {
 -                "is-descriptor": "1.0.2"
++                "is-descriptor": "^1.0.0"
+               }
+             },
+             "extend-shallow": {
+               "version": "2.0.1",
+               "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+               "dev": true,
+               "requires": {
 -                "is-extendable": "0.1.1"
++                "is-extendable": "^0.1.0"
+               }
+             }
+           }
+         },
+         "fill-range": {
+           "version": "4.0.0",
+           "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+           "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+           "dev": true,
+           "requires": {
 -            "extend-shallow": "2.0.1",
 -            "is-number": "3.0.0",
 -            "repeat-string": "1.6.1",
 -            "to-regex-range": "2.1.1"
++            "extend-shallow": "^2.0.1",
++            "is-number": "^3.0.0",
++            "repeat-string": "^1.6.1",
++            "to-regex-range": "^2.1.0"
+           },
+           "dependencies": {
+             "extend-shallow": {
+               "version": "2.0.1",
+               "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+               "dev": true,
+               "requires": {
 -                "is-extendable": "0.1.1"
++                "is-extendable": "^0.1.0"
+               }
+             }
+           }
+         },
+         "fsevents": {
+           "version": "1.2.7",
+           "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz",
+           "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "nan": "2.12.1",
 -            "node-pre-gyp": "0.10.3"
++            "nan": "^2.9.2",
++            "node-pre-gyp": "^0.10.0"
+           },
+           "dependencies": {
+             "abbrev": {
+               "version": "1.1.1",
+               "bundled": true,
+               "dev": true,
+               "optional": true
+             },
+             "ansi-regex": {
+               "version": "2.1.1",
+               "bundled": true,
 -              "dev": true
++              "dev": true,
++              "optional": true
+             },
+             "aproba": {
+               "version": "1.2.0",
+               "bundled": true,
+               "dev": true,
+               "optional": true
+             },
+             "are-we-there-yet": {
+               "version": "1.1.5",
+               "bundled": true,
+               "dev": true,
+               "optional": true,
+               "requires": {
 -                "delegates": "1.0.0",
 -                "readable-stream": "2.3.6"
++                "delegates": "^1.0.0",
++                "readable-stream": "^2.0.6"
+               }
+             },
+             "balanced-match": {
+               "version": "1.0.0",
+               "bundled": true,
 -              "dev": true
++              "dev": true,
++              "optional": true
+             },
+             "brace-expansion": {
+               "version": "1.1.11",
+               "bundled": true,
+               "dev": true,
++              "optional": true,
+               "requires": {
 -                "balanced-match": "1.0.0",
++                "balanced-match": "^1.0.0",
+                 "concat-map": "0.0.1"
+               }
+             },
+             "chownr": {
+               "version": "1.1.1",
+               "bundled": true,
+               "dev": true,
+               "optional": true
+             },
+             "code-point-at": {
+               "version": "1.1.0",
+               "bundled": true,
 -              "dev": true
++              "dev": true,
++              "optional": true
+             },
+             "concat-map": {
+               "version": "0.0.1",
+               "bundled": true,
 -              "dev": true
++              "dev": true,
++              "optional": true
+             },
+             "console-control-strings": {
+               "version": "1.1.0",
+               "bundled": true,
 -              "dev": true
++              "dev": true,
++              "optional": true
+             },
+             "core-util-is": {
+               "version": "1.0.2",
+               "bundled": true,
+               "dev": true,
+               "optional": true
+             },
+             "debug": {
+               "version": "2.6.9",
+               "bundled": true,
+               "dev": true,
+               "optional": true,
+               "requires": {
+                 "ms": "2.0.0"
+               }
+             },
+             "deep-extend": {
+               "version": "0.6.0",
+               "bundled": true,
+               "dev": true,
+               "optional": true
+             },
+             "delegates": {
+               "version": "1.0.0",
+               "bundled": true,
+               "dev": true,
+               "optional": true
+             },
+             "detect-libc": {
+               "version": "1.0.3",
+               "bundled": true,
+               "dev": true,
+               "optional": true
+             },
+             "fs-minipass": {
+               "version": "1.2.5",
+               "bundled": true,
+               "dev": true,
+               "optional": true,
+               "requires": {
 -                "minipass": "2.3.5"
++                "minipass": "^2.2.1"
+               }
+             },
+             "fs.realpath": {
+               "version": "1.0.0",
+               "bundled": true,
+               "dev": true,
+               "optional": true
+             },
+             "gauge": {
+               "version": "2.7.4",
+               "bundled": true,
+               "dev": true,
+               "optional": true,
+               "requires": {
 -                "aproba": "1.2.0",
 -                "console-control-strings": "1.1.0",
 -                "has-unicode": "2.0.1",
 -                "object-assign": "4.1.1",
 -                "signal-exit": "3.0.2",
 -                "string-width": "1.0.2",
 -                "strip-ansi": "3.0.1",
 -                "wide-align": "1.1.3"
++                "aproba": "^1.0.3",
++                "console-control-strings": "^1.0.0",
++                "has-unicode": "^2.0.0",
++                "object-assign": "^4.1.0",
++                "signal-exit": "^3.0.0",
++                "string-width": "^1.0.1",
++                "strip-ansi": "^3.0.1",
++                "wide-align": "^1.1.0"
+               }
+             },
+             "glob": {
+               "version": "7.1.3",
+               "bundled": true,
+               "dev": true,
+               "optional": true,
+               "requires": {
 -                "fs.realpath": "1.0.0",
 -                "inflight": "1.0.6",
 -                "inherits": "2.0.3",
 -                "minimatch": "3.0.4",
 -                "once": "1.4.0",
 -                "path-is-absolute": "1.0.1"
++                "fs.realpath": "^1.0.0",
++                "inflight": "^1.0.4",
++                "inherits": "2",
++                "minimatch": "^3.0.4",
++                "once": "^1.3.0",
++                "path-is-absolute": "^1.0.0"
+               }
+             },
+             "has-unicode": {
+               "version": "2.0.1",
+               "bundled": true,
+               "dev": true,
+               "optional": true
+             },
+             "iconv-lite": {
+               "version": "0.4.24",
+               "bundled": true,
+               "dev": true,
+               "optional": true,
+               "requires": {
 -                "safer-buffer": "2.1.2"
++                "safer-buffer": ">= 2.1.2 < 3"
+               }
+             },
+             "ignore-walk": {
+               "version": "3.0.1",
+               "bundled": true,
+               "dev": true,
+               "optional": true,
+               "requires": {
 -                "minimatch": "3.0.4"
++                "minimatch": "^3.0.4"
+               }
+             },
+             "inflight": {
+               "version": "1.0.6",
+               "bundled": true,
+               "dev": true,
+               "optional": true,
+               "requires": {
 -                "once": "1.4.0",
 -                "wrappy": "1.0.2"
++                "once": "^1.3.0",
++                "wrappy": "1"
+               }
+             },
+             "inherits": {
+               "version": "2.0.3",
+               "bundled": true,
 -              "dev": true
++              "dev": true,
++              "optional": true
+             },
+             "ini": {
+               "version": "1.3.5",
+               "bundled": true,
+               "dev": true,
+               "optional": true
+             },
+             "is-fullwidth-code-point": {
+               "version": "1.0.0",
+               "bundled": true,
+               "dev": true,
++              "optional": true,
+               "requires": {
 -                "number-is-nan": "1.0.1"
++                "number-is-nan": "^1.0.0"
+               }
+             },
+             "isarray": {
+               "version": "1.0.0",
+               "bundled": true,
+               "dev": true,
+               "optional": true
+             },
+             "minimatch": {
+               "version": "3.0.4",
+               "bundled": true,
+               "dev": true,
++              "optional": true,
+               "requires": {
 -                "brace-expansion": "1.1.11"
++                "brace-expansion": "^1.1.7"
+               }
+             },
+             "minimist": {
+               "version": "0.0.8",
+               "bundled": true,
 -              "dev": true
++              "dev": true,
++              "optional": true
+             },
+             "minipass": {
+               "version": "2.3.5",
+               "bundled": true,
+               "dev": true,
++              "optional": true,
+               "requires": {
 -                "safe-buffer": "5.1.2",
 -                "yallist": "3.0.3"
++                "safe-buffer": "^5.1.2",
++                "yallist": "^3.0.0"
+               }
+             },
+             "minizlib": {
+               "version": "1.2.1",
+               "bundled": true,
+               "dev": true,
+               "optional": true,
+               "requires": {
 -                "minipass": "2.3.5"
++                "minipass": "^2.2.1"
+               }
+             },
+             "mkdirp": {
+               "version": "0.5.1",
+               "bundled": true,
+               "dev": true,
++              "optional": true,
+               "requires": {
+                 "minimist": "0.0.8"
+               }
+             },
+             "ms": {
+               "version": "2.0.0",
+               "bundled": true,
+               "dev": true,
+               "optional": true
+             },
+             "needle": {
+               "version": "2.2.4",
+               "bundled": true,
+               "dev": true,
+               "optional": true,
+               "requires": {
 -                "debug": "2.6.9",
 -                "iconv-lite": "0.4.24",
 -                "sax": "1.2.4"
++                "debug": "^2.1.2",
++                "iconv-lite": "^0.4.4",
++                "sax": "^1.2.4"
+               }
+             },
+             "node-pre-gyp": {
+               "version": "0.10.3",
+               "bundled": true,
+               "dev": true,
+               "optional": true,
+               "requires": {
 -                "detect-libc": "1.0.3",
 -                "mkdirp": "0.5.1",
 -                "needle": "2.2.4",
 -                "nopt": "4.0.1",
 -                "npm-packlist": "1.2.0",
 -                "npmlog": "4.1.2",
 -                "rc": "1.2.8",
 -                "rimraf": "2.6.3",
 -                "semver": "5.6.0",
 -                "tar": "4.4.8"
++                "detect-libc": "^1.0.2",
++                "mkdirp": "^0.5.1",
++                "needle": "^2.2.1",
++                "nopt": "^4.0.1",
++                "npm-packlist": "^1.1.6",
++                "npmlog": "^4.0.2",
++                "rc": "^1.2.7",
++                "rimraf": "^2.6.1",
++                "semver": "^5.3.0",
++                "tar": "^4"
+               }
+             },
+             "nopt": {
+               "version": "4.0.1",
+               "bundled": true,
+               "dev": true,
+               "optional": true,
+               "requires": {
 -                "abbrev": "1.1.1",
 -                "osenv": "0.1.5"
++                "abbrev": "1",
++                "osenv": "^0.1.4"
+               }
+             },
+             "npm-bundled": {
+               "version": "1.0.5",
+               "bundled": true,
+               "dev": true,
+               "optional": true
+             },
+             "npm-packlist": {
+               "version": "1.2.0",
+               "bundled": true,
+               "dev": true,
+               "optional": true,
+               "requires": {
 -                "ignore-walk": "3.0.1",
 -                "npm-bundled": "1.0.5"
++                "ignore-walk": "^3.0.1",
++                "npm-bundled": "^1.0.1"
+               }
+             },
+             "npmlog": {
+               "version": "4.1.2",
+               "bundled": true,
+               "dev": true,
+               "optional": true,
+               "requires": {
 -                "are-we-there-yet": "1.1.5",
 -                "console-control-strings": "1.1.0",
 -                "gauge": "2.7.4",
 -                "set-blocking": "2.0.0"
++                "are-we-there-yet": "~1.1.2",
++                "console-control-strings": "~1.1.0",
++                "gauge": "~2.7.3",
++                "set-blocking": "~2.0.0"
+               }
+             },
+             "number-is-nan": {
+               "version": "1.0.1",
+               "bundled": true,
 -              "dev": true
++              "dev": true,
++              "optional": true
+             },
+             "object-assign": {
+               "version": "4.1.1",
+               "bundled": true,
+               "dev": true,
+               "optional": true
+             },
+             "once": {
+               "version": "1.4.0",
+               "bundled": true,
+               "dev": true,
++              "optional": true,
+               "requires": {
 -                "wrappy": "1.0.2"
++                "wrappy": "1"
+               }
+             },
+             "os-homedir": {
+               "version": "1.0.2",
+               "bundled": true,
+               "dev": true,
+               "optional": true
+             },
+             "os-tmpdir": {
+               "version": "1.0.2",
+               "bundled": true,
+               "dev": true,
+               "optional": true
+             },
+             "osenv": {
+               "version": "0.1.5",
+               "bundled": true,
+               "dev": true,
+               "optional": true,
+               "requires": {
 -                "os-homedir": "1.0.2",
 -                "os-tmpdir": "1.0.2"
++                "os-homedir": "^1.0.0",
++                "os-tmpdir": "^1.0.0"
+               }
+             },
+             "path-is-absolute": {
+               "version": "1.0.1",
+               "bundled": true,
+               "dev": true,
+               "optional": true
+             },
+             "process-nextick-args": {
+               "version": "2.0.0",
+               "bundled": true,
+               "dev": true,
+               "optional": true
+             },
+             "rc": {
+               "version": "1.2.8",
+               "bundled": true,
+               "dev": true,
+               "optional": true,
+               "requires": {
 -                "deep-extend": "0.6.0",
 -                "ini": "1.3.5",
 -                "minimist": "1.2.0",
 -                "strip-json-comments": "2.0.1"
++                "deep-extend": "^0.6.0",
++                "ini": "~1.3.0",
++                "minimist": "^1.2.0",
++                "strip-json-comments": "~2.0.1"
+               },
+               "dependencies": {
+                 "minimist": {
+                   "version": "1.2.0",
+                   "bundled": true,
+                   "dev": true,
+                   "optional": true
+                 }
+               }
+             },
+             "readable-stream": {
+               "version": "2.3.6",
+               "bundled": true,
+               "dev": true,
+               "optional": true,
+               "requires": {
 -                "core-util-is": "1.0.2",
 -                "inherits": "2.0.3",
 -                "isarray": "1.0.0",
 -                "process-nextick-args": "2.0.0",
 -                "safe-buffer": "5.1.2",
 -                "string_decoder": "1.1.1",
 -                "util-deprecate": "1.0.2"
++                "core-util-is": "~1.0.0",
++                "inherits": "~2.0.3",
++                "isarray": "~1.0.0",
++                "process-nextick-args": "~2.0.0",
++                "safe-buffer": "~5.1.1",
++                "string_decoder": "~1.1.1",
++                "util-deprecate": "~1.0.1"
+               }
+             },
+             "rimraf": {
+               "version": "2.6.3",
+               "bundled": true,
+               "dev": true,
+               "optional": true,
+               "requires": {
 -                "glob": "7.1.3"
++                "glob": "^7.1.3"
+               }
+             },
+             "safe-buffer": {
+               "version": "5.1.2",
+               "bundled": true,
 -              "dev": true
++              "dev": true,
++              "optional": true
+             },
+             "safer-buffer": {
+               "version": "2.1.2",
+               "bundled": true,
+               "dev": true,
+               "optional": true
+             },
+             "sax": {
+               "version": "1.2.4",
+               "bundled": true,
+               "dev": true,
+               "optional": true
+             },
+             "semver": {
+               "version": "5.6.0",
+               "bundled": true,
+               "dev": true,
+               "optional": true
+             },
+             "set-blocking": {
+               "version": "2.0.0",
+               "bundled": true,
+               "dev": true,
+               "optional": true
+             },
+             "signal-exit": {
+               "version": "3.0.2",
+               "bundled": true,
+               "dev": true,
+               "optional": true
+             },
+             "string-width": {
+               "version": "1.0.2",
+               "bundled": true,
+               "dev": true,
++              "optional": true,
+               "requires": {
 -                "code-point-at": "1.1.0",
 -                "is-fullwidth-code-point": "1.0.0",
 -                "strip-ansi": "3.0.1"
++                "code-point-at": "^1.0.0",
++                "is-fullwidth-code-point": "^1.0.0",
++                "strip-ansi": "^3.0.0"
+               }
+             },
+             "string_decoder": {
+               "version": "1.1.1",
+               "bundled": true,
+               "dev": true,
+               "optional": true,
+               "requires": {
 -                "safe-buffer": "5.1.2"
++                "safe-buffer": "~5.1.0"
+               }
+             },
+             "strip-ansi": {
+               "version": "3.0.1",
+               "bundled": true,
+               "dev": true,
++              "optional": true,
+               "requires": {
 -                "ansi-regex": "2.1.1"
++                "ansi-regex": "^2.0.0"
+               }
+             },
+             "strip-json-comments": {
+               "version": "2.0.1",
+               "bundled": true,
+               "dev": true,
+               "optional": true
+             },
+             "tar": {
+               "version": "4.4.8",
+               "bundled": true,
+               "dev": true,
+               "optional": true,
+               "requires": {
 -                "chownr": "1.1.1",
 -                "fs-minipass": "1.2.5",
 -                "minipass": "2.3.5",
 -                "minizlib": "1.2.1",
 -                "mkdirp": "0.5.1",
 -                "safe-buffer": "5.1.2",
 -                "yallist": "3.0.3"
++                "chownr": "^1.1.1",
++                "fs-minipass": "^1.2.5",
++                "minipass": "^2.3.4",
++                "minizlib": "^1.1.1",
++                "mkdirp": "^0.5.0",
++                "safe-buffer": "^5.1.2",
++                "yallist": "^3.0.2"
+               }
+             },
+             "util-deprecate": {
+               "version": "1.0.2",
+               "bundled": true,
+               "dev": true,
+               "optional": true
+             },
+             "wide-align": {
+               "version": "1.1.3",
+               "bundled": true,
+               "dev": true,
+               "optional": true,
+               "requires": {
 -                "string-width": "1.0.2"
++                "string-width": "^1.0.2 || 2"
+               }
+             },
+             "wrappy": {
+               "version": "1.0.2",
+               "bundled": true,
 -              "dev": true
++              "dev": true,
++              "optional": true
+             },
+             "yallist": {
+               "version": "3.0.3",
+               "bundled": true,
 -              "dev": true
++              "dev": true,
++              "optional": true
+             }
+           }
+         },
+         "glob-parent": {
+           "version": "3.1.0",
+           "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+           "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+           "dev": true,
+           "requires": {
 -            "is-glob": "3.1.0",
 -            "path-dirname": "1.0.2"
++            "is-glob": "^3.1.0",
++            "path-dirname": "^1.0.0"
+           },
+           "dependencies": {
+             "is-glob": {
+               "version": "3.1.0",
+               "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+               "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+               "dev": true,
+               "requires": {
 -                "is-extglob": "2.1.1"
++                "is-extglob": "^2.1.0"
+               }
+             }
+           }
+         },
+         "is-accessor-descriptor": {
+           "version": "1.0.0",
+           "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+           "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+           "dev": true,
+           "requires": {
 -            "kind-of": "6.0.2"
++            "kind-of": "^6.0.0"
+           }
+         },
+         "is-data-descriptor": {
+           "version": "1.0.0",
+           "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+           "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+           "dev": true,
+           "requires": {
 -            "kind-of": "6.0.2"
++            "kind-of": "^6.0.0"
+           }
+         },
+         "is-descriptor": {
+           "version": "1.0.2",
+           "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+           "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+           "dev": true,
+           "requires": {
 -            "is-accessor-descriptor": "1.0.0",
 -            "is-data-descriptor": "1.0.0",
 -            "kind-of": "6.0.2"
++            "is-accessor-descriptor": "^1.0.0",
++            "is-data-descriptor": "^1.0.0",
++            "kind-of": "^6.0.2"
+           }
+         },
+         "is-extglob": {
+           "version": "2.1.1",
+           "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+           "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+           "dev": true
+         },
+         "is-glob": {
+           "version": "4.0.0",
+           "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+           "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+           "dev": true,
+           "requires": {
 -            "is-extglob": "2.1.1"
++            "is-extglob": "^2.1.1"
+           }
+         },
+         "is-number": {
+           "version": "3.0.0",
+           "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+           "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+           "dev": true,
+           "requires": {
 -            "kind-of": "3.2.2"
++            "kind-of": "^3.0.2"
+           },
+           "dependencies": {
+             "kind-of": {
+               "version": "3.2.2",
+               "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+               "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+               "dev": true,
+               "requires": {
 -                "is-buffer": "1.1.5"
++                "is-buffer": "^1.1.5"
+               }
+             }
+           }
+         },
+         "isobject": {
+           "version": "3.0.1",
+           "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+           "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+           "dev": true
+         },
+         "kind-of": {
+           "version": "6.0.2",
+           "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+           "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+           "dev": true
+         },
+         "micromatch": {
+           "version": "3.1.10",
+           "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+           "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+           "dev": true,
+           "requires": {
 -            "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.2",
 -            "nanomatch": "1.2.13",
 -            "object.pick": "1.3.0",
 -            "regex-not": "1.0.2",
 -            "snapdragon": "0.8.2",
 -            "to-regex": "3.0.2"
++            "arr-diff": "^4.0.0",
++            "array-unique": "^0.3.2",
++            "braces": "^2.3.1",
++            "define-property": "^2.0.2",
++            "extend-shallow": "^3.0.2",
++            "extglob": "^2.0.4",
++            "fragment-cache": "^0.2.1",
++            "kind-of": "^6.0.2",
++            "nanomatch": "^1.2.9",
++            "object.pick": "^1.3.0",
++            "regex-not": "^1.0.0",
++            "snapdragon": "^0.8.1",
++            "to-regex": "^3.0.2"
+           }
+         },
+         "nan": {
+           "version": "2.12.1",
+           "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz",
+           "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==",
+           "dev": true,
+           "optional": true
+         },
+         "rxjs": {
+           "version": "6.3.3",
+           "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz",
+           "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==",
+           "dev": true,
+           "requires": {
 -            "tslib": "1.9.3"
++            "tslib": "^1.9.0"
+           }
+         },
+         "source-map": {
+           "version": "0.7.3",
+           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
+           "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
+           "dev": true
+         }
+       }
+     },
+     "@angular-devkit/schematics": {
+       "version": "7.3.0",
+       "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.3.0.tgz",
+       "integrity": "sha512-glOduymftH0LmJhITWgWUJK8QCDUltgTZ943/OyArIvLXTLL/8zCb+G6xL+3k33EQjwJicgQ3WIjonJmeTK/Ww==",
+       "dev": true,
+       "requires": {
+         "@angular-devkit/core": "7.3.0",
+         "rxjs": "6.3.3"
+       },
+       "dependencies": {
+         "rxjs": {
+           "version": "6.3.3",
+           "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz",
+           "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==",
+           "dev": true,
+           "requires": {
 -            "tslib": "1.9.3"
++            "tslib": "^1.9.0"
+           }
+         }
+       }
+     },
+     "@angular/animations": {
+       "version": "8.0.0-beta.2",
+       "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-8.0.0-beta.2.tgz",
+       "integrity": "sha512-Nc6iOJtoUvjKC+yfg+zOZKH/i1J98T+OtBxVSc1usAil21VqhhGyze0/ISsbsYrN4/QH+mH0LMb/tIvPd18hKg==",
+       "requires": {
 -        "tslib": "1.9.3"
++        "tslib": "^1.9.0"
+       }
+     },
+     "@angular/cdk": {
+       "version": "6.4.7",
+       "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-6.4.7.tgz",
+       "integrity": "sha512-18x0U66fLD5kGQWZ9n3nb75xQouXlWs7kUDaTd8HTrHpT1s2QIAqlLd1KxfrYiVhsEC2jPQaoiae7VnBlcvkBg==",
+       "requires": {
 -        "tslib": "1.9.3"
++        "tslib": "^1.7.1"
+       }
+     },
+     "@angular/cli": {
+       "version": "7.3.0",
+       "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-7.3.0.tgz",
+       "integrity": "sha512-6+NoHsW1MYG7GBHUg71zaWIFeIRps/SVksCmRFCpW0RXqErCQmzf0GZuDTZZ2Yo4RzU01150sVp1R8wEvEZfZQ==",
+       "dev": true,
+       "requires": {
+         "@angular-devkit/architect": "0.13.0",
+         "@angular-devkit/core": "7.3.0",
+         "@angular-devkit/schematics": "7.3.0",
+         "@schematics/angular": "7.3.0",
+         "@schematics/update": "0.13.0",
+         "@yarnpkg/lockfile": "1.1.0",
+         "ini": "1.3.5",
+         "inquirer": "6.2.1",
+         "npm-package-arg": "6.1.0",
+         "opn": "5.4.0",
+         "pacote": "9.4.0",
+         "semver": "5.6.0",
+         "symbol-observable": "1.2.0"
+       },
+       "dependencies": {
+         "ini": {
+           "version": "1.3.5",
+           "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+           "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+           "dev": true
+         },
+         "semver": {
+           "version": "5.6.0",
+           "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+           "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+           "dev": true
+         }
+       }
+     },
+     "@angular/common": {
+       "version": "8.0.0-beta.2",
+       "resolved": "https://registry.npmjs.org/@angular/common/-/common-8.0.0-beta.2.tgz",
+       "integrity": "sha512-uF56iPXrvIbQRF6H6Xb18ZY2r4wNOqhbx43oMwxdphWwafzhSWewUbqZGLJ2fAq4k+0s8rVb3bxaklkU9ijFYA==",
+       "requires": {
 -        "tslib": "1.9.3"
++        "tslib": "^1.9.0"
+       }
+     },
+     "@angular/compiler": {
+       "version": "8.0.0-beta.2",
+       "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-8.0.0-beta.2.tgz",
+       "integrity": "sha512-Y4kdZ8GjLF9pkQrz5BRYKvoGMugmB9+GshEcwxsBu2E6TTK8LJeW+6QIJAcSidtL4bTRQAv8XbszluGG17quZg==",
+       "requires": {
 -        "tslib": "1.9.3"
++        "tslib": "^1.9.0"
+       }
+     },
+     "@angular/compiler-cli": {
+       "version": "8.0.0-beta.2",
+       "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-8.0.0-beta.2.tgz",
+       "integrity": "sha512-vOHsane3CcdTFlCDa8VRxTBfsJN3moxaLAu2oBOnILCQZBFfeLPhTOD2Oe5oMEvwwKKWPi/0gHWAKc6TWONZug==",
+       "dev": true,
+       "requires": {
+         "canonical-path": "1.0.0",
 -        "chokidar": "1.7.0",
 -        "convert-source-map": "1.6.0",
 -        "dependency-graph": "0.7.2",
 -        "magic-string": "0.25.2",
 -        "minimist": "1.2.0",
 -        "reflect-metadata": "0.1.13",
 -        "shelljs": "0.8.3",
 -        "source-map": "0.6.1",
 -        "tslib": "1.9.3",
++        "chokidar": "^1.4.2",
++        "convert-source-map": "^1.5.1",
++        "dependency-graph": "^0.7.2",
++        "magic-string": "^0.25.0",
++        "minimist": "^1.2.0",
++        "reflect-metadata": "^0.1.2",
++        "shelljs": "^0.8.1",
++        "source-map": "^0.6.1",
++        "tslib": "^1.9.0",
+         "yargs": "9.0.1"
+       },
+       "dependencies": {
+         "camelcase": {
+           "version": "4.1.0",
+           "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+           "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+           "dev": true
+         },
+         "cross-spawn": {
+           "version": "5.1.0",
+           "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+           "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+           "dev": true,
+           "requires": {
 -            "lru-cache": "4.1.1",
 -            "shebang-command": "1.2.0",
 -            "which": "1.3.0"
++            "lru-cache": "^4.0.1",
++            "shebang-command": "^1.2.0",
++            "which": "^1.2.9"
+           }
+         },
+         "execa": {
+           "version": "0.7.0",
+           "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+           "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+           "dev": true,
+           "requires": {
 -            "cross-spawn": "5.1.0",
 -            "get-stream": "3.0.0",
 -            "is-stream": "1.1.0",
 -            "npm-run-path": "2.0.2",
 -            "p-finally": "1.0.0",
 -            "signal-exit": "3.0.2",
 -            "strip-eof": "1.0.0"
++            "cross-spawn": "^5.0.1",
++            "get-stream": "^3.0.0",
++            "is-stream": "^1.1.0",
++            "npm-run-path": "^2.0.0",
++            "p-finally": "^1.0.0",
++            "signal-exit": "^3.0.0",
++            "strip-eof": "^1.0.0"
+           }
+         },
+         "find-up": {
+           "version": "2.1.0",
+           "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+           "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+           "dev": true,
+           "requires": {
 -            "locate-path": "2.0.0"
++            "locate-path": "^2.0.0"
+           }
+         },
+         "get-stream": {
+           "version": "3.0.0",
+           "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+           "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+           "dev": true
+         },
+         "load-json-file": {
+           "version": "2.0.0",
+           "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
+           "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
+           "dev": true,
+           "requires": {
 -            "graceful-fs": "4.1.11",
 -            "parse-json": "2.2.0",
 -            "pify": "2.3.0",
 -            "strip-bom": "3.0.0"
++            "graceful-fs": "^4.1.2",
++            "parse-json": "^2.2.0",
++            "pify": "^2.0.0",
++            "strip-bom": "^3.0.0"
+           }
+         },
+         "mem": {
+           "version": "1.1.0",
+           "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
+           "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
+           "dev": true,
+           "requires": {
 -            "mimic-fn": "1.2.0"
++            "mimic-fn": "^1.0.0"
+           }
+         },
+         "os-locale": {
+           "version": "2.1.0",
+           "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
+           "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
+           "dev": true,
+           "requires": {
 -            "execa": "0.7.0",
 -            "lcid": "1.0.0",
 -            "mem": "1.1.0"
++            "execa": "^0.7.0",
++            "lcid": "^1.0.0",
++            "mem": "^1.1.0"
+           }
+         },
+         "path-type": {
+           "version": "2.0.0",
+           "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+           "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+           "dev": true,
+           "requires": {
 -            "pify": "2.3.0"
++            "pify": "^2.0.0"
+           }
+         },
+         "read-pkg": {
+           "version": "2.0.0",
+           "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+           "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+           "dev": true,
+           "requires": {
 -            "load-json-file": "2.0.0",
 -            "normalize-package-data": "2.4.0",
 -            "path-type": "2.0.0"
++            "load-json-file": "^2.0.0",
++            "normalize-package-data": "^2.3.2",
++            "path-type": "^2.0.0"
+           }
+         },
+         "read-pkg-up": {
+           "version": "2.0.0",
+           "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+           "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+           "dev": true,
+           "requires": {
 -            "find-up": "2.1.0",
 -            "read-pkg": "2.0.0"
++            "find-up": "^2.0.0",
++            "read-pkg": "^2.0.0"
+           }
+         },
+         "source-map": {
+           "version": "0.6.1",
+           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+           "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+           "dev": true
+         },
+         "strip-bom": {
+           "version": "3.0.0",
+           "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+           "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+           "dev": true
+         },
+         "which-module": {
+           "version": "2.0.0",
+           "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+           "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+           "dev": true
+         },
+         "yargs": {
+           "version": "9.0.1",
+           "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz",
+           "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=",
+           "dev": true,
+           "requires": {
 -            "camelcase": "4.1.0",
 -            "cliui": "3.2.0",
 -            "decamelize": "1.2.0",
 -            "get-caller-file": "1.0.2",
 -            "os-locale": "2.1.0",
 -            "read-pkg-up": "2.0.0",
 -            "require-directory": "2.1.1",
 -            "require-main-filename": "1.0.1",
 -            "set-blocking": "2.0.0",
 -            "string-width": "2.1.1",
 -            "which-module": "2.0.0",
 -            "y18n": "3.2.1",
 -            "yargs-parser": "7.0.0"
++            "camelcase": "^4.1.0",
++            "cliui": "^3.2.0",
++            "decamelize": "^1.1.1",
++            "get-caller-file": "^1.0.1",
++            "os-locale": "^2.0.0",
++            "read-pkg-up": "^2.0.0",
++            "require-directory": "^2.1.1",
++            "require-main-filename": "^1.0.1",
++            "set-blocking": "^2.0.0",
++            "string-width": "^2.0.0",
++            "which-module": "^2.0.0",
++            "y18n": "^3.2.1",
++            "yargs-parser": "^7.0.0"
+           }
+         },
+         "yargs-parser": {
+           "version": "7.0.0",
+           "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
+           "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
+           "dev": true,
+           "requires": {
 -            "camelcase": "4.1.0"
++            "camelcase": "^4.1.0"
+           }
+         }
+       }
+     },
+     "@angular/core": {
+       "version": "8.0.0-beta.2",
+       "resolved": "https://registry.npmjs.org/@angular/core/-/core-8.0.0-beta.2.tgz",
+       "integrity": "sha512-Z9cmhFqLDSe6fsmnGPHnhFUG+4mMXbQ2w92Uq3g3jsduGghliCo7vV4Se/UkOHZeUVHne0nBIHbCMJJxytn9Cw==",
+       "requires": {
 -        "tslib": "1.9.3"
++        "tslib": "^1.9.0"
+       }
+     },
+     "@angular/forms": {
+       "version": "8.0.0-beta.2",
+       "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-8.0.0-beta.2.tgz",
+       "integrity": "sha512-gewuklnd+OCe7bHTUoOyq/mgH45td2nT+FN+AbX2XhGrfEeXm5YaaRj6L5kNQeykm397nIfNko3k4U52rY688Q==",
+       "requires": {
 -        "tslib": "1.9.3"
++        "tslib": "^1.9.0"
+       }
+     },
+     "@angular/http": {
+       "version": "8.0.0-beta.2",
+       "resolved": "https://registry.npmjs.org/@angular/http/-/http-8.0.0-beta.2.tgz",
+       "integrity": "sha512-4wlMlwTNSxT+5bjcdisXVhxs/s6gZWXsqNH4kW0Rmuxl9GW5fL8PABXyP8MZKnETfGEV6OQPeGeqLFbaNX4bcg==",
+       "requires": {
 -        "tslib": "1.9.3"
++        "tslib": "^1.9.0"
+       }
+     },
+     "@angular/material": {
+       "version": "6.4.7",
+       "resolved": "https://registry.npmjs.org/@angular/material/-/material-6.4.7.tgz",
+       "integrity": "sha512-SdNx7Xovi24Kw9eU6lkLhY/7f2M7L9F+/uh6XuPr4jbGgCUVVpeeVI5ztZhsZRbj1sN+/r1p5w8u62apWWl5Ww==",
+       "requires": {
 -        "parse5": "5.1.0",
 -        "tslib": "1.9.3"
++        "parse5": "^5.0.0",
++        "tslib": "^1.7.1"
+       },
+       "dependencies": {
+         "parse5": {
+           "version": "5.1.0",
+           "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz",
+           "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==",
+           "optional": true
+         }
+       }
+     },
+     "@angular/material-moment-adapter": {
+       "version": "5.2.5",
+       "resolved": "https://registry.npmjs.org/@angular/material-moment-adapter/-/material-moment-adapter-5.2.5.tgz",
+       "integrity": "sha512-6h1JXjIdI5jzNLbr+A/oml9eXLtCYxLX/BUc+ulv6tqQsLhsT4oCUys5EssvaC98ExY+v1i+9LnsK9K6VX0ZSw==",
+       "requires": {
 -        "tslib": "1.9.3"
++        "tslib": "^1.7.1"
+       }
+     },
+     "@angular/platform-browser": {
+       "version": "8.0.0-beta.2",
+       "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-8.0.0-beta.2.tgz",
+       "integrity": "sha512-ofPx95TxTYX2Nu0Pz0UMjeTKZz3Fp1eZNdilz4tx0QplSt0BJTtjj0KfUn/3W4knNTxapgYhhy3VVS3sL52fAA==",
+       "requires": {
 -        "tslib": "1.9.3"
++        "tslib": "^1.9.0"
+       }
+     },
+     "@angular/platform-browser-dynamic": {
+       "version": "8.0.0-beta.2",
+       "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-8.0.0-beta.2.tgz",
+       "integrity": "sha512-DbpW7GCzf7qt6GkEHtq8hfCb7vObWatJRSDYo+A0aEcIQolIiKdqHFBvtnvRu3IHeTQ+N40mqSwB8KQ1VnOcvQ==",
+       "requires": {
 -        "tslib": "1.9.3"
++        "tslib": "^1.9.0"
+       }
+     },
+     "@angular/platform-server": {
+       "version": "8.0.0-beta.2",
+       "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-8.0.0-beta.2.tgz",
+       "integrity": "sha512-2SkpaLj4HsxCrBMtW7xw3uf2gAn8PYjzRX7MXHNnjxxQtsuZgXmV34ayTHmas+cMQWqvOXvPHU6f4hUcSp/l9g==",
+       "requires": {
 -        "domino": "2.1.1",
 -        "tslib": "1.9.3",
 -        "xhr2": "0.1.4"
++        "domino": "^2.1.0",
++        "tslib": "^1.9.0",
++        "xhr2": "^0.1.4"
+       }
+     },
+     "@angular/router": {
+       "version": "8.0.0-beta.2",
+       "resolved": "https://registry.npmjs.org/@angular/router/-/router-8.0.0-beta.2.tgz",
+       "integrity": "sha512-SpPfLkcRR+ZTz8v9JOdxWIiK9xZa5FR+9mZ7378SB6jhxNNsRqk/3A51HNMV8lXgOAv6t8SCEre/b5fowqjgdA==",
+       "requires": {
 -        "tslib": "1.9.3"
++        "tslib": "^1.9.0"
+       }
+     },
+     "@ngtools/webpack": {
+       "version": "7.3.0",
+       "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-7.3.0.tgz",
+       "integrity": "sha512-U/By0Jlwy7nYwrGNtFirTg1aAsEHBL/9DhfFxPI0iu27FWiMttROuN6hmKbbnOmpbiYAVl5qTy3WXPXUIJjG1A==",
+       "dev": true,
+       "requires": {
+         "@angular-devkit/core": "7.3.0",
+         "enhanced-resolve": "4.1.0",
+         "rxjs": "6.3.3",
+         "tree-kill": "1.2.1",
+         "webpack-sources": "1.3.0"
+       },
+       "dependencies": {
+         "rxjs": {
+           "version": "6.3.3",
+           "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz",
+           "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==",
+           "dev": true,
+           "requires": {
 -            "tslib": "1.9.3"
++            "tslib": "^1.9.0"
+           }
+         }
+       }
+     },
+     "@schematics/angular": {
+       "version": "7.3.0",
+       "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-7.3.0.tgz",
+       "integrity": "sha512-fOjP/3Rz+Nqrgc+YVaiN88uhPX0FZgUjmMKgMp06lc3xmoc1ScGxoz8AF1fV50Zkvh0Etykzy1LTUczzEUJQqw==",
+       "dev": true,
+       "requires": {
+         "@angular-devkit/core": "7.3.0",
+         "@angular-devkit/schematics": "7.3.0",
+         "typescript": "3.2.2"
+       },
+       "dependencies": {
+         "typescript": {
+           "version": "3.2.2",
+           "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.2.tgz",
+           "integrity": "sha512-VCj5UiSyHBjwfYacmDuc/NOk4QQixbE+Wn7MFJuS0nRuPQbof132Pw4u53dm264O8LPc2MVsc7RJNml5szurkg==",
+           "dev": true
+         }
+       }
+     },
+     "@schematics/update": {
+       "version": "0.13.0",
+       "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.13.0.tgz",
+       "integrity": "sha512-HGpZdIL/0w46UyaxpnIAg6SBwzKfaRixHIEihmgJUqA0DG8GZUixRPr1L0YIWC1EZ81cQ+yWL85XhkKBYR+wQg==",
+       "dev": true,
+       "requires": {
+         "@angular-devkit/core": "7.3.0",
+         "@angular-devkit/schematics": "7.3.0",
+         "@yarnpkg/lockfile": "1.1.0",
+         "ini": "1.3.5",
+         "pacote": "9.4.0",
+         "rxjs": "6.3.3",
+         "semver": "5.6.0",
+         "semver-intersect": "1.4.0"
+       },
+       "dependencies": {
+         "ini": {
+           "version": "1.3.5",
+           "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+           "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+           "dev": true
+         },
+         "rxjs": {
+           "version": "6.3.3",
+           "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz",
+           "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==",
+           "dev": true,
+           "requires": {
 -            "tslib": "1.9.3"
++            "tslib": "^1.9.0"
+           }
+         },
+         "semver": {
+           "version": "5.6.0",
+           "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+           "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+           "dev": true
+         }
+       }
+     },
+     "@types/jasmine": {
+       "version": "2.5.38",
+       "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.5.38.tgz",
+       "integrity": "sha1-pDeRJMSSHU4h3lTsdGacnps1Zxc=",
+       "dev": true
+     },
+     "@types/moment-timezone": {
+       "version": "0.5.10",
+       "resolved": "https://registry.npmjs.org/@types/moment-timezone/-/moment-timezone-0.5.10.tgz",
+       "integrity": "sha512-sSFfubyYd0Z9C89/M5wZ+GJOWNTYTPhXAB2wrzmElJcQROyWTj0y1NCLSwYqovDYeFezlFE8+aopIyZTMsDVnA==",
+       "dev": true,
+       "requires": {
 -        "moment": "2.23.0"
++        "moment": ">=2.14.0"
+       }
+     },
+     "@types/node": {
+       "version": "6.0.89",
+       "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.89.tgz",
+       "integrity": "sha512-Z/67L97+6H1qJiEEHSN1SQapkWjDss1D90rAnFcQ6UxKkah9juzotK5UNEP1bDv/0lJ3NAQTnVfc/JWdgCGruA==",
+       "dev": true
+     },
+     "@types/q": {
+       "version": "0.0.32",
+       "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz",
+       "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=",
+       "dev": true
+     },
+     "@types/selenium-webdriver": {
+       "version": "2.53.42",
+       "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-2.53.42.tgz",
+       "integrity": "sha1-dMt3+2BS7a/yqJhN2v2I1BnyXKw=",
+       "dev": true
+     },
+     "@types/source-list-map": {
+       "version": "0.1.2",
+       "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz",
+       "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==",
+       "dev": true
+     },
+     "@types/webpack-sources": {
+       "version": "0.1.5",
+       "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.5.tgz",
+       "integrity": "sha512-zfvjpp7jiafSmrzJ2/i3LqOyTYTuJ7u1KOXlKgDlvsj9Rr0x7ZiYu5lZbXwobL7lmsRNtPXlBfmaUD8eU2Hu8w==",
+       "dev": true,
+       "requires": {
 -        "@types/node": "6.0.89",
 -        "@types/source-list-map": "0.1.2",
 -        "source-map": "0.6.1"
++        "@types/node": "*",
++        "@types/source-list-map": "*",
++        "source-map": "^0.6.1"
+       },
+       "dependencies": {
+         "source-map": {
+           "version": "0.6.1",
+           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+           "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+           "dev": true
+         }
+       }
+     },
+     "@webassemblyjs/ast": {
+       "version": "1.7.11",
+       "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz",
+       "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==",
+       "dev": true,
+       "requires": {
+         "@webassemblyjs/helper-module-context": "1.7.11",
+         "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+         "@webassemblyjs/wast-parser": "1.7.11"
+       }
+     },
+     "@webassemblyjs/floating-point-hex-parser": {
+       "version": "1.7.11",
+       "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz",
+       "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==",
+       "dev": true
+     },
+     "@webassemblyjs/helper-api-error": {
+       "version": "1.7.11",
+       "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz",
+       "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==",
+       "dev": true
+     },
+     "@webassemblyjs/helper-buffer": {
+       "version": "1.7.11",
+       "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz",
+       "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==",
+       "dev": true
+     },
+     "@webassemblyjs/helper-code-frame": {
+       "version": "1.7.11",
+       "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz",
+       "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==",
+       "dev": true,
+       "requires": {
+         "@webassemblyjs/wast-printer": "1.7.11"
+       }
+     },
+     "@webassemblyjs/helper-fsm": {
+       "version": "1.7.11",
+       "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz",
+       "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==",
+       "dev": true
+     },
+     "@webassemblyjs/helper-module-context": {
+       "version": "1.7.11",
+       "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz",
+       "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==",
+       "dev": true
+     },
+     "@webassemblyjs/helper-wasm-bytecode": {
+       "version": "1.7.11",
+       "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz",
+       "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==",
+       "dev": true
+     },
+     "@webassemblyjs/helper-wasm-section": {
+       "version": "1.7.11",
+       "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz",
+       "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==",
+       "dev": true,
+       "requires": {
+         "@webassemblyjs/ast": "1.7.11",
+         "@webassemblyjs/helper-buffer": "1.7.11",
+         "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+         "@webassemblyjs/wasm-gen": "1.7.11"
+       }
+     },
+     "@webassemblyjs/ieee754": {
+       "version": "1.7.11",
+       "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz",
+       "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==",
+       "dev": true,
+       "requires": {
 -        "@xtuc/ieee754": "1.2.0"
++        "@xtuc/ieee754": "^1.2.0"
+       }
+     },
+     "@webassemblyjs/leb128": {
+       "version": "1.7.11",
+       "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz",
+       "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==",
+       "dev": true,
+       "requires": {
+         "@xtuc/long": "4.2.1"
+       }
+     },
+     "@webassemblyjs/utf8": {
+       "version": "1.7.11",
+       "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz",
+       "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==",
+       "dev": true
+     },
+     "@webassemblyjs/wasm-edit": {
+       "version": "1.7.11",
+       "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz",
+       "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==",
+       "dev": true,
+       "requires": {
+         "@webassemblyjs/ast": "1.7.11",
+         "@webassemblyjs/helper-buffer": "1.7.11",
+         "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+         "@webassemblyjs/helper-wasm-section": "1.7.11",
+         "@webassemblyjs/wasm-gen": "1.7.11",
+         "@webassemblyjs/wasm-opt": "1.7.11",
+         "@webassemblyjs/wasm-parser": "1.7.11",
+         "@webassemblyjs/wast-printer": "1.7.11"
+       }
+     },
+     "@webassemblyjs/wasm-gen": {
+       "version": "1.7.11",
+       "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz",
+       "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==",
+       "dev": true,
+       "requires": {
+         "@webassemblyjs/ast": "1.7.11",
+         "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+         "@webassemblyjs/ieee754": "1.7.11",
+         "@webassemblyjs/leb128": "1.7.11",
+         "@webassemblyjs/utf8": "1.7.11"
+       }
+     },
+     "@webassemblyjs/wasm-opt": {
+       "version": "1.7.11",
+       "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz",
+       "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==",
+       "dev": true,
+       "requires": {
+         "@webassemblyjs/ast": "1.7.11",
+         "@webassemblyjs/helper-buffer": "1.7.11",
+         "@webassemblyjs/wasm-gen": "1.7.11",
+         "@webassemblyjs/wasm-parser": "1.7.11"
+       }
+     },
+     "@webassemblyjs/wasm-parser": {
+       "version": "1.7.11",
+       "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz",
+       "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==",
+       "dev": true,
+       "requires": {
+         "@webassemblyjs/ast": "1.7.11",
+         "@webassemblyjs/helper-api-error": "1.7.11",
+         "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+         "@webassemblyjs/ieee754": "1.7.11",
+         "@webassemblyjs/leb128": "1.7.11",
+         "@webassemblyjs/utf8": "1.7.11"
+       }
+     },
+     "@webassemblyjs/wast-parser": {
+       "version": "1.7.11",
+       "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz",
+       "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==",
+       "dev": true,
+       "requires": {
+         "@webassemblyjs/ast": "1.7.11",
+         "@webassemblyjs/floating-point-hex-parser": "1.7.11",
+         "@webassemblyjs/helper-api-error": "1.7.11",
+         "@webassemblyjs/helper-code-frame": "1.7.11",
+         "@webassemblyjs/helper-fsm": "1.7.11",
+         "@xtuc/long": "4.2.1"
+       }
+     },
+     "@webassemblyjs/wast-printer": {
+       "version": "1.7.11",
+       "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz",
+       "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==",
+       "dev": true,
+       "requires": {
+         "@webassemblyjs/ast": "1.7.11",
+         "@webassemblyjs/wast-parser": "1.7.11",
+         "@xtuc/long": "4.2.1"
+       }
+     },
+     "@xtuc/ieee754": {
+       "version": "1.2.0",
+       "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+       "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+       "dev": true
+     },
+     "@xtuc/long": {
+       "version": "4.2.1",
+       "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz",
+       "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==",
+       "dev": true
+     },
+     "@yarnpkg/lockfile": {
+       "version": "1.1.0",
+       "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz",
+       "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==",
+       "dev": true
+     },
+     "JSONStream": {
+       "version": "1.3.5",
+       "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
+       "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==",
+       "dev": true,
+       "requires": {
 -        "jsonparse": "1.3.1",
 -        "through": "2.3.8"
++        "jsonparse": "^1.2.0",
++        "through": ">=2.2.7 <3"
+       }
+     },
+     "abbrev": {
+       "version": "1.1.1",
+       "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+       "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+       "dev": true
+     },
+     "accepts": {
+       "version": "1.3.5",
+       "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
+       "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
+       "dev": true,
+       "requires": {
 -        "mime-types": "2.1.21",
++        "mime-types": "~2.1.18",
+         "negotiator": "0.6.1"
+       },
+       "dependencies": {
+         "mime-db": {
+           "version": "1.37.0",
+           "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
+           "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==",
+           "dev": true
+         },
+         "mime-types": {
+           "version": "2.1.21",
+           "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
+           "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
+           "dev": true,
+           "requires": {
 -            "mime-db": "1.37.0"
++            "mime-db": "~1.37.0"
+           }
+         }
+       }
+     },
+     "acorn": {
+       "version": "6.0.7",
+       "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.7.tgz",
+       "integrity": "sha512-HNJNgE60C9eOTgn974Tlp3dpLZdUr+SoxxDwPaY9J/kDNOLQTkaDgwBUXAF4SSsrAwD9RpdxuHK/EbuF+W9Ahw==",
+       "dev": true
+     },
+     "acorn-dynamic-import": {
+       "version": "4.0.0",
+       "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz",
+       "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==",
+       "dev": true
+     },
+     "adm-zip": {
+       "version": "0.4.7",
+       "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.7.tgz",
+       "integrity": "sha1-hgbCy/HEJs6MjsABdER/1Jtur8E=",
+       "dev": true
+     },
+     "after": {
+       "version": "0.8.2",
+       "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
+       "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
+       "dev": true
+     },
+     "agent-base": {
+       "version": "2.1.1",
+       "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz",
+       "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=",
+       "dev": true,
+       "requires": {
 -        "extend": "3.0.1",
 -        "semver": "5.0.3"
++        "extend": "~3.0.0",
++        "semver": "~5.0.1"
+       },
+       "dependencies": {
+         "semver": {
+           "version": "5.0.3",
+           "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz",
+           "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=",
+           "dev": true
+         }
+       }
+     },
+     "agentkeepalive": {
+       "version": "3.5.2",
+       "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz",
+       "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==",
+       "dev": true,
+       "requires": {
 -        "humanize-ms": "1.2.1"
++        "humanize-ms": "^1.2.1"
+       }
+     },
+     "ajv": {
+       "version": "6.7.0",
+       "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz",
+       "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==",
+       "dev": true,
+       "requires": {
 -        "fast-deep-equal": "2.0.1",
 -        "fast-json-stable-stringify": "2.0.0",
 -        "json-schema-traverse": "0.4.1",
 -        "uri-js": "4.2.2"
++        "fast-deep-equal": "^2.0.1",
++        "fast-json-stable-stringify": "^2.0.0",
++        "json-schema-traverse": "^0.4.1",
++        "uri-js": "^4.2.2"
+       },
+       "dependencies": {
+         "fast-deep-equal": {
+           "version": "2.0.1",
+           "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+           "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+           "dev": true
+         },
+         "json-schema-traverse": {
+           "version": "0.4.1",
+           "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+           "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+           "dev": true
+         }
+       }
+     },
+     "ajv-errors": {
+       "version": "1.0.1",
+       "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
+       "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
+       "dev": true
+     },
+     "ajv-keywords": {
+       "version": "3.3.0",
+       "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.3.0.tgz",
+       "integrity": "sha512-CMzN9S62ZOO4sA/mJZIO4S++ZM7KFWzH3PPWkveLhy4OZ9i1/VatgwWMD46w/XbGCBy7Ye0gCk+Za6mmyfKK7g==",
+       "dev": true
+     },
+     "align-text": {
+       "version": "0.1.4",
+       "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+       "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+       "dev": true,
++      "optional": true,
+       "requires": {
 -        "kind-of": "3.2.2",
 -        "longest": "1.0.1",
 -        "repeat-string": "1.6.1"
++        "kind-of": "^3.0.2",
++        "longest": "^1.0.1",
++        "repeat-string": "^1.5.2"
+       }
+     },
+     "amdefine": {
+       "version": "1.0.1",
+       "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+       "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+       "dev": true
+     },
+     "ansi-colors": {
+       "version": "3.2.3",
+       "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz",
+       "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==",
+       "dev": true
+     },
+     "ansi-escapes": {
+       "version": "3.2.0",
+       "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+       "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+       "dev": true
+     },
+     "ansi-html": {
+       "version": "0.0.7",
+       "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
+       "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=",
+       "dev": true
+     },
+     "ansi-regex": {
+       "version": "2.1.1",
+       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+       "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+       "dev": true
+     },
+     "ansi-styles": {
+       "version": "2.2.1",
+       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+       "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+       "dev": true
+     },
+     "any-promise": {
+       "version": "1.3.0",
+       "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+       "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=",
+       "dev": true
+     },
+     "anymatch": {
+       "version": "1.3.2",
+       "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
+       "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==",
+       "dev": true,
+       "requires": {
 -        "micromatch": "2.3.11",
 -        "normalize-path": "2.1.1"
++        "micromatch": "^2.1.5",
++        "normalize-path": "^2.0.0"
+       }
+     },
+     "app-root-path": {
+       "version": "2.2.1",
+       "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.2.1.tgz",
+       "integrity": "sha512-91IFKeKk7FjfmezPKkwtaRvSpnUc4gDwPAjA1YZ9Gn0q0PPeW+vbeUsZuyDwjI7+QTHhcLen2v25fi/AmhvbJA==",
+       "dev": true
+     },
+     "append-transform": {
+       "version": "0.4.0",
+       "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz",
+       "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=",
+       "dev": true,
+       "requires": {
 -        "default-require-extensions": "1.0.0"
++        "default-require-extensions": "^1.0.0"
+       }
+     },
+     "aproba": {
+       "version": "1.2.0",
+       "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+       "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+       "dev": true
+     },
+     "are-we-there-yet": {
+       "version": "1.1.4",
+       "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
+       "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
+       "dev": true,
+       "requires": {
 -        "delegates": "1.0.0",
 -        "readable-stream": "2.3.3"
++        "delegates": "^1.0.0",
++        "readable-stream": "^2.0.6"
+       }
+     },
+     "argparse": {
+       "version": "1.0.9",
+       "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
+       "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=",
+       "dev": true,
+       "requires": {
 -        "sprintf-js": "1.0.3"
++        "sprintf-js": "~1.0.2"
+       }
+     },
+     "arr-diff": {
+       "version": "2.0.0",
+       "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+       "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+       "dev": true,
+       "requires": {
 -        "arr-flatten": "1.1.0"
++        "arr-flatten": "^1.0.1"
+       }
+     },
+     "arr-flatten": {
+       "version": "1.1.0",
+       "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+       "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+       "dev": true
+     },
+     "arr-union": {
+       "version": "3.1.0",
+       "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+       "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+       "dev": true
+     },
+     "array-find-index": {
+       "version": "1.0.2",
+       "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+       "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+       "dev": true
+     },
+     "array-flatten": {
+       "version": "2.1.2",
+       "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
+       "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
+       "dev": true
+     },
+     "array-slice": {
+       "version": "0.2.3",
+       "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
+       "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
+       "dev": true
+     },
+     "array-union": {
+       "version": "1.0.2",
+       "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+       "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+       "dev": true,
+       "requires": {
 -        "array-uniq": "1.0.3"
++        "array-uniq": "^1.0.1"
+       }
+     },
+     "array-uniq": {
+       "version": "1.0.3",
+       "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+       "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+       "dev": true
+     },
+     "array-unique": {
+       "version": "0.2.1",
+       "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+       "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+       "dev": true
+     },
+     "arraybuffer.slice": {
+       "version": "0.0.6",
+       "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz",
+       "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=",
+       "dev": true
+     },
+     "arrify": {
+       "version": "1.0.1",
+       "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+       "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+       "dev": true
+     },
+     "asap": {
+       "version": "2.0.6",
+       "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+       "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
+       "dev": true,
+       "optional": true
+     },
+     "asn1": {
+       "version": "0.2.3",
+       "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+       "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
+       "dev": true
+     },
+     "asn1.js": {
+       "version": "4.10.1",
+       "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+       "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+       "dev": true,
+       "requires": {
 -        "bn.js": "4.11.8",
 -        "inherits": "2.0.3",
 -        "minimalistic-assert": "1.0.1"
++        "bn.js": "^4.0.0",
++        "inherits": "^2.0.1",
++        "minimalistic-assert": "^1.0.0"
+       }
+     },
+     "assert": {
+       "version": "1.4.1",
+       "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+       "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+       "dev": true,
+       "requires": {
+         "util": "0.10.3"
+       },
+       "dependencies": {
+         "inherits": {
+           "version": "2.0.1",
+           "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+           "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+           "dev": true
+         },
+         "util": {
+           "version": "0.10.3",
+           "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+           "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+           "dev": true,
+           "requires": {
+             "inherits": "2.0.1"
+           }
+         }
+       }
+     },
+     "assert-plus": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+       "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+       "dev": true
+     },
+     "assign-symbols": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+       "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+       "dev": true
+     },
+     "async": {
+       "version": "2.5.0",
+       "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz",
+       "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==",
+       "dev": true,
+       "requires": {
 -        "lodash": "4.17.4"
++        "lodash": "^4.14.0"
+       }
+     },
+     "async-each": {
+       "version": "1.0.1",
+       "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+       "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
+       "dev": true
+     },
+     "async-foreach": {
+       "version": "0.1.3",
+       "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
+       "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
+       "dev": true
+     },
+     "asynckit": {
+       "version": "0.4.0",
+       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+       "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+       "dev": true
+     },
+     "atob": {
+       "version": "2.1.2",
+       "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+       "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+       "dev": true
+     },
+     "autoprefixer": {
+       "version": "9.4.6",
+       "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.4.6.tgz",
+       "integrity": "sha512-Yp51mevbOEdxDUy5WjiKtpQaecqYq9OqZSL04rSoCiry7Tc5I9FEyo3bfxiTJc1DfHeKwSFCUYbBAiOQ2VGfiw==",
+       "dev": true,
+       "requires": {
 -        "browserslist": "4.4.1",
 -        "caniuse-lite": "1.0.30000935",
 -        "normalize-range": "0.1.2",
 -        "num2fraction": "1.2.2",
 -        "postcss": "7.0.14",
 -        "postcss-value-parser": "3.3.1"
++        "browserslist": "^4.4.1",
++        "caniuse-lite": "^1.0.30000929",
++        "normalize-range": "^0.1.2",
++        "num2fraction": "^1.2.2",
++        "postcss": "^7.0.13",
++        "postcss-value-parser": "^3.3.1"
+       }
+     },
+     "aws-sign2": {
+       "version": "0.7.0",
+       "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+       "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+       "dev": true
+     },
+     "aws4": {
+       "version": "1.6.0",
+       "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
+       "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
+       "dev": true
+     },
+     "babel-code-frame": {
+       "version": "6.26.0",
+       "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+       "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+       "dev": true,
+       "requires": {
 -        "chalk": "1.1.3",
 -        "esutils": "2.0.2",
 -        "js-tokens": "3.0.2"
++        "chalk": "^1.1.3",
++        "esutils": "^2.0.2",
++        "js-tokens": "^3.0.2"
+       }
+     },
+     "babel-generator": {
+       "version": "6.26.0",
+       "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz",
+       "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=",
+       "dev": true,
+       "requires": {
 -        "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.4",
 -        "source-map": "0.5.7",
 -        "trim-right": "1.0.1"
++        "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.4",
++        "source-map": "^0.5.6",
++        "trim-right": "^1.0.1"
+       },
+       "dependencies": {
+         "jsesc": {
+           "version": "1.3.0",
+           "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+           "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+           "dev": true
+         }
+       }
+     },
+     "babel-messages": {
+       "version": "6.23.0",
+       "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+       "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+       "dev": true,
+       "requires": {
 -        "babel-runtime": "6.26.0"
++        "babel-runtime": "^6.22.0"
+       }
+     },
+     "babel-runtime": {
+       "version": "6.26.0",
+       "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+       "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+       "dev": true,
+       "requires": {
 -        "core-js": "2.4.1",
 -        "regenerator-runtime": "0.11.0"
++        "core-js": "^2.4.0",
++        "regenerator-runtime": "^0.11.0"
+       }
+     },
+     "babel-template": {
+       "version": "6.26.0",
+       "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+       "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+       "dev": true,
+       "requires": {
 -        "babel-runtime": "6.26.0",
 -        "babel-traverse": "6.26.0",
 -        "babel-types": "6.26.0",
 -        "babylon": "6.18.0",
 -        "lodash": "4.17.4"
++        "babel-runtime": "^6.26.0",
++        "babel-traverse": "^6.26.0",
++        "babel-types": "^6.26.0",
++        "babylon": "^6.18.0",
++        "lodash": "^4.17.4"
+       }
+     },
+     "babel-traverse": {
+       "version": "6.26.0",
+       "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+       "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+       "dev": true,
+       "requires": {
 -        "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.2",
 -        "lodash": "4.17.4"
++        "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.8",
++        "globals": "^9.18.0",
++        "invariant": "^2.2.2",
++        "lodash": "^4.17.4"
+       }
+     },
+     "babel-types": {
+       "version": "6.26.0",
+       "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+       "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+       "dev": true,
+       "requires": {
 -        "babel-runtime": "6.26.0",
 -        "esutils": "2.0.2",
 -        "lodash": "4.17.4",
 -        "to-fast-properties": "1.0.3"
++        "babel-runtime": "^6.26.0",
++        "esutils": "^2.0.2",
++        "lodash": "^4.17.4",
++        "to-fast-properties": "^1.0.3"
+       }
+     },
+     "babylon": {
+       "version": "6.18.0",
+       "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+       "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+       "dev": true
+     },
+     "backo2": {
+       "version": "1.0.2",
+       "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
+       "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
+       "dev": true
+     },
+     "base": {
+       "version": "0.11.2",
+       "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+       "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+       "dev": true,
+       "requires": {
 -        "cache-base": "1.0.1",
 -        "class-utils": "0.3.6",
 -        "component-emitter": "1.2.1",
 -        "define-property": "1.0.0",
 -        "isobject": "3.0.1",
 -        "mixin-deep": "1.3.1",
 -        "pascalcase": "0.1.1"
++        "cache-base": "^1.0.1",
++        "class-utils": "^0.3.5",
++        "component-emitter": "^1.2.1",
++        "define-property": "^1.0.0",
++        "isobject": "^3.0.1",
++        "mixin-deep": "^1.2.0",
++        "pascalcase": "^0.1.1"
+       },
+       "dependencies": {
+         "component-emitter": {
+           "version": "1.2.1",
+           "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+           "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+           "dev": true
+         },
+         "define-property": {
+           "version": "1.0.0",
+           "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+           "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+           "dev": true,
+           "requires": {
 -            "is-descriptor": "1.0.2"
++            "is-descriptor": "^1.0.0"
+           }
+         },
+         "is-accessor-descriptor": {
+           "version": "1.0.0",
+           "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+           "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+           "dev": true,
+           "requires": {
 -            "kind-of": "6.0.2"
++            "kind-of": "^6.0.0"
+           }
+         },
+         "is-data-descriptor": {
+           "version": "1.0.0",
+           "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+           "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+           "dev": true,
+           "requires": {
 -            "kind-of": "6.0.2"
++            "kind-of": "^6.0.0"
+           }
+         },
+         "is-descriptor": {
+           "version": "1.0.2",
+           "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+           "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+           "dev": true,
+           "requires": {
 -            "is-accessor-descriptor": "1.0.0",
 -            "is-data-descriptor": "1.0.0",
 -            "kind-of": "6.0.2"
++            "is-accessor-descriptor": "^1.0.0",
++            "is-data-descriptor": "^1.0.0",
++            "kind-of": "^6.0.2"
+           }
+         },
+         "isobject": {
+           "version": "3.0.1",
+           "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+           "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+           "dev": true
+         },
+         "kind-of": {
+           "version": "6.0.2",
+           "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+           "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+           "dev": true
+         }
+       }
+     },
+     "base64-arraybuffer": {
+       "version": "0.1.5",
+       "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
+       "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=",
+       "dev": true
+     },
+     "base64-js": {
+       "version": "1.3.0",
+       "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
+       "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
+       "dev": true
+     },
+     "base64id": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
+       "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=",
+       "dev": true
+     },
+     "batch": {
+       "version": "0.6.1",
+       "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+       "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
+       "dev": true
+     },
+     "bcrypt-pbkdf": {
+       "version": "1.0.1",
+       "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+       "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+       "dev": true,
+       "optional": true,
+       "requires": {
 -        "tweetnacl": "0.14.5"
++        "tweetnacl": "^0.14.3"
+       }
+     },
+     "better-assert": {
+       "version": "1.0.2",
+       "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
+       "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
+       "dev": true,
+       "requires": {
+         "callsite": "1.0.0"
+       }
+     },
+     "big.js": {
+       "version": "5.2.2",
+       "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+       "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+       "dev": true
+     },
+     "binary-extensions": {
+       "version": "1.10.0",
+       "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz",
+       "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=",
+       "dev": true
+     },
+     "blob": {
+       "version": "0.0.4",
+       "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz",
+       "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=",
+       "dev": true
+     },
+     "block-stream": {
+       "version": "0.0.9",
+       "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
+       "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+       "dev": true,
+       "requires": {
 -        "inherits": "2.0.3"
++        "inherits": "~2.0.0"
+       }
+     },
+     "blocking-proxy": {
+       "version": "0.0.5",
+       "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-0.0.5.tgz",
+       "integrity": "sha1-RikF4Nz76pcPQao3Ij3anAexkSs=",
+       "dev": true,
+       "requires": {
 -        "minimist": "1.2.0"
++        "minimist": "^1.2.0"
+       }
+     },
+     "bluebird": {
+       "version": "3.5.1",
+       "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
+       "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==",
+       "dev": true
+     },
+     "bn.js": {
+       "version": "4.11.8",
+       "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+       "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+       "dev": true
+     },
+     "body-parser": {
+       "version": "1.18.2",
+       "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz",
+       "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
+       "dev": true,
+       "requires": {
+         "bytes": "3.0.0",
 -        "content-type": "1.0.4",
++        "content-type": "~1.0.4",
+         "debug": "2.6.9",
 -        "depd": "1.1.1",
 -        "http-errors": "1.6.2",
++        "depd": "~1.1.1",
++        "http-errors": "~1.6.2",
+         "iconv-lite": "0.4.19",
 -        "on-finished": "2.3.0",
++        "on-finished": "~2.3.0",
+         "qs": "6.5.1",
+         "raw-body": "2.3.2",
 -        "type-is": "1.6.15"
++        "type-is": "~1.6.15"
+       }
+     },
+     "bonjour": {
+       "version": "3.5.0",
+       "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
+       "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
+       "dev": true,
+       "requires": {
 -        "array-flatten": "2.1.2",
 -        "deep-equal": "1.0.1",
 -        "dns-equal": "1.0.0",
 -        "dns-txt": "2.0.2",
 -        "multicast-dns": "6.2.3",
 -        "multicast-dns-service-types": "1.1.0"
++        "array-flatten": "^2.1.0",
++        "deep-equal": "^1.0.1",
++        "dns-equal": "^1.0.0",
++        "dns-txt": "^2.0.2",
++        "multicast-dns": "^6.0.1",
++        "multicast-dns-service-types": "^1.1.0"
+       }
+     },
+     "boom": {
+       "version": "4.3.1",
+       "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz",
+       "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
+       "dev": true,
+       "requires": {
 -        "hoek": "4.2.0"
++        "hoek": "4.x.x"
+       }
+     },
+     "brace-expansion": {
+       "version": "1.1.8",
+       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+       "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+       "dev": true,
+       "requires": {
 -        "balanced-match": "1.0.0",
++        "balanced-match": "^1.0.0",
+         "concat-map": "0.0.1"
+       },
+       "dependencies": {
+         "balanced-match": {
+           "version": "1.0.0",
+           "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+           "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+           "dev": true
+         }
+       }
+     },
+     "braces": {
+       "version": "1.8.5",
+       "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+       "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+       "dev": true,
+       "requires": {
 -        "expand-range": "1.8.2",
 -        "preserve": "0.2.0",
 -        "repeat-element": "1.1.2"
++        "expand-range": "^1.8.1",
++        "preserve": "^0.2.0",
++        "repeat-element": "^1.1.2"
+       }
+     },
+     "brorand": {
+       "version": "1.1.0",
+       "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+       "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+       "dev": true
+     },
+     "browserify-aes": {
+       "version": "1.2.0",
+       "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+       "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+       "dev": true,
+       "requires": {
 -        "buffer-xor": "1.0.3",
 -        "cipher-base": "1.0.4",
 -        "create-hash": "1.2.0",
 -        "evp_bytestokey": "1.0.3",
 -        "inherits": "2.0.3",
 -        "safe-buffer": "5.1.1"
++        "buffer-xor": "^1.0.3",
++        "cipher-base": "^1.0.0",
++        "create-hash": "^1.1.0",
++        "evp_bytestokey": "^1.0.3",
++        "inherits": "^2.0.1",
++        "safe-buffer": "^5.0.1"
+       }
+     },
+     "browserify-cipher": {
+       "version": "1.0.1",
+       "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+       "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+       "dev": true,
+       "requires": {
 -        "browserify-aes": "1.2.0",
 -        "browserify-des": "1.0.2",
 -        "evp_bytestokey": "1.0.3"
++        "browserify-aes": "^1.0.4",
++        "browserify-des": "^1.0.0",
++        "evp_bytestokey": "^1.0.0"
+       }
+     },
+     "browserify-des": {
+       "version": "1.0.2",
+       "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+       "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+       "dev": true,
+       "requires": {
 -        "cipher-base": "1.0.4",
 -        "des.js": "1.0.0",
 -        "inherits": "2.0.3",
 -        "safe-buffer": "5.1.2"
++        "cipher-base": "^1.0.1",
++        "des.js": "^1.0.0",
++        "inherits": "^2.0.1",
++        "safe-buffer": "^5.1.2"
+       },
+       "dependencies": {
+         "safe-buffer": {
+           "version": "5.1.2",
+           "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+           "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+           "dev": true
+         }
+       }
+     },
+     "browserify-rsa": {
+       "version": "4.0.1",
+       "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+       "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+       "dev": true,
+       "requires": {
 -        "bn.js": "4.11.8",
 -        "randombytes": "2.0.6"
++        "bn.js": "^4.1.0",
++        "randombytes": "^2.0.1"
+       }
+     },
+     "browserify-sign": {
+       "version": "4.0.4",
+       "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+       "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+       "dev": true,
+       "requires": {
 -        "bn.js": "4.11.8",
 -        "browserify-rsa": "4.0.1",
 -        "create-hash": "1.2.0",
 -        "create-hmac": "1.1.7",
 -        "elliptic": "6.4.1",
 -        "inherits": "2.0.3",
 -        "parse-asn1": "5.1.3"
++        "bn.js": "^4.1.1",
++        "browserify-rsa": "^4.0.0",
++        "create-hash": "^1.1.0",
++        "create-hmac": "^1.1.2",
++        "elliptic": "^6.0.0",
++        "inherits": "^2.0.1",
++        "parse-asn1": "^5.0.0"
+       }
+     },
+     "browserify-zlib": {
+       "version": "0.2.0",
+       "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+       "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+       "dev": true,
+       "requires": {
 -        "pako": "1.0.8"
++        "pako": "~1.0.5"
+       }
+     },
+     "browserslist": {
+       "version": "4.4.1",
+       "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.1.tgz",
+       "integrity": "sha512-pEBxEXg7JwaakBXjATYw/D1YZh4QUSCX/Mnd/wnqSRPPSi1U39iDhDoKGoBUcraKdxDlrYqJxSI5nNvD+dWP2A==",
+       "dev": true,
+       "requires": {
 -        "caniuse-lite": "1.0.30000935",
 -        "electron-to-chromium": "1.3.113",
 -        "node-releases": "1.1.7"
++        "caniuse-lite": "^1.0.30000929",
++        "electron-to-chromium": "^1.3.103",
++        "node-releases": "^1.1.3"
+       }
+     },
+     "buffer": {
+       "version": "4.9.1",
+       "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
+       "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+       "dev": true,
+       "requires": {
 -        "base64-js": "1.3.0",
 -        "ieee754": "1.1.12",
 -        "isarray": "1.0.0"
++        "base64-js": "^1.0.2",
++        "ieee754": "^1.1.4",
++        "isarray": "^1.0.0"
+       }
+     },
+     "buffer-from": {
+       "version": "1.1.1",
+       "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+       "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
+       "dev": true
+     },
+     "buffer-indexof": {
+       "version": "1.1.1",
+       "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
+       "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==",
+       "dev": true
+     },
+     "buffer-xor": {
+       "version": "1.0.3",
+       "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+       "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+       "dev": true
+     },
+     "builtin-modules": {
+       "version": "1.1.1",
+       "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+       "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+       "dev": true
+     },
+     "builtin-status-codes": {
+       "version": "3.0.0",
+       "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+       "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
+       "dev": true
+     },
+     "builtins": {
+       "version": "1.0.3",
+       "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz",
+       "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=",
+       "dev": true
+     },
+     "bytes": {
+       "version": "3.0.0",
+       "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+       "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+       "dev": true
+     },
+     "cacache": {
+       "version": "11.3.2",
+       "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz",
+       "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==",
+       "dev": true,
+       "requires": {
 -        "bluebird": "3.5.3",
 -        "chownr": "1.1.1",
 -        "figgy-pudding": "3.5.1",
 -        "glob": "7.1.3",
 -        "graceful-fs": "4.1.15",
 -        "lru-cache": "5.1.1",
 -        "mississippi": "3.0.0",
 -        "mkdirp": "0.5.1",
 -        "move-concurrently": "1.0.1",
 -        "promise-inflight": "1.0.1",
 -        "rimraf": "2.6.2",
 -        "ssri": "6.0.1",
 -        "unique-filename": "1.1.1",
 -        "y18n": "4.0.0"
++        "bluebird": "^3.5.3",
++        "chownr": "^1.1.1",
++        "figgy-pudding": "^3.5.1",
++        "glob": "^7.1.3",
++        "graceful-fs": "^4.1.15",
++        "lru-cache": "^5.1.1",
++        "mississippi": "^3.0.0",
++        "mkdirp": "^0.5.1",
++        "move-concurrently": "^1.0.1",
++        "promise-inflight": "^1.0.1",
++        "rimraf": "^2.6.2",
++        "ssri": "^6.0.1",
++        "unique-filename": "^1.1.1",
++        "y18n": "^4.0.0"
+       },
+       "dependencies": {
+         "bluebird": {
+           "version": "3.5.3",
+           "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz",
+           "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==",
+           "dev": true
+         },
+         "glob": {
+           "version": "7.1.3",
+           "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+           "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+           "dev": true,
+           "requires": {
 -            "fs.realpath": "1.0.0",
 -            "inflight": "1.0.6",
 -            "inherits": "2.0.3",
 -            "minimatch": "3.0.4",
 -            "once": "1.4.0",
 -            "path-is-absolute": "1.0.1"
++            "fs.realpath": "^1.0.0",
++            "inflight": "^1.0.4",
++            "inherits": "2",
++            "minimatch": "^3.0.4",
++            "once": "^1.3.0",
++            "path-is-absolute": "^1.0.0"
+           }
+         },
+         "graceful-fs": {
+           "version": "4.1.15",
+           "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+           "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
+           "dev": true
+         },
+         "lru-cache": {
+           "version": "5.1.1",
+           "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+           "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+           "dev": true,
+           "requires": {
 -            "yallist": "3.0.3"
++            "yallist": "^3.0.2"
+           }
+         },
+         "y18n": {
+           "version": "4.0.0",
+           "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+           "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
+           "dev": true
+         },
+         "yallist": {
+           "version": "3.0.3",
+           "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+           "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+           "dev": true
+         }
+       }
+     },
+     "cache-base": {
+       "version": "1.0.1",
+       "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+       "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+       "dev": true,
+       "requires": {
 -        "collection-visit": "1.0.0",
 -        "component-emitter": "1.2.1",
 -        "get-value": "2.0.6",
 -        "has-value": "1.0.0",
 -        "isobject": "3.0.1",
 -        "set-value": "2.0.0",
 -        "to-object-path": "0.3.0",
 -        "union-value": "1.0.0",
 -        "unset-value": "1.0.0"
++        "collection-visit": "^1.0.0",
++        "component-emitter": "^1.2.1",
++        "get-value": "^2.0.6",
++        "has-value": "^1.0.0",
++        "isobject": "^3.0.1",
++        "set-value": "^2.0.0",
++        "to-object-path": "^0.3.0",
++        "union-value": "^1.0.0",
++        "unset-value": "^1.0.0"
+       },
+       "dependencies": {
+         "component-emitter": {
+           "version": "1.2.1",
+           "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+           "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+           "dev": true
+         },
+         "isobject": {
+           "version": "3.0.1",
+           "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+           "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+           "dev": true
+         }
+       }
+     },
+     "callsite": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
+       "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
+       "dev": true
+     },
+     "camelcase": {
+       "version": "2.1.1",
+       "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+       "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+       "dev": true
+     },
+     "camelcase-keys": {
+       "version": "2.1.0",
+       "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+       "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+       "dev": true,
+       "requires": {
 -        "camelcase": "2.1.1",
 -        "map-obj": "1.0.1"
++        "camelcase": "^2.0.0",
++        "map-obj": "^1.0.0"
+       }
+     },
+     "caniuse-lite": {
+       "version": "1.0.30000935",
+       "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000935.tgz",
+       "integrity": "sha512-1Y2uJ5y56qDt3jsDTdBHL1OqiImzjoQcBG6Yl3Qizq8mcc2SgCFpi+ZwLLqkztYnk9l87IYqRlNBnPSOTbFkXQ==",
+       "dev": true
+     },
+     "canonical-path": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz",
+       "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==",
+       "dev": true
+     },
+     "caseless": {
+       "version": "0.12.0",
+       "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+       "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+       "dev": true
+     },
+     "center-align": {
+       "version": "0.1.3",
+       "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+       "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+       "dev": true,
+       "optional": true,
+       "requires": {
 -        "align-text": "0.1.4",
 -        "lazy-cache": "1.0.4"
++        "align-text": "^0.1.3",
++        "lazy-cache": "^1.0.3"
+       }
+     },
+     "chalk": {
+       "version": "1.1.3",
+       "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+       "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+       "dev": true,
+       "requires": {
 -        "ansi-styles": "2.2.1",
 -        "escape-string-regexp": "1.0.5",
 -        "has-ansi": "2.0.0",
 -        "strip-ansi": "3.0.1",
 -        "supports-color": "2.0.0"
++        "ansi-styles": "^2.2.1",
++        "escape-string-regexp": "^1.0.2",
++        "has-ansi": "^2.0.0",
++        "strip-ansi": "^3.0.0",
++        "supports-color": "^2.0.0"
+       },
+       "dependencies": {
+         "supports-color": {
+           "version": "2.0.0",
+           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+           "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+           "dev": true
+         }
+       }
+     },
+     "chardet": {
+       "version": "0.7.0",
+       "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+       "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
+       "dev": true
+     },
+     "chokidar": {
+       "version": "1.7.0",
+       "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
+       "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
+       "dev": true,
+       "requires": {
 -        "anymatch": "1.3.2",
 -        "async-each": "1.0.1",
 -        "fsevents": "1.1.2",
 -        "glob-parent": "2.0.0",
 -        "inherits": "2.0.3",
 -        "is-binary-path": "1.0.1",
 -        "is-glob": "2.0.1",
 -        "path-is-absolute": "1.0.1",
 -        "readdirp": "2.1.0"
++        "anymatch": "^1.3.0",
++        "async-each": "^1.0.0",
++        "fsevents": "^1.0.0",
++        "glob-parent": "^2.0.0",
++        "inherits": "^2.0.1",
++        "is-binary-path": "^1.0.0",
++        "is-glob": "^2.0.0",
++        "path-is-absolute": "^1.0.0",
++        "readdirp": "^2.0.0"
+       }
+     },
+     "chownr": {
+       "version": "1.1.1",
+       "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
+       "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==",
+       "dev": true
+     },
+     "chrome-trace-event": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz",
+       "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==",
+       "dev": true,
+       "requires": {
 -        "tslib": "1.9.3"
++        "tslib": "^1.9.0"
+       }
+     },
+     "cipher-base": {
+       "version": "1.0.4",
+       "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+       "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+       "dev": true,
+       "requires": {
 -        "inherits": "2.0.3",
 -        "safe-buffer": "5.1.1"
++        "inherits": "^2.0.1",
++        "safe-buffer": "^5.0.1"
+       }
+     },
+     "circular-dependency-plugin": {
+       "version": "5.0.2",
+       "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.0.2.tgz",
+       "integrity": "sha512-oC7/DVAyfcY3UWKm0sN/oVoDedQDQiw/vIiAnuTWTpE5s0zWf7l3WY417Xw/Fbi/QbAjctAkxgMiS9P0s3zkmA==",
+       "dev": true
+     },
+     "class-utils": {
+       "version": "0.3.6",
+       "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+       "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+       "dev": true,
+       "requires": {
 -        "arr-union": "3.1.0",
 -        "define-property": "0.2.5",
 -        "isobject": "3.0.1",
 -        "static-extend": "0.1.2"
++        "arr-union": "^3.1.0",
++        "define-property": "^0.2.5",
++        "isobject": "^3.0.0",
++        "static-extend": "^0.1.1"
+       },
+       "dependencies": {
+         "define-property": {
+           "version": "0.2.5",
+           "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+           "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+           "dev": true,
+           "requires": {
 -            "is-descriptor": "0.1.6"
++            "is-descriptor": "^0.1.0"
+           }
+         },
+         "isobject": {
+           "version": "3.0.1",
+           "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+           "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+           "dev": true
+         }
+       }
+     },
+     "clean-css": {
+       "version": "4.2.1",
+       "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz",
+       "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==",
+       "dev": true,
+       "requires": {
 -        "source-map": "0.6.1"
++        "source-map": "~0.6.0"
+       },
+       "dependencies": {
+         "source-map": {
+           "version": "0.6.1",
+           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+           "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+           "dev": true
+         }
+       }
+     },
+     "cli-cursor": {
+       "version": "2.1.0",
+       "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+       "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+       "dev": true,
+       "requires": {
 -        "restore-cursor": "2.0.0"
++        "restore-cursor": "^2.0.0"
+       }
+     },
+     "cli-width": {
+       "version": "2.2.0",
+       "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+       "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+       "dev": true
+     },
+     "cliui": {
+       "version": "3.2.0",
+       "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+       "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+       "dev": true,
+       "requires": {
 -        "string-width": "1.0.2",
 -        "strip-ansi": "3.0.1",
 -        "wrap-ansi": "2.1.0"
++        "string-width": "^1.0.1",
++        "strip-ansi": "^3.0.1",
++        "wrap-ansi": "^2.0.0"
+       },
+       "dependencies": {
+         "is-fullwidth-code-point": {
+           "version": "1.0.0",
+           "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+           "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+           "dev": true,
+           "requires": {
 -            "number-is-nan": "1.0.1"
++            "number-is-nan": "^1.0.0"
+           }
+         },
+         "string-width": {
+           "version": "1.0.2",
+           "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+           "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+           "dev": true,
+           "requires": {
 -            "code-point-at": "1.1.0",
 -            "is-fullwidth-code-point": "1.0.0",
 -            "strip-ansi": "3.0.1"
++            "code-point-at": "^1.0.0",
++            "is-fullwidth-code-point": "^1.0.0",
++            "strip-ansi": "^3.0.0"
+           }
+         }
+       }
+     },
+     "clone": {
+       "version": "2.1.2",
+       "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+       "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+       "dev": true
+     },
+     "clone-deep": {
+       "version": "2.0.2",
+       "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz",
+       "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==",
+       "dev": true,
+       "requires": {
 -        "for-own": "1.0.0",
 -        "is-plain-object": "2.0.4",
 -        "kind-of": "6.0.2",
 -        "shallow-clone": "1.0.0"
++        "for-own": "^1.0.0",
++        "is-plain-object": "^2.0.4",
++        "kind-of": "^6.0.0",
++        "shallow-clone": "^1.0.0"
+       },
+       "dependencies": {
+         "for-own": {
+           "version": "1.0.0",
+           "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+           "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+           "dev": true,
+           "requires": {
 -            "for-in": "1.0.2"
++            "for-in": "^1.0.1"
+           }
+         },
+         "kind-of": {
+           "version": "6.0.2",
+           "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+           "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+           "dev": true
+         }
+       }
+     },
+     "co": {
+       "version": "4.6.0",
+       "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+       "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+       "dev": true
+     },
+     "code-point-at": {
+       "version": "1.1.0",
+       "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+       "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+       "dev": true
+     },
+     "codelyzer": {
+       "version": "3.2.2",
+       "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-3.2.2.tgz",
+       "integrity": "sha512-VNvW9gRThsqRarEnLioiILd0Pdk0yCq/7cVgYvqHpC+3CHqfnrJfmXjoana7vzWfSis+9pODXofjCWX+nlU9Gw==",
+       "dev": true,
+       "requires": {
 -        "app-root-path": "2.2.1",
 -        "css-selector-tokenizer": "0.7.1",
 -        "cssauron": "1.4.0",
 -        "semver-dsl": "1.0.1",
 -        "source-map": "0.5.7",
 -        "sprintf-js": "1.0.3"
++        "app-root-path": "^2.0.1",
++        "css-selector-tokenizer": "^0.7.0",
++        "cssauron": "^1.4.0",
++        "semver-dsl": "^1.0.1",
++        "source-map": "^0.5.6",
++        "sprintf-js": "^1.0.3"
+       }
+     },
+     "collection-visit": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+       "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+       "dev": true,
+       "requires": {
 -        "map-visit": "1.0.0",
 -        "object-visit": "1.0.1"
++        "map-visit": "^1.0.0",
++        "object-visit": "^1.0.0"
+       }
+     },
+     "color-convert": {
+       "version": "1.9.3",
+       "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+       "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+       "dev": true,
+       "requires": {
+         "color-name": "1.1.3"
+       }
+     },
+     "color-name": {
+       "version": "1.1.3",
+       "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+       "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+       "dev": true
+     },
+     "colors": {
+       "version": "1.1.2",
+       "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+       "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
+       "dev": true
+     },
+     "combine-lists": {
+       "version": "1.0.1",
+       "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz",
+       "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=",
+       "dev": true,
+       "requires": {
 -        "lodash": "4.17.4"
++        "lodash": "^4.5.0"
+       }
+     },
+     "combined-stream": {
+       "version": "1.0.5",
+       "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
+       "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
+       "dev": true,
+       "requires": {
 -        "delayed-stream": "1.0.0"
++        "delayed-stream": "~1.0.0"
+       }
+     },
+     "commander": {
+       "version": "2.17.1",
+       "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
+       "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
+       "dev": true
+     },
+     "commondir": {
+       "version": "1.0.1",
+       "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+       "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+       "dev": true
+     },
+     "component-bind": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
+       "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=",
+       "dev": true
+     },
+     "component-emitter": {
+       "version": "1.1.2",
+       "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz",
+       "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=",
+       "dev": true
+     },
+     "component-inherit": {
+       "version": "0.0.3",
+       "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
+       "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=",
+       "dev": true
+     },
+     "compressible": {
+       "version": "2.0.15",
+       "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz",
+       "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==",
+       "dev": true,
+       "requires": {
 -        "mime-db": "1.38.0"
++        "mime-db": ">= 1.36.0 < 2"
+       },
+       "dependencies": {
+         "mime-db": {
+           "version": "1.38.0",
+           "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz",
+           "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==",
+           "dev": true
+         }
+       }
+     },
+     "compression": {
+       "version": "1.7.3",
+       "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz",
+       "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==",
+       "dev": true,
+       "requires": {
 -        "accepts": "1.3.5",
++        "accepts": "~1.3.5",
+         "bytes": "3.0.0",
 -        "compressible": "2.0.15",
++        "compressible": "~2.0.14",
+         "debug": "2.6.9",
 -        "on-headers": "1.0.1",
++        "on-headers": "~1.0.1",
+         "safe-buffer": "5.1.2",
 -        "vary": "1.1.2"
++        "vary": "~1.1.2"
+       },
+       "dependencies": {
+         "safe-buffer": {
+           "version": "5.1.2",
+           "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+           "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+           "dev": true
+         }
+       }
+     },
+     "concat-map": {
+       "version": "0.0.1",
+       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+       "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+       "dev": true
+     },
+     "concat-stream": {
+       "version": "1.6.2",
+       "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+       "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+       "dev": true,
+       "requires": {
 -        "buffer-from": "1.1.1",
 -        "inherits": "2.0.3",
 -        "readable-stream": "2.3.3",
 -        "typedarray": "0.0.6"
++        "buffer-from": "^1.0.0",
++        "inherits": "^2.0.3",
++        "readable-stream": "^2.2.2",
++        "typedarray": "^0.0.6"
+       }
+     },
+     "connect": {
+       "version": "3.6.5",
+       "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.5.tgz",
+       "integrity": "sha1-+43ee6B2OHfQ7J352sC0tA5yx9o=",
+       "dev": true,
+       "requires": {
+         "debug": "2.6.9",
+         "finalhandler": "1.0.6",
 -        "parseurl": "1.3.2",
++        "parseurl": "~1.3.2",
+         "utils-merge": "1.0.1"
+       },
+       "dependencies": {
+         "finalhandler": {
+           "version": "1.0.6",
+           "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz",
+           "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=",
+           "dev": true,
+           "requires": {
+             "debug": "2.6.9",
 -            "encodeurl": "1.0.1",
 -            "escape-html": "1.0.3",
 -            "on-finished": "2.3.0",
 -            "parseurl": "1.3.2",
 -            "statuses": "1.3.1",
 -            "unpipe": "1.0.0"
++            "encodeurl": "~1.0.1",
++            "escape-html": "~1.0.3",
++            "on-finished": "~2.3.0",
++            "parseurl": "~1.3.2",
++            "statuses": "~1.3.1",
++            "unpipe": "~1.0.0"
+           }
+         }
+       }
+     },
+     "connect-history-api-fallback": {
+       "version": "1.6.0",
+       "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
+       "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
+       "dev": true
+     },
+     "console-browserify": {
+       "version": "1.1.0",
+       "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+       "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+       "dev": true,
+       "requires": {
 -        "date-now": "0.1.4"
++        "date-now": "^0.1.4"
+       }
+     },
+     "console-control-strings": {
+       "version": "1.1.0",
+       "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+       "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+       "dev": true
+     },
+     "constants-browserify": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+       "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+       "dev": true
+     },
+     "content-disposition": {
+       "version": "0.5.2",
+       "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
+       "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=",
+       "dev": true
+     },
+     "content-type": {
+       "version": "1.0.4",
+       "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+       "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+       "dev": true
+     },
+     "convert-source-map": {
+       "version": "1.6.0",
+       "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
+       "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
+       "dev": true,
+       "requires": {
 -        "safe-buffer": "5.1.1"
++        "safe-buffer": "~5.1.1"
+       }
+     },
+     "cookie": {
+       "version": "0.3.1",
+       "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+       "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
+       "dev": true
+     },
+     "cookie-signature": {
+       "version": "1.0.6",
+       "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+       "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+       "dev": true
+     },
+     "copy-concurrently": {
+       "version": "1.0.5",
+       "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+       "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+       "dev": true,
+       "requires": {
 -        "aproba": "1.2.0",
 -        "fs-write-stream-atomic": "1.0.10",
 -        "iferr": "0.1.5",
 -        "mkdirp": "0.5.1",
 -        "rimraf": "2.6.2",
 -        "run-queue": "1.0.3"
++        "aproba": "^1.1.1",
++        "fs-write-stream-atomic": "^1.0.8",
++        "iferr": "^0.1.5",
++        "mkdirp": "^0.5.1",
++        "rimraf": "^2.5.4",
++        "run-queue": "^1.0.0"
+       }
+     },
+     "copy-descriptor": {
+       "version": "0.1.1",
+       "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+       "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+       "dev": true
+     },
+     "copy-webpack-plugin": {
+       "version": "4.6.0",
+       "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz",
+       "integrity": "sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA==",
+       "dev": true,
+       "requires": {
 -        "cacache": "10.0.4",
 -        "find-cache-dir": "1.0.0",
 -        "globby": "7.1.1",
 -        "is-glob": "4.0.0",
 -        "loader-utils": "1.2.3",
 -        "minimatch": "3.0.4",
 -        "p-limit": "1.3.0",
 -        "serialize-javascript": "1.6.1"
++        "cacache": "^10.0.4",
++        "find-cache-dir": "^1.0.0",
++        "globby": "^7.1.1",
++        "is-glob": "^4.0.0",
++        "loader-utils": "^1.1.0",
++        "minimatch": "^3.0.4",
++        "p-limit": "^1.0.0",
++        "serialize-javascript": "^1.4.0"
+       },
+       "dependencies": {
+         "cacache": {
+           "version": "10.0.4",
+           "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz",
+           "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==",
+           "dev": true,
+           "requires": {
 -            "bluebird": "3.5.1",
 -            "chownr": "1.1.1",
 -            "glob": "7.1.2",
 -            "graceful-fs": "4.1.11",
 -            "lru-cache": "4.1.1",
 -            "mississippi": "2.0.0",
 -            "mkdirp": "0.5.1",
 -            "move-concurrently": "1.0.1",
 -            "promise-inflight": "1.0.1",
 -            "rimraf": "2.6.2",
 -            "ssri": "5.3.0",
 -            "unique-filename": "1.1.1",
 -            "y18n": "4.0.0"
++            "bluebird": "^3.5.1",
++            "chownr": "^1.0.1",
++            "glob": "^7.1.2",
++            "graceful-fs": "^4.1.11",
++            "lru-cache": "^4.1.1",
++            "mississippi": "^2.0.0",
++            "mkdirp": "^0.5.1",
++            "move-concurrently": "^1.0.1",
++            "promise-inflight": "^1.0.1",
++            "rimraf": "^2.6.2",
++            "ssri": "^5.2.4",
++            "unique-filename": "^1.1.0",
++            "y18n": "^4.0.0"
+           }
+         },
+         "globby": {
+           "version": "7.1.1",
+           "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz",
+           "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
+           "dev": true,
+           "requires": {
 -            "array-union": "1.0.2",
 -            "dir-glob": "2.2.2",
 -            "glob": "7.1.2",
 -            "ignore": "3.3.10",
 -            "pify": "3.0.0",
 -            "slash": "1.0.0"
++            "array-union": "^1.0.1",
++            "dir-glob": "^2.0.0",
++            "glob": "^7.1.2",
++            "ignore": "^3.3.5",
++            "pify": "^3.0.0",
++            "slash": "^1.0.0"
+           }
+         },
+         "is-extglob": {
+           "version": "2.1.1",
+           "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+           "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+           "dev": true
+         },
+         "is-glob": {
+           "version": "4.0.0",
+           "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+           "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+           "dev": true,
+           "requires": {
 -            "is-extglob": "2.1.1"
++            "is-extglob": "^2.1.1"
+           }
+         },
+         "mississippi": {
+           "version": "2.0.0",
+           "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz",
+           "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==",
+           "dev": true,
+           "requires": {
 -            "concat-stream": "1.6.2",
 -            "duplexify": "3.7.1",
 -            "end-of-stream": "1.4.1",
 -            "flush-write-stream": "1.1.0",
 -            "from2": "2.3.0",
 -            "parallel-transform": "1.1.0",
 -            "pump": "2.0.1",
 -            "pumpify": "1.5.1",
 -            "stream-each": "1.2.3",
 -            "through2": "2.0.5"
++            "concat-stream": "^1.5.0",
++            "duplexify": "^3.4.2",
++            "end-of-stream": "^1.1.0",
++            "flush-write-stream": "^1.0.0",
++            "from2": "^2.1.0",
++            "parallel-transform": "^1.1.0",
++            "pump": "^2.0.1",
++            "pumpify": "^1.3.3",
++            "stream-each": "^1.1.0",
++            "through2": "^2.0.0"
+           }
+         },
+         "pify": {
+           "version": "3.0.0",
+           "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+           "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+           "dev": true
+         },
+         "pump": {
+           "version": "2.0.1",
+           "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+           "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+           "dev": true,
+           "requires": {
 -            "end-of-stream": "1.4.1",
 -            "once": "1.4.0"
++            "end-of-stream": "^1.1.0",
++            "once": "^1.3.1"
+           }
+         },
+         "ssri": {
+           "version": "5.3.0",
+           "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz",
+           "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==",
+           "dev": true,
+           "requires": {
 -            "safe-buffer": "5.1.1"
++            "safe-buffer": "^5.1.1"
+           }
+         },
+         "y18n": {
+           "version": "4.0.0",
+           "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+           "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
+           "dev": true
+         }
+       }
+     },
+     "core-js": {
+       "version": "2.4.1",
+       "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.4.1.tgz",
+       "integrity": "sha1-TekR5mew6ukSTjQlS1OupvxhjT4="
+     },
+     "core-util-is": {
+       "version": "1.0.2",
+       "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+       "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+       "dev": true
+     },
+     "cosmiconfig": {
+       "version": "4.0.0",
+       "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz",
+       "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==",
+       "dev": true,
+       "requires": {
 -        "is-directory": "0.3.1",
 -        "js-yaml": "3.12.1",
 -        "parse-json": "4.0.0",
 -        "require-from-string": "2.0.2"
++        "is-directory": "^0.3.1",
++        "js-yaml": "^3.9.0",
++        "parse-json": "^4.0.0",
++        "require-from-string": "^2.0.1"
+       },
+       "dependencies": {
+         "esprima": {
+           "version": "4.0.1",
+           "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+           "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+           "dev": true
+         },
+         "js-yaml": {
+           "version": "3.12.1",
+           "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz",
+           "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==",
+           "dev": true,
+           "requires": {
 -            "argparse": "1.0.9",
 -            "esprima": "4.0.1"
++            "argparse": "^1.0.7",
++            "esprima": "^4.0.0"
+           }
+         },
+         "parse-json": {
+           "version": "4.0.0",
+           "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+           "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+           "dev": true,
+           "requires": {
 -            "error-ex": "1.3.1",
 -            "json-parse-better-errors": "1.0.2"
++            "error-ex": "^1.3.1",
++            "json-parse-better-errors": "^1.0.1"
+           }
+         }
+       }
+     },
+     "create-ecdh": {
+       "version": "4.0.3",
+       "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
+       "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
+       "dev": true,
+       "requires": {
 -        "bn.js": "4.11.8",
 -        "elliptic": "6.4.1"
++        "bn.js": "^4.1.0",
++        "elliptic": "^6.0.0"
+       }
+     },
+     "create-hash": {
+       "version": "1.2.0",
+       "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+       "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+       "dev": true,
+       "requires": {
 -        "cipher-base": "1.0.4",
 -        "inherits": "2.0.3",
 -        "md5.js": "1.3.5",
 -        "ripemd160": "2.0.2",
 -        "sha.js": "2.4.11"
++        "cipher-base": "^1.0.1",
++        "inherits": "^2.0.1",
++        "md5.js": "^1.3.4",
++        "ripemd160": "^2.0.1",
++        "sha.js": "^2.4.0"
+       }
+     },
+     "create-hmac": {
+       "version": "1.1.7",
+       "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+       "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+       "dev": true,
+       "requires": {
 -        "cipher-base": "1.0.4",
 -        "create-hash": "1.2.0",
 -        "inherits": "2.0.3",
 -        "ripemd160": "2.0.2",
 -        "safe-buffer": "5.1.1",
 -        "sha.js": "2.4.11"
++        "cipher-base": "^1.0.3",
++        "create-hash": "^1.1.0",
++        "inherits": "^2.0.1",
++        "ripemd160": "^2.0.0",
++        "safe-buffer": "^5.0.1",
++        "sha.js": "^2.4.8"
+       }
+     },
+     "cross-spawn": {
+       "version": "3.0.1",
+       "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
+       "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
+       "dev": true,
+       "requires": {
 -        "lru-cache": "4.1.1",
 -        "which": "1.3.0"
++        "lru-cache": "^4.0.1",
++        "which": "^1.2.9"
+       }
+     },
+     "cryptiles": {
+       "version": "3.1.2",
+       "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz",
+       "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=",
+       "dev": true,
+       "requires": {
 -        "boom": "5.2.0"
++        "boom": "5.x.x"
+       },
+       "dependencies": {
+         "boom": {
+           "version": "5.2.0",
+           "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz",
+           "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
+           "dev": true,
+           "requires": {
 -            "hoek": "4.2.0"
++            "hoek": "4.x.x"
+           }
+         }
+       }
+     },
+     "crypto-browserify": {
+       "version": "3.12.0",
+       "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+       "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+       "dev": true,
+       "requires": {
 -        "browserify-cipher": "1.0.1",
 -        "browserify-sign": "4.0.4",
 -        "create-ecdh": "4.0.3",
 -        "create-hash": "1.2.0",
 -        "create-hmac": "1.1.7",
 -        "diffie-hellman": "5.0.3",
 -        "inherits": "2.0.3",
 -        "pbkdf2": "3.0.17",
 -        "public-encrypt": "4.0.3",
 -        "randombytes": "2.0.6",
 -        "randomfill": "1.0.4"
++        "browserify-cipher": "^1.0.0",
++        "browserify-sign": "^4.0.0",
++        "create-ecdh": "^4.0.0",
++        "create-hash": "^1.1.0",
++        "create-hmac": "^1.1.0",
++        "diffie-hellman": "^5.0.0",
++        "inherits": "^2.0.1",
++        "pbkdf2": "^3.0.3",
++        "public-encrypt": "^4.0.0",
++        "randombytes": "^2.0.0",
++        "randomfill": "^1.0.3"
+       }
+     },
+     "css-parse": {
+       "version": "1.7.0",
+       "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz",
+       "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=",
+       "dev": true
+     },
+     "css-selector-tokenizer": {
+       "version": "0.7.1",
+       "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz",
+       "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==",
+       "dev": true,
+       "requires": {
 -        "cssesc": "0.1.0",
 -        "fastparse": "1.1.2",
 -        "regexpu-core": "1.0.0"
++        "cssesc": "^0.1.0",
++        "fastparse": "^1.1.1",
++        "regexpu-core": "^1.0.0"
+       }
+     },
+     "cssauron": {
+       "version": "1.4.0",
+       "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz",
+       "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=",
+       "dev": true,
+       "requires": {
 -        "through": "2.3.8"
++        "through": "X.X.X"
+       }
+     },
+     "cssesc": {
+       "version": "0.1.0",
+       "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz",
+       "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=",
+       "dev": true
+     },
+     "currently-unhandled": {
+       "version": "0.4.1",
+       "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+       "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+       "dev": true,
+       "requires": {
 -        "array-find-index": "1.0.2"
++        "array-find-index": "^1.0.1"
+       }
+     },
+     "custom-event": {
+       "version": "1.0.1",
+       "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz",
+       "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=",
+       "dev": true
+     },
+     "cyclist": {
+       "version": "0.2.2",
+       "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz",
+       "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=",
+       "dev": true
+     },
+     "dashdash": {
+       "version": "1.14.1",
+       "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+       "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+       "dev": true,
+       "requires": {
 -        "assert-plus": "1.0.0"
++        "assert-plus": "^1.0.0"
+       }
+     },
+     "date-fns": {
+       "version": "1.30.1",
+       "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz",
+       "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw=="
+     },
+     "date-now": {
+       "version": "0.1.4",
+       "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+       "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
+       "dev": true
+     },
+     "debug": {
+       "version": "2.6.9",
+       "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+       "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+       "dev": true,
+       "requires": {
+         "ms": "2.0.0"
+       }
+     },
+     "decamelize": {
+       "version": "1.2.0",
+       "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+       "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+       "dev": true
+     },
+     "decode-uri-component": {
+       "version": "0.2.0",
+       "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+       "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+       "dev": true
+     },
+     "deep-equal": {
+       "version": "1.0.1",
+       "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
+       "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=",
+       "dev": true
+     },
+     "deep-is": {
+       "version": "0.1.3",
+       "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+       "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+       "dev": true
+     },
+     "default-gateway": {
+       "version": "2.7.2",
+       "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-2.7.2.tgz",
+       "integrity": "sha512-lAc4i9QJR0YHSDFdzeBQKfZ1SRDG3hsJNEkrpcZa8QhBfidLAilT60BDEIVUUGqosFp425KOgB3uYqcnQrWafQ==",
+       "dev": true,
+       "requires": {
 -        "execa": "0.10.0",
 -        "ip-regex": "2.1.0"
++        "execa": "^0.10.0",
++        "ip-regex": "^2.1.0"
+       }
+     },
+     "default-require-extensions": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz",
+       "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=",
+       "dev": true,
+       "requires": {
 -        "strip-bom": "2.0.0"
++        "strip-bom": "^2.0.0"
+       }
+     },
+     "define-property": {
+       "version": "2.0.2",
+       "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+       "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+       "dev": true,
+       "requires": {
 -        "is-descriptor": "1.0.2",
 -        "isobject": "3.0.1"
++        "is-descriptor": "^1.0.2",
++        "isobject": "^3.0.1"
+       },
+       "dependencies": {
+         "is-accessor-descriptor": {
+           "version": "1.0.0",
+           "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+           "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+           "dev": true,
+           "requires": {
 -            "kind-of": "6.0.2"
++            "kind-of": "^6.0.0"
+           }
+         },
+         "is-data-descriptor": {
+           "version": "1.0.0",
+           "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+           "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+           "dev": true,
+           "requires": {
 -            "kind-of": "6.0.2"
++            "kind-of": "^6.0.0"
+           }
+         },
+         "is-descriptor": {
+           "version": "1.0.2",
+           "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+           "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+           "dev": true,
+           "requires": {
 -            "is-accessor-descriptor": "1.0.0",
 -            "is-data-descriptor": "1.0.0",
 -            "kind-of": "6.0.2"
++            "is-accessor-descriptor": "^1.0.0",
++            "is-data-descriptor": "^1.0.0",
++            "kind-of": "^6.0.2"
+           }
+         },
+         "isobject": {
+           "version": "3.0.1",
+           "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+           "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+           "dev": true
+         },
+         "kind-of": {
+           "version": "6.0.2",
+           "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+           "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+           "dev": true
+         }
+       }
+     },
+     "del": {
+       "version": "2.2.2",
+       "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
+       "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
+       "dev": true,
+       "requires": {
 -        "globby": "5.0.0",
 -        "is-path-cwd": "1.0.0",
 -        "is-path-in-cwd": "1.0.0",
 -        "object-assign": "4.1.1",
 -        "pify": "2.3.0",
 -        "pinkie-promise": "2.0.1",
 -        "rimraf": "2.6.2"
++        "globby": "^5.0.0",
++        "is-path-cwd": "^1.0.0",
++        "is-path-in-cwd": "^1.0.0",
++        "object-assign": "^4.0.1",
++        "pify": "^2.0.0",
++        "pinkie-promise": "^2.0.0",
++        "rimraf": "^2.2.8"
+       }
+     },
+     "delayed-stream": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+       "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+       "dev": true
+     },
+     "delegates": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+       "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+       "dev": true
+     },
+     "depd": {
+       "version": "1.1.1",
+       "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
+       "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=",
+       "dev": true
+     },
+     "dependency-graph": {
+       "version": "0.7.2",
+       "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.7.2.tgz",
+       "integrity": "sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ==",
+       "dev": true
+     },
+     "des.js": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
+       "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+       "dev": true,
+       "requires": {
 -        "inherits": "2.0.3",
 -        "minimalistic-assert": "1.0.1"
++        "inherits": "^2.0.1",
++        "minimalistic-assert": "^1.0.0"
+       }
+     },
+     "destroy": {
+       "version": "1.0.4",
+       "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+       "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+       "dev": true
+     },
+     "detect-indent": {
+       "version": "4.0.0",
+       "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+       "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+       "dev": true,
+       "requires": {
 -        "repeating": "2.0.1"
++        "repeating": "^2.0.0"
+       }
+     },
+     "detect-node": {
+       "version": "2.0.4",
+       "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
+       "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==",
+       "dev": true
+     },
+     "di": {
+       "version": "0.0.1",
+       "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz",
+       "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=",
+       "dev": true
+     },
+     "diff": {
+       "version": "3.4.0",
+       "resolved": "https://registry.npmjs.org/diff/-/diff-3.4.0.tgz",
+       "integrity": "sha512-QpVuMTEoJMF7cKzi6bvWhRulU1fZqZnvyVQgNhPaxxuTYwyjn/j1v9falseQ/uXWwPnO56RBfwtg4h/EQXmucA==",
+       "dev": true
+     },
+     "diffie-hellman": {
+       "version": "5.0.3",
+       "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+       "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+       "dev": true,
+       "requires": {
 -        "bn.js": "4.11.8",
 -        "miller-rabin": "4.0.1",
 -        "randombytes": "2.0.6"
++        "bn.js": "^4.1.0",
++        "miller-rabin": "^4.0.0",
++        "randombytes": "^2.0.0"
+       }
+     },
+     "dir-glob": {
+       "version": "2.2.2",
+       "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
+       "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==",
+       "dev": true,
+       "requires": {
 -        "path-type": "3.0.0"
++        "path-type": "^3.0.0"
+       },
+       "dependencies": {
+         "path-type": {
+           "version": "3.0.0",
+           "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+           "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+           "dev": true,
+           "requires": {
 -            "pify": "3.0.0"
++            "pify": "^3.0.0"
+           }
+         },
+         "pify": {
+           "version": "3.0.0",
+           "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+           "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+           "dev": true
+         }
+       }
+     },
+     "dns-equal": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
+       "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
+       "dev": true
+     },
+     "dns-packet": {
+       "version": "1.3.1",
+       "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz",
+       "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==",
+       "dev": true,
+       "requires": {
 -        "ip": "1.1.5",
 -        "safe-buffer": "5.1.1"
++        "ip": "^1.1.0",
++        "safe-buffer": "^5.0.1"
+       }
+     },
+     "dns-txt": {
+       "version": "2.0.2",
+       "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
+       "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
+       "dev": true,
+       "requires": {
 -        "buffer-indexof": "1.1.1"
++        "buffer-indexof": "^1.0.0"
+       }
+     },
+     "dom-serialize": {
+       "version": "2.2.1",
+       "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz",
+       "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=",
+       "dev": true,
+       "requires": {
 -        "custom-event": "1.0.1",
 -        "ent": "2.2.0",
 -        "extend": "3.0.1",
 -        "void-elements": "2.0.1"
++        "custom-event": "~1.0.0",
++        "ent": "~2.2.0",
++        "extend": "^3.0.0",
++        "void-elements": "^2.0.0"
+       }
+     },
+     "domain-browser": {
+       "version": "1.2.0",
+       "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+       "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
+       "dev": true
+     },
+     "domino": {
+       "version": "2.1.1",
+       "resolved": "https://registry.npmjs.org/domino/-/domino-2.1.1.tgz",
+       "integrity": "sha512-fqoTi6oQ881wYRENIEmz78hKVoc3X9HqVpklo419yxzebys6dtU5c83iVh3UYvvexPFdAuwlDYCsUM9//CrMMg=="
+     },
+     "duplexify": {
+       "version": "3.7.1",
+       "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+       "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+       "dev": true,
+       "requires": {
 -        "end-of-stream": "1.4.1",
 -        "inherits": "2.0.3",
 -        "readable-stream": "2.3.3",
 -        "stream-shift": "1.0.0"
++        "end-of-stream": "^1.0.0",
++        "inherits": "^2.0.1",
++        "readable-stream": "^2.0.0",
++        "stream-shift": "^1.0.0"
+       }
+     },
+     "ecc-jsbn": {
+       "version": "0.1.1",
+       "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
+       "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+       "dev": true,
+       "optional": true,
+       "requires": {
 -        "jsbn": "0.1.1"
++        "jsbn": "~0.1.0"
+       }
+     },
+     "ee-first": {
+       "version": "1.1.1",
+       "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+       "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+       "dev": true
+     },
+     "electron-to-chromium": {
+       "version": "1.3.113",
+       "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz",
+       "integrity": "sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g==",
+       "dev": true
+     },
+     "elliptic": {
+       "version": "6.4.1",
+       "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
+       "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==",
+       "dev": true,
+       "requires": {
 -        "bn.js": "4.11.8",
 -        "brorand": "1.1.0",
 -        "hash.js": "1.1.7",
 -        "hmac-drbg": "1.0.1",
 -        "inherits": "2.0.3",
 -        "minimalistic-assert": "1.0.1",
 -        "minimalistic-crypto-utils": "1.0.1"
++        "bn.js": "^4.4.0",
++        "brorand": "^1.0.1",
++        "hash.js": "^1.0.0",
++        "hmac-drbg": "^1.0.0",
++        "inherits": "^2.0.1",
++        "minimalistic-assert": "^1.0.0",
++        "minimalistic-crypto-utils": "^1.0.0"
+       }
+     },
+     "emojis-list": {
+       "version": "2.1.0",
+       "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+       "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+       "dev": true
+     },
+     "encodeurl": {
+       "version": "1.0.1",
+       "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz",
+       "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=",
+       "dev": true
+     },
+     "encoding": {
+       "version": "0.1.12",
+       "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
+       "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
+       "dev": true,
+       "requires": {
 -        "iconv-lite": "0.4.19"
++        "iconv-lite": "~0.4.13"
+       }
+     },
+     "end-of-stream": {
+       "version": "1.4.1",
+       "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+       "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+       "dev": true,
+       "requires": {
 -        "once": "1.4.0"
++        "once": "^1.4.0"
+       }
+     },
+     "engine.io": {
+       "version": "1.8.2",
+       "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.2.tgz",
+       "integrity": "sha1-a1m+cws0jAElsKRYneHDVavPen4=",
+       "dev": true,
+       "requires": {
+         "accepts": "1.3.3",
+         "base64id": "1.0.0",
+         "cookie": "0.3.1",
+         "debug": "2.3.3",
+         "engine.io-parser": "1.3.2",
+         "ws": "1.1.1"
+       },
+       "dependencies": {
+         "accepts": {
+           "version": "1.3.3",
+           "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz",
+           "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=",
+           "dev": true,
+           "requires": {
 -            "mime-types": "2.1.17",
++            "mime-types": "~2.1.11",
+             "negotiator": "0.6.1"
+           }
+         },
+         "debug": {
+           "version": "2.3.3",
+           "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
+           "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
+           "dev": true,
+           "requires": {
+             "ms": "0.7.2"
+           }
+         },
+         "ms": {
+           "version": "0.7.2",
+           "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+           "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=",
+           "dev": true
+         }
+       }
+     },
+     "engine.io-client": {
+       "version": "1.8.2",
+       "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.2.tgz",
+       "integrity": "sha1-w4dnVH8qfRhPV1L28K1QEAZwN2Y=",
+       "dev": true,
+       "requires": {
+         "component-emitter": "1.2.1",
+         "component-inherit": "0.0.3",
+         "debug": "2.3.3",
+         "engine.io-parser": "1.3.2",
+         "has-cors": "1.1.0",
+         "indexof": "0.0.1",
+         "parsejson": "0.0.3",
+         "parseqs": "0.0.5",
+         "parseuri": "0.0.5",
+         "ws": "1.1.1",
+         "xmlhttprequest-ssl": "1.5.3",
+         "yeast": "0.1.2"
+       },
+       "dependencies": {
+         "component-emitter": {
+           "version": "1.2.1",
+           "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+           "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+           "dev": true
+         },
+         "debug": {
+           "version": "2.3.3",
+           "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz",
+           "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=",
+           "dev": true,
+           "requires": {
+             "ms": "0.7.2"
+           }
+         },
+         "ms": {
+           "version": "0.7.2",
+           "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
+           "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=",
+           "dev": true
+         }
+       }
+     },
+     "engine.io-parser": {
+       "version": "1.3.2",
+       "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz",
+       "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=",
+       "dev": true,
+       "requires": {
+         "after": "0.8.2",
+         "arraybuffer.slice": "0.0.6",
+         "base64-arraybuffer": "0.1.5",
+         "blob": "0.0.4",
+         "has-binary": "0.1.7",
+         "wtf-8": "1.0.0"
+       }
+     },
+     "enhanced-resolve": {
+       "version": "4.1.0",
+       "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz",
+       "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==",
+       "dev": true,
+       "requires": {
 -        "graceful-fs": "4.1.11",
 -        "memory-fs": "0.4.1",
 -        "tapable": "1.1.1"
++        "graceful-fs": "^4.1.2",
++        "memory-fs": "^0.4.0",
++        "tapable": "^1.0.0"
+       }
+     },
+     "ent": {
+       "version": "2.2.0",
+       "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
+       "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=",
+       "dev": true
+     },
+     "err-code": {
+       "version": "1.1.2",
+       "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz",
+       "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=",
+       "dev": true
+     },
+     "errno": {
+       "version": "0.1.7",
+       "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
+       "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
+       "dev": true,
+       "requires": {
 -        "prr": "1.0.1"
++        "prr": "~1.0.1"
+       }
+     },
+     "error-ex": {
+       "version": "1.3.1",
+       "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
+       "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
+       "dev": true,
+       "requires": {
 -        "is-arrayish": "0.2.1"
++        "is-arrayish": "^0.2.1"
+       }
+     },
+     "es6-promise": {
+       "version": "4.2.5",
+       "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz",
+       "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==",
+       "dev": true
+     },
+     "es6-promisify": {
+       "version": "5.0.0",
+       "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
+       "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
+       "dev": true,
+       "requires": {
 -        "es6-promise": "4.2.5"
++        "es6-promise": "^4.0.3"
+       }
+     },
+     "escape-html": {
+       "version": "1.0.3",
+       "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+       "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+       "dev": true
+     },
+     "escape-string-regexp": {
+       "version": "1.0.5",
+       "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+       "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+       "dev": true
+     },
+     "escodegen": {
+       "version": "1.8.1",
+       "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz",
+       "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=",
+       "dev": true,
+       "requires": {
 -        "esprima": "2.7.3",
 -        "estraverse": "1.9.3",
 -        "esutils": "2.0.2",
 -        "optionator": "0.8.2",
 -        "source-map": "0.2.0"
++        "esprima": "^2.7.1",
++        "estraverse": "^1.9.1",
++        "esutils": "^2.0.2",
++        "optionator": "^0.8.1",
++        "source-map": "~0.2.0"
+       },
+       "dependencies": {
+         "source-map": {
+           "version": "0.2.0",
+           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz",
+           "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "amdefine": "1.0.1"
++            "amdefine": ">=0.0.4"
+           }
+         }
+       }
+     },
+     "eslint-scope": {
+       "version": "4.0.0",
+       "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz",
+       "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==",
+       "dev": true,
+       "requires": {
 -        "esrecurse": "4.2.1",
 -        "estraverse": "4.2.0"
++        "esrecurse": "^4.1.0",
++        "estraverse": "^4.1.1"
+       },
+       "dependencies": {
+         "estraverse": {
+           "version": "4.2.0",
+           "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+           "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+           "dev": true
+         }
+       }
+     },
+     "esprima": {
+       "version": "2.7.3",
+       "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+       "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=",
+       "dev": true
+     },
+     "esrecurse": {
+       "version": "4.2.1",
+       "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+       "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+       "dev": true,
+       "requires": {
 -        "estraverse": "4.2.0"
++        "estraverse": "^4.1.0"
+       },
+       "dependencies": {
+         "estraverse": {
+           "version": "4.2.0",
+           "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+           "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+           "dev": true
+         }
+       }
+     },
+     "estraverse": {
+       "version": "1.9.3",
+       "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz",
+       "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=",
+       "dev": true
+     },
+     "esutils": {
+       "version": "2.0.2",
+       "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+       "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+       "dev": true
+     },
+     "etag": {
+       "version": "1.8.1",
+       "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+       "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+       "dev": true
+     },
+     "eventemitter3": {
+       "version": "1.2.0",
+       "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz",
+       "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=",
+       "dev": true
+     },
+     "events": {
+       "version": "3.0.0",
+       "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz",
+       "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==",
+       "dev": true
+     },
+     "eventsource": {
+       "version": "1.0.7",
+       "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz",
+       "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==",
+       "dev": true,
+       "requires": {
 -        "original": "1.0.2"
++        "original": "^1.0.0"
+       }
+     },
+     "evp_bytestokey": {
+       "version": "1.0.3",
+       "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+       "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+       "dev": true,
+       "requires": {
 -        "md5.js": "1.3.5",
 -        "safe-buffer": "5.1.1"
++        "md5.js": "^1.3.4",
++        "safe-buffer": "^5.1.1"
+       }
+     },
+     "execa": {
+       "version": "0.10.0",
+       "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz",
+       "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==",
+       "dev": true,
+       "requires": {
 -        "cross-spawn": "6.0.5",
 -        "get-stream": "3.0.0",
 -        "is-stream": "1.1.0",
 -        "npm-run-path": "2.0.2",
 -        "p-finally": "1.0.0",
 -        "signal-exit": "3.0.2",
 -        "strip-eof": "1.0.0"
++        "cross-spawn": "^6.0.0",
++        "get-stream": "^3.0.0",
++        "is-stream": "^1.1.0",
++        "npm-run-path": "^2.0.0",
++        "p-finally": "^1.0.0",
++        "signal-exit": "^3.0.0",
++        "strip-eof": "^1.0.0"
+       },
+       "dependencies": {
+         "cross-spawn": {
+           "version": "6.0.5",
+           "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+           "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+           "dev": true,
+           "requires": {
 -            "nice-try": "1.0.5",
 -            "path-key": "2.0.1",
 -            "semver": "5.6.0",
 -            "shebang-command": "1.2.0",
 -            "which": "1.3.0"
++            "nice-try": "^1.0.4",
++            "path-key": "^2.0.1",
++            "semver": "^5.5.0",
++            "shebang-command": "^1.2.0",
++            "which": "^1.2.9"
+           }
+         },
+         "get-stream": {
+           "version": "3.0.0",
+           "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+           "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+           "dev": true
+         },
+         "semver": {
+           "version": "5.6.0",
+           "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+           "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+           "dev": true
+         }
+       }
+     },
+     "exit": {
+       "version": "0.1.2",
+       "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+       "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
+       "dev": true
+     },
+     "expand-braces": {
+       "version": "0.1.2",
+       "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz",
+       "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=",
+       "dev": true,
+       "requires": {
 -        "array-slice": "0.2.3",
 -        "array-unique": "0.2.1",
 -        "braces": "0.1.5"
++        "array-slice": "^0.2.3",
++        "array-unique": "^0.2.1",
++        "braces": "^0.1.2"
+       },
+       "dependencies": {
+         "braces": {
+           "version": "0.1.5",
+           "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz",
+           "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=",
+           "dev": true,
+           "requires": {
 -            "expand-range": "0.1.1"
++            "expand-range": "^0.1.0"
+           }
+         },
+         "expand-range": {
+           "version": "0.1.1",
+           "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz",
+           "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=",
+           "dev": true,
+           "requires": {
 -            "is-number": "0.1.1",
 -            "repeat-string": "0.2.2"
++            "is-number": "^0.1.1",
++            "repeat-string": "^0.2.2"
+           }
+         },
+         "is-number": {
+           "version": "0.1.1",
+           "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz",
+           "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=",
+           "dev": true
+         },
+         "repeat-string": {
+           "version": "0.2.2",
+           "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz",
+           "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=",
+           "dev": true
+         }
+       }
+     },
+     "expand-brackets": {
+       "version": "0.1.5",
+       "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+       "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+       "dev": true,
+       "requires": {
 -        "is-posix-bracket": "0.1.1"
++        "is-posix-bracket": "^0.1.0"
+       }
+     },
+     "expand-range": {
+       "version": "1.8.2",
+       "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+       "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+       "dev": true,
+       "requires": {
 -        "fill-range": "2.2.3"
++        "fill-range": "^2.1.0"
+       }
+     },
+     "express": {
+       "version": "4.16.4",
+       "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz",
+       "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==",
+       "dev": true,
+       "requires": {
 -        "accepts": "1.3.5",
++        "accepts": "~1.3.5",
+         "array-flatten": "1.1.1",
+         "body-parser": "1.18.3",
+         "content-disposition": "0.5.2",
 -        "content-type": "1.0.4",
++        "content-type": "~1.0.4",
+         "cookie": "0.3.1",
+         "cookie-signature": "1.0.6",
+         "debug": "2.6.9",
 -        "depd": "1.1.2",
 -        "encodeurl": "1.0.2",
 -        "escape-html": "1.0.3",
 -        "etag": "1.8.1",
++        "depd": "~1.1.2",
++        "encodeurl": "~1.0.2",
++        "escape-html": "~1.0.3",
++        "etag": "~1.8.1",
+         "finalhandler": "1.1.1",
+         "fresh": "0.5.2",
+         "merge-descriptors": "1.0.1",
 -        "methods": "1.1.2",
 -        "on-finished": "2.3.0",
 -        "parseurl": "1.3.2",
++        "methods": "~1.1.2",
++        "on-finished": "~2.3.0",
++        "parseurl": "~1.3.2",
+         "path-to-regexp": "0.1.7",
 -        "proxy-addr": "2.0.4",
++        "proxy-addr": "~2.0.4",
+         "qs": "6.5.2",
 -        "range-parser": "1.2.0",
++        "range-parser": "~1.2.0",
+         "safe-buffer": "5.1.2",
+         "send": "0.16.2",
+         "serve-static": "1.13.2",
+         "setprototypeof": "1.1.0",
 -        "statuses": "1.4.0",
 -        "type-is": "1.6.16",
++        "statuses": "~1.4.0",
++        "type-is": "~1.6.16",
+         "utils-merge": "1.0.1",
 -        "vary": "1.1.2"
++        "vary": "~1.1.2"
+       },
+       "dependencies": {
+         "array-flatten": {
+           "version": "1.1.1",
+           "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+           "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+           "dev": true
+         },
+         "body-parser": {
+           "version": "1.18.3",
+           "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
+           "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
+           "dev": true,
+           "requires": {
+             "bytes": "3.0.0",
 -            "content-type": "1.0.4",
++            "content-type": "~1.0.4",
+             "debug": "2.6.9",
 -            "depd": "1.1.2",
 -            "http-errors": "1.6.3",
++            "depd": "~1.1.2",
++            "http-errors": "~1.6.3",
+             "iconv-lite": "0.4.23",
 -            "on-finished": "2.3.0",
++            "on-finished": "~2.3.0",
+             "qs": "6.5.2",
+             "raw-body": "2.3.3",
 -            "type-is": "1.6.16"
++            "type-is": "~1.6.16"
+           }
+         },
+         "depd": {
+           "version": "1.1.2",
+           "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+           "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+           "dev": true
+         },
+         "encodeurl": {
+           "version": "1.0.2",
+           "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+           "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+           "dev": true
+         },
+         "http-errors": {
+           "version": "1.6.3",
+           "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+           "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+           "dev": true,
+           "requires": {
 -            "depd": "1.1.2",
++            "depd": "~1.1.2",
+             "inherits": "2.0.3",
+             "setprototypeof": "1.1.0",
 -            "statuses": "1.4.0"
++            "statuses": ">= 1.4.0 < 2"
+           }
+         },
+         "iconv-lite": {
+           "version": "0.4.23",
+           "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
+           "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
+           "dev": true,
+           "requires": {
 -            "safer-buffer": "2.1.2"
++            "safer-buffer": ">= 2.1.2 < 3"
+           }
+         },
+         "mime-db": {
+           "version": "1.37.0",
+           "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
+           "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==",
+           "dev": true
+         },
+         "mime-types": {
+           "version": "2.1.21",
+           "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
+           "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
+           "dev": true,
+           "requires": {
 -            "mime-db": "1.37.0"
++            "mime-db": "~1.37.0"
+           }
+         },
+         "qs": {
+           "version": "6.5.2",
+           "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+           "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+           "dev": true
+         },
+         "raw-body": {
+           "version": "2.3.3",
+           "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
+           "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",
+           "dev": true,
+           "requires": {
+             "bytes": "3.0.0",
+             "http-errors": "1.6.3",
+             "iconv-lite": "0.4.23",
+             "unpipe": "1.0.0"
+           }
+         },
+         "safe-buffer": {
+           "version": "5.1.2",
+           "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+           "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+           "dev": true
+         },
+         "statuses": {
+           "version": "1.4.0",
+           "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+           "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
+           "dev": true
+         },
+         "type-is": {
+           "version": "1.6.16",
+           "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
+           "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
+           "dev": true,
+           "requires": {
+             "media-typer": "0.3.0",
 -            "mime-types": "2.1.21"
++            "mime-types": "~2.1.18"
+           }
+         }
+       }
+     },
+     "extend": {
+       "version": "3.0.1",
+       "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
+       "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
+       "dev": true
+     },
+     "extend-shallow": {
+       "version": "3.0.2",
+       "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+       "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+       "dev": true,
+       "requires": {
 -        "assign-symbols": "1.0.0",
 -        "is-extendable": "1.0.1"
++        "assign-symbols": "^1.0.0",
++        "is-extendable": "^1.0.1"
+       },
+       "dependencies": {
+         "is-extendable": {
+           "version": "1.0.1",
+           "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+           "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+           "dev": true,
+           "requires": {
 -            "is-plain-object": "2.0.4"
++            "is-plain-object": "^2.0.4"
+           }
+         }
+       }
+     },
+     "external-editor": {
+       "version": "3.0.3",
+       "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz",
+       "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==",
+       "dev": true,
+       "requires": {
 -        "chardet": "0.7.0",
 -        "iconv-lite": "0.4.24",
 -        "tmp": "0.0.33"
++        "chardet": "^0.7.0",
++        "iconv-lite": "^0.4.24",
++        "tmp": "^0.0.33"
+       },
+       "dependencies": {
+         "iconv-lite": {
+           "version": "0.4.24",
+           "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+           "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+           "dev": true,
+           "requires": {
 -            "safer-buffer": "2.1.2"
++            "safer-buffer": ">= 2.1.2 < 3"
+           }
+         }
+       }
+     },
+     "extglob": {
+       "version": "0.3.2",
+       "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+       "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+       "dev": true,
+       "requires": {
 -        "is-extglob": "1.0.0"
++        "is-extglob": "^1.0.0"
+       }
+     },
+     "extsprintf": {
+       "version": "1.3.0",
+       "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+       "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+       "dev": true
+     },
+     "fast-deep-equal": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz",
+       "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=",
+       "dev": true
+     },
+     "fast-json-stable-stringify": {
+       "version": "2.0.0",
+       "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+       "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+       "dev": true
+     },
+     "fast-levenshtein": {
+       "version": "2.0.6",
+       "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+       "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+       "dev": true
+     },
+     "fastparse": {
+       "version": "1.1.2",
+       "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
+       "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==",
+       "dev": true
+     },
+     "faye-websocket": {
+       "version": "0.10.0",
+       "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
+       "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
+       "dev": true,
+       "requires": {
 -        "websocket-driver": "0.7.0"
++        "websocket-driver": ">=0.5.1"
+       }
+     },
+     "figgy-pudding": {
+       "version": "3.5.1",
+       "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz",
+       "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==",
+       "dev": true
+     },
+     "figures": {
+       "version": "2.0.0",
+       "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+       "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+       "dev": true,
+       "requires": {
 -        "escape-string-regexp": "1.0.5"
++        "escape-string-regexp": "^1.0.5"
+       }
+     },
+     "file-loader": {
+       "version": "3.0.1",
+       "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz",
+       "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==",
+       "dev": true,
+       "requires": {
 -        "loader-utils": "1.2.3",
 -        "schema-utils": "1.0.0"
++        "loader-utils": "^1.0.2",
++        "schema-utils": "^1.0.0"
+       }
+     },
+     "filename-regex": {
+       "version": "2.0.1",
+       "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+       "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
+       "dev": true
+     },
+     "fileset": {
+       "version": "2.0.3",
+       "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz",
+       "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=",
+       "dev": true,
+       "requires": {
 -        "glob": "7.1.2",
 -        "minimatch": "3.0.4"
++        "glob": "^7.0.3",
++        "minimatch": "^3.0.3"
+       }
+     },
+     "fill-range": {
+       "version": "2.2.3",
+       "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz",
+       "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=",
+       "dev": true,
+       "requires": {
 -        "is-number": "2.1.0",
 -        "isobject": "2.1.0",
 -        "randomatic": "1.1.7",
 -        "repeat-element": "1.1.2",
 -        "repeat-string": "1.6.1"
++        "is-number": "^2.1.0",
++        "isobject": "^2.0.0",
++        "randomatic": "^1.1.3",
++        "repeat-element": "^1.1.2",
++        "repeat-string": "^1.5.2"
+       }
+     },
+     "finalhandler": {
+       "version": "1.1.1",
+       "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
+       "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
+       "dev": true,
+       "requires": {
+         "debug": "2.6.9",
 -        "encodeurl": "1.0.2",
 -        "escape-html": "1.0.3",
 -        "on-finished": "2.3.0",
 -        "parseurl": "1.3.2",
 -        "statuses": "1.4.0",
 -        "unpipe": "1.0.0"
++        "encodeurl": "~1.0.2",
++        "escape-html": "~1.0.3",
++        "on-finished": "~2.3.0",
++        "parseurl": "~1.3.2",
++        "statuses": "~1.4.0",
++        "unpipe": "~1.0.0"
+       },
+       "dependencies": {
+         "encodeurl": {
+           "version": "1.0.2",
+           "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+           "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+           "dev": true
+         },
+         "statuses": {
+           "version": "1.4.0",
+           "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
+           "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
+           "dev": true
+         }
+       }
+     },
+     "find-cache-dir": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
+       "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
+       "dev": true,
+       "requires": {
 -        "commondir": "1.0.1",
 -        "make-dir": "1.3.0",
 -        "pkg-dir": "2.0.0"
++        "commondir": "^1.0.1",
++        "make-dir": "^1.0.0",
++        "pkg-dir": "^2.0.0"
+       }
+     },
+     "find-up": {
+       "version": "1.1.2",
+       "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+       "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+       "dev": true,
+       "requires": {
 -        "path-exists": "2.1.0",
 -        "pinkie-promise": "2.0.1"
++        "path-exists": "^2.0.0",
++        "pinkie-promise": "^2.0.0"
+       }
+     },
+     "flush-write-stream": {
+       "version": "1.1.0",
+       "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.0.tgz",
+       "integrity": "sha512-6MHED/cmsyux1G4/Cek2Z776y9t7WCNd3h2h/HW91vFeU7pzMhA8XvAlDhHcanG5IWuIh/xcC7JASY4WQpG6xg==",
+       "dev": true,
+       "requires": {
 -        "inherits": "2.0.3",
 -        "readable-stream": "3.1.1"
++        "inherits": "^2.0.3",
++        "readable-stream": "^3.1.1"
+       },
+       "dependencies": {
+         "readable-stream": {
+           "version": "3.1.1",
+           "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz",
+           "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==",
+           "dev": true,
+           "requires": {
 -            "inherits": "2.0.3",
 -            "string_decoder": "1.2.0",
 -            "util-deprecate": "1.0.2"
++            "inherits": "^2.0.3",
++            "string_decoder": "^1.1.1",
++            "util-deprecate": "^1.0.1"
+           }
+         },
+         "string_decoder": {
+           "version": "1.2.0",
+           "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz",
+           "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==",
+           "dev": true,
+           "requires": {
 -            "safe-buffer": "5.1.1"
++            "safe-buffer": "~5.1.0"
+           }
+         }
+       }
+     },
+     "for-in": {
+       "version": "1.0.2",
+       "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+       "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+       "dev": true
+     },
+     "for-own": {
+       "version": "0.1.5",
+       "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+       "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+       "dev": true,
+       "requires": {
 -        "for-in": "1.0.2"
++        "for-in": "^1.0.1"
+       }
+     },
+     "forever-agent": {
+       "version": "0.6.1",
+       "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+       "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+       "dev": true
+     },
+     "form-data": {
+       "version": "2.3.1",
+       "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz",
+       "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=",
+       "dev": true,
+       "requires": {
 -        "asynckit": "0.4.0",
 -        "combined-stream": "1.0.5",
 -        "mime-types": "2.1.17"
++        "asynckit": "^0.4.0",
++        "combined-stream": "^1.0.5",
++        "mime-types": "^2.1.12"
+       }
+     },
+     "forwarded": {
+       "version": "0.1.2",
+       "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+       "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
+       "dev": true
+     },
+     "fragment-cache": {
+       "version": "0.2.1",
+       "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+       "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+       "dev": true,
+       "requires": {
 -        "map-cache": "0.2.2"
++        "map-cache": "^0.2.2"
+       }
+     },
+     "fresh": {
+       "version": "0.5.2",
+       "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+       "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+       "dev": true
+     },
+     "from2": {
+       "version": "2.3.0",
+       "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+       "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+       "dev": true,
+       "requires": {
 -        "inherits": "2.0.3",
 -        "readable-stream": "2.3.3"
++        "inherits": "^2.0.1",
++        "readable-stream": "^2.0.0"
+       }
+     },
+     "fs-access": {
+       "version": "1.0.1",
+       "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz",
+       "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=",
+       "dev": true,
+       "requires": {
 -        "null-check": "1.0.0"
++        "null-check": "^1.0.0"
+       }
+     },
+     "fs-minipass": {
+       "version": "1.2.5",
+       "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz",
+       "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==",
+       "dev": true,
+       "requires": {
 -        "minipass": "2.3.5"
++        "minipass": "^2.2.1"
+       }
+     },
+     "fs-write-stream-atomic": {
+       "version": "1.0.10",
+       "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
+       "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+       "dev": true,
+       "requires": {
 -        "graceful-fs": "4.1.11",
 -        "iferr": "0.1.5",
 -        "imurmurhash": "0.1.4",
 -        "readable-stream": "2.3.3"
++        "graceful-fs": "^4.1.2",
++        "iferr": "^0.1.5",
++        "imurmurhash": "^0.1.4",
++        "readable-stream": "1 || 2"
+       }
+     },
+     "fs.realpath": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+       "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+       "dev": true
+     },
+     "fsevents": {
+       "version": "1.1.2",
+       "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz",
+       "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==",
+       "dev": true,
+       "optional": true,
+       "requires": {
 -        "nan": "2.7.0",
 -        "node-pre-gyp": "0.6.36"
++        "nan": "^2.3.0",
++        "node-pre-gyp": "^0.6.36"
+       },
+       "dependencies": {
+         "abbrev": {
+           "version": "1.1.0",
+           "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz",
+           "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=",
+           "dev": true,
+           "optional": true
+         },
+         "ajv": {
+           "version": "4.11.8",
+           "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
+           "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "co": "4.6.0",
 -            "json-stable-stringify": "1.0.1"
++            "co": "^4.6.0",
++            "json-stable-stringify": "^1.0.1"
+           }
+         },
+         "ansi-regex": {
+           "version": "2.1.1",
+           "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+           "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
 -          "dev": true
++          "dev": true,
++          "optional": true
+         },
+         "aproba": {
+           "version": "1.1.1",
+           "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz",
+           "integrity": "sha1-ldNgDwdxCqDpKYxyatXs8urLq6s=",
+           "dev": true,
+           "optional": true
+         },
+         "are-we-there-yet": {
+           "version": "1.1.4",
+           "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
+           "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "delegates": "1.0.0",
 -            "readable-stream": "2.2.9"
++            "delegates": "^1.0.0",
++            "readable-stream": "^2.0.6"
+           }
+         },
+         "asn1": {
+           "version": "0.2.3",
+           "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+           "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
+           "dev": true,
+           "optional": true
+         },
+         "assert-plus": {
+           "version": "0.2.0",
+           "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
+           "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
+           "dev": true,
+           "optional": true
+         },
+         "asynckit": {
+           "version": "0.4.0",
+           "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+           "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+           "dev": true,
+           "optional": true
+         },
+         "aws-sign2": {
+           "version": "0.6.0",
+           "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
+           "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
+           "dev": true,
+           "optional": true
+         },
+         "aws4": {
+           "version": "1.6.0",
+           "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
+           "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
+           "dev": true,
+           "optional": true
+         },
+         "balanced-match": {
+           "version": "0.4.2",
+           "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+           "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=",
 -          "dev": true
++          "dev": true,
++          "optional": true
+         },
+         "bcrypt-pbkdf": {
+           "version": "1.0.1",
+           "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+           "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "tweetnacl": "0.14.5"
++            "tweetnacl": "^0.14.3"
+           }
+         },
+         "block-stream": {
+           "version": "0.0.9",
+           "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
+           "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+           "dev": true,
++          "optional": true,
+           "requires": {
 -            "inherits": "2.0.3"
++            "inherits": "~2.0.0"
+           }
+         },
+         "boom": {
+           "version": "2.10.1",
+           "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
+           "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
+           "dev": true,
++          "optional": true,
+           "requires": {
 -            "hoek": "2.16.3"
++            "hoek": "2.x.x"
+           }
+         },
+         "brace-expansion": {
+           "version": "1.1.7",
+           "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz",
+           "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=",
+           "dev": true,
++          "optional": true,
+           "requires": {
 -            "balanced-match": "0.4.2",
++            "balanced-match": "^0.4.1",
+             "concat-map": "0.0.1"
+           }
+         },
+         "buffer-shims": {
+           "version": "1.0.0",
+           "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz",
+           "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=",
 -          "dev": true
++          "dev": true,
++          "optional": true
+         },
+         "caseless": {
+           "version": "0.12.0",
+           "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+           "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+           "dev": true,
+           "optional": true
+         },
+         "co": {
+           "version": "4.6.0",
+           "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+           "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+           "dev": true,
+           "optional": true
+         },
+         "code-point-at": {
+           "version": "1.1.0",
+           "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+           "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
 -          "dev": true
++          "dev": true,
++          "optional": true
+         },
+         "combined-stream": {
+           "version": "1.0.5",
+           "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
+           "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
+           "dev": true,
++          "optional": true,
+           "requires": {
 -            "delayed-stream": "1.0.0"
++            "delayed-stream": "~1.0.0"
+           }
+         },
+         "concat-map": {
+           "version": "0.0.1",
+           "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+           "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
 -          "dev": true
++          "dev": true,
++          "optional": true
+         },
+         "console-control-strings": {
+           "version": "1.1.0",
+           "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+           "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
 -          "dev": true
++          "dev": true,
++          "optional": true
+         },
+         "core-util-is": {
+           "version": "1.0.2",
+           "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+           "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
 -          "dev": true
++          "dev": true,
++          "optional": true
+         },
+         "cryptiles": {
+           "version": "2.0.5",
+           "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
+           "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "boom": "2.10.1"
++            "boom": "2.x.x"
+           }
+         },
+         "dashdash": {
+           "version": "1.14.1",
+           "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+           "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "assert-plus": "1.0.0"
++            "assert-plus": "^1.0.0"
+           },
+           "dependencies": {
+             "assert-plus": {
+               "version": "1.0.0",
+               "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+               "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+               "dev": true,
+               "optional": true
+             }
+           }
+         },
+         "debug": {
+           "version": "2.6.8",
+           "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
+           "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+           "dev": true,
+           "optional": true,
+           "requires": {
+             "ms": "2.0.0"
+           }
+         },
+         "deep-extend": {
+           "version": "0.4.2",
+           "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
+           "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=",
+           "dev": true,
+           "optional": true
+         },
+         "delayed-stream": {
+           "version": "1.0.0",
+           "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+           "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
 -          "dev": true
++          "dev": true,
++          "optional": true
+         },
+         "delegates": {
+           "version": "1.0.0",
+           "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+           "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+           "dev": true,
+           "optional": true
+         },
+         "ecc-jsbn": {
+           "version": "0.1.1",
+           "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
+           "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "jsbn": "0.1.1"
++            "jsbn": "~0.1.0"
+           }
+         },
+         "extend": {
+           "version": "3.0.1",
+           "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
+           "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
+           "dev": true,
+           "optional": true
+         },
+         "extsprintf": {
+           "version": "1.0.2",
+           "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz",
+           "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=",
 -          "dev": true
++          "dev": true,
++          "optional": true
+         },
+         "forever-agent": {
+           "version": "0.6.1",
+           "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+           "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+           "dev": true,
+           "optional": true
+         },
+         "form-data": {
+           "version": "2.1.4",
+           "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
+           "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "asynckit": "0.4.0",
 -            "combined-stream": "1.0.5",
 -            "mime-types": "2.1.15"
++            "asynckit": "^0.4.0",
++            "combined-stream": "^1.0.5",
++            "mime-types": "^2.1.12"
+           }
+         },
+         "fs.realpath": {
+           "version": "1.0.0",
+           "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+           "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
 -          "dev": true
++          "dev": true,
++          "optional": true
+         },
+         "fstream": {
+           "version": "1.0.11",
+           "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
+           "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
+           "dev": true,
++          "optional": true,
+           "requires": {
 -            "graceful-fs": "4.1.11",
 -            "inherits": "2.0.3",
 -            "mkdirp": "0.5.1",
 -            "rimraf": "2.6.1"
++            "graceful-fs": "^4.1.2",
++            "inherits": "~2.0.0",
++            "mkdirp": ">=0.5 0",
++            "rimraf": "2"
+           }
+         },
+         "fstream-ignore": {
+           "version": "1.0.5",
+           "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz",
+           "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "fstream": "1.0.11",
 -            "inherits": "2.0.3",
 -            "minimatch": "3.0.4"
++            "fstream": "^1.0.0",
++            "inherits": "2",
++            "minimatch": "^3.0.0"
+           }
+         },
+         "gauge": {
+           "version": "2.7.4",
+           "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+           "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+           "dev": true,
+           "optional": true,
+           "requires": {
+             "aproba": "1.1.1",
+             "console-control-strings": "1.1.0",
+             "has-unicode": "2.0.1",
+             "object-assign": "4.1.1",
+             "signal-exit": "3.0.2",
+             "string-width": "1.0.2",
+             "strip-ansi": "3.0.1",
+             "wide-align": "1.1.2"
+           }
+         },
+         "getpass": {
+           "version": "0.1.7",
+           "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+           "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "assert-plus": "1.0.0"
++            "assert-plus": "^1.0.0"
+           },
+           "dependencies": {
+             "assert-plus": {
+               "version": "1.0.0",
+               "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+               "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+               "dev": true,
+               "optional": true
+             }
+           }
+         },
+         "glob": {
+           "version": "7.1.2",
+           "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+           "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+           "dev": true,
++          "optional": true,
+           "requires": {
 -            "fs.realpath": "1.0.0",
 -            "inflight": "1.0.6",
 -            "inherits": "2.0.3",
 -            "minimatch": "3.0.4",
 -            "once": "1.4.0",
 -            "path-is-absolute": "1.0.1"
++            "fs.realpath": "^1.0.0",
++            "inflight": "^1.0.4",
++            "inherits": "2",
++            "minimatch": "^3.0.4",
++            "once": "^1.3.0",
++            "path-is-absolute": "^1.0.0"
+           }
+         },
+         "graceful-fs": {
+           "version": "4.1.11",
+           "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+           "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
 -          "dev": true
++          "dev": true,
++          "optional": true
+         },
+         "har-schema": {
+           "version": "1.0.5",
+           "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz",
+           "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=",
+           "dev": true,
+           "optional": true
+         },
+         "har-validator": {
+           "version": "4.2.1",
+           "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
+           "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "ajv": "4.11.8",
 -            "har-schema": "1.0.5"
++            "ajv": "^4.9.1",
++            "har-schema": "^1.0.5"
+           }
+         },
+         "has-unicode": {
+           "version": "2.0.1",
+           "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+           "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+           "dev": true,
+           "optional": true
+         },
+         "hawk": {
+           "version": "3.1.3",
+           "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
+           "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "boom": "2.10.1",
 -            "cryptiles": "2.0.5",
 -            "hoek": "2.16.3",
 -            "sntp": "1.0.9"
++            "boom": "2.x.x",
++            "cryptiles": "2.x.x",
++            "hoek": "2.x.x",
++            "sntp": "1.x.x"
+           }
+         },
+         "hoek": {
+           "version": "2.16.3",
+           "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
+           "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
 -          "dev": true
++          "dev": true,
++          "optional": true
+         },
+         "http-signature": {
+           "version": "1.1.1",
+           "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
+           "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "assert-plus": "0.2.0",
 -            "jsprim": "1.4.0",
 -            "sshpk": "1.13.0"
++            "assert-plus": "^0.2.0",
++            "jsprim": "^1.2.2",
++            "sshpk": "^1.7.0"
+           }
+         },
+         "inflight": {
+           "version": "1.0.6",
+           "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+           "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+           "dev": true,
++          "optional": true,
+           "requires": {
+             "once": "1.4.0",
+             "wrappy": "1.0.2"
+           }
+         },
+         "inherits": {
+           "version": "2.0.3",
+           "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+           "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
 -          "dev": true
++          "dev": true,
++          "optional": true
+         },
+         "ini": {
+           "version": "1.3.4",
+           "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz",
+           "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=",
+           "dev": true,
+           "optional": true
+         },
+         "is-fullwidth-code-point": {
+           "version": "1.0.0",
+           "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+           "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+           "dev": true,
++          "optional": true,
+           "requires": {
+             "number-is-nan": "1.0.1"
+           }
+         },
+         "is-typedarray": {
+           "version": "1.0.0",
+           "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+           "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+           "dev": true,
+           "optional": true
+         },
+         "isarray": {
+           "version": "1.0.0",
+           "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+           "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
 -          "dev": true
++          "dev": true,
++          "optional": true
+         },
+         "isstream": {
+           "version": "0.1.2",
+           "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+           "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+           "dev": true,
+           "optional": true
+         },
+         "jodid25519": {
+           "version": "1.0.2",
+           "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz",
+           "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "jsbn": "0.1.1"
++            "jsbn": "~0.1.0"
+           }
+         },
+         "jsbn": {
+           "version": "0.1.1",
+           "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+           "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+           "dev": true,
+           "optional": true
+         },
+         "json-schema": {
+           "version": "0.2.3",
+           "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+           "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+           "dev": true,
+           "optional": true
+         },
+         "json-stable-stringify": {
+           "version": "1.0.1",
+           "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
+           "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "jsonify": "0.0.0"
++            "jsonify": "~0.0.0"
+           }
+         },
+         "json-stringify-safe": {
+           "version": "5.0.1",
+           "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+           "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+           "dev": true,
+           "optional": true
+         },
+         "jsonify": {
+           "version": "0.0.0",
+           "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+           "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+           "dev": true,
+           "optional": true
+         },
+         "jsprim": {
+           "version": "1.4.0",
+           "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz",
+           "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=",
+           "dev": true,
+           "optional": true,
+           "requires": {
+             "assert-plus": "1.0.0",
+             "extsprintf": "1.0.2",
+             "json-schema": "0.2.3",
+             "verror": "1.3.6"
+           },
+           "dependencies": {
+             "assert-plus": {
+               "version": "1.0.0",
+               "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+               "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+               "dev": true,
+               "optional": true
+             }
+           }
+         },
+         "mime-db": {
+           "version": "1.27.0",
+           "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz",
+           "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=",
 -          "dev": true
++          "dev": true,
++          "optional": true
+         },
+         "mime-types": {
+           "version": "2.1.15",
+           "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz",
+           "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=",
+           "dev": true,
++          "optional": true,
+           "requires": {
 -            "mime-db": "1.27.0"
++            "mime-db": "~1.27.0"
+           }
+         },
+         "minimatch": {
+           "version": "3.0.4",
+           "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+           "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+           "dev": true,
++          "optional": true,
+           "requires": {
+             "brace-expansion": "1.1.7"
+           }
+         },
+         "minimist": {
+           "version": "0.0.8",
+           "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+           "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
 -          "dev": true
++          "dev": true,
++          "optional": true
+         },
+         "mkdirp": {
+           "version": "0.5.1",
+           "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+           "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+           "dev": true,
++          "optional": true,
+           "requires": {
+             "minimist": "0.0.8"
+           }
+         },
+         "ms": {
+           "version": "2.0.0",
+           "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+           "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+           "dev": true,
+           "optional": true
+         },
+         "node-pre-gyp": {
+           "version": "0.6.36",
+           "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz",
+           "integrity": "sha1-22BBEst04NR3VU6bUFsXq936t4Y=",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "mkdirp": "0.5.1",
 -            "nopt": "4.0.1",
 -            "npmlog": "4.1.0",
 -            "rc": "1.2.1",
 -            "request": "2.81.0",
 -            "rimraf": "2.6.1",
 -            "semver": "5.3.0",
 -            "tar": "2.2.1",
 -            "tar-pack": "3.4.0"
++            "mkdirp": "^0.5.1",
++            "nopt": "^4.0.1",
++            "npmlog": "^4.0.2",
++            "rc": "^1.1.7",
++            "request": "^2.81.0",
++            "rimraf": "^2.6.1",
++            "semver": "^5.3.0",
++            "tar": "^2.2.1",
++            "tar-pack": "^3.4.0"
+           }
+         },
+         "nopt": {
+           "version": "4.0.1",
+           "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
+           "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
+           "dev": true,
+           "optional": true,
+           "requires": {
+             "abbrev": "1.1.0",
+             "osenv": "0.1.4"
+           }
+         },
+         "npmlog": {
+           "version": "4.1.0",
+           "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.0.tgz",
+           "integrity": "sha512-ocolIkZYZt8UveuiDS0yAkkIjid1o7lPG8cYm05yNYzBn8ykQtaiPMEGp8fY9tKdDgm8okpdKzkvu1y9hUYugA==",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "are-we-there-yet": "1.1.4",
 -            "console-control-strings": "1.1.0",
 -            "gauge": "2.7.4",
 -            "set-blocking": "2.0.0"
++            "are-we-there-yet": "~1.1.2",
++            "console-control-strings": "~1.1.0",
++            "gauge": "~2.7.3",
++            "set-blocking": "~2.0.0"
+           }
+         },
+         "number-is-nan": {
+           "version": "1.0.1",
+           "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+           "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
 -          "dev": true
++          "dev": true,
++          "optional": true
+         },
+         "oauth-sign": {
+           "version": "0.8.2",
+           "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+           "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
+           "dev": true,
+           "optional": true
+         },
+         "object-assign": {
+           "version": "4.1.1",
+           "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+           "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+           "dev": true,
+           "optional": true
+         },
+         "once": {
+           "version": "1.4.0",
+           "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+           "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+           "dev": true,
++          "optional": true,
+           "requires": {
+             "wrappy": "1.0.2"
+           }
+         },
+         "os-homedir": {
+           "version": "1.0.2",
+           "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+           "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+           "dev": true,
+           "optional": true
+         },
+         "os-tmpdir": {
+           "version": "1.0.2",
+           "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+           "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+           "dev": true,
+           "optional": true
+         },
+         "osenv": {
+           "version": "0.1.4",
+           "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz",
+           "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "os-homedir": "1.0.2",
 -            "os-tmpdir": "1.0.2"
++            "os-homedir": "^1.0.0",
++            "os-tmpdir": "^1.0.0"
+           }
+         },
+         "path-is-absolute": {
+           "version": "1.0.1",
+           "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+           "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
 -          "dev": true
++          "dev": true,
++          "optional": true
+         },
+         "performance-now": {
+           "version": "0.2.0",
+           "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
+           "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=",
+           "dev": true,
+           "optional": true
+         },
+         "process-nextick-args": {
+           "version": "1.0.7",
+           "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+           "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
 -          "dev": true
++          "dev": true,
++          "optional": true
+         },
+         "punycode": {
+           "version": "1.4.1",
+           "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+           "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+           "dev": true,
+           "optional": true
+         },
+         "qs": {
+           "version": "6.4.0",
+           "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
+           "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=",
+           "dev": true,
+           "optional": true
+         },
+         "rc": {
+           "version": "1.2.1",
+           "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz",
+           "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "deep-extend": "0.4.2",
 -            "ini": "1.3.4",
 -            "minimist": "1.2.0",
 -            "strip-json-comments": "2.0.1"
++            "deep-extend": "~0.4.0",
++            "ini": "~1.3.0",
++            "minimist": "^1.2.0",
++            "strip-json-comments": "~2.0.1"
+           },
+           "dependencies": {
+             "minimist": {
+               "version": "1.2.0",
+               "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+               "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+               "dev": true,
+               "optional": true
+             }
+           }
+         },
+         "readable-stream": {
+           "version": "2.2.9",
+           "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz",
+           "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=",
+           "dev": true,
++          "optional": true,
+           "requires": {
 -            "buffer-shims": "1.0.0",
 -            "core-util-is": "1.0.2",
 -            "inherits": "2.0.3",
 -            "isarray": "1.0.0",
 -            "process-nextick-args": "1.0.7",
 -            "string_decoder": "1.0.1",
 -            "util-deprecate": "1.0.2"
++            "buffer-shims": "~1.0.0",
++            "core-util-is": "~1.0.0",
++            "inherits": "~2.0.1",
++            "isarray": "~1.0.0",
++            "process-nextick-args": "~1.0.6",
++            "string_decoder": "~1.0.0",
++            "util-deprecate": "~1.0.1"
+           }
+         },
+         "request": {
+           "version": "2.81.0",
+           "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
+           "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "aws-sign2": "0.6.0",
 -            "aws4": "1.6.0",
 -            "caseless": "0.12.0",
 -            "combined-stream": "1.0.5",
 -            "extend": "3.0.1",
 -            "forever-agent": "0.6.1",
 -            "form-data": "2.1.4",
 -            "har-validator": "4.2.1",
 -            "hawk": "3.1.3",
 -            "http-signature": "1.1.1",
 -            "is-typedarray": "1.0.0",
 -            "isstream": "0.1.2",
 -            "json-stringify-safe": "5.0.1",
 -            "mime-types": "2.1.15",
 -            "oauth-sign": "0.8.2",
 -            "performance-now": "0.2.0",
 -            "qs": "6.4.0",
 -            "safe-buffer": "5.0.1",
 -            "stringstream": "0.0.5",
 -            "tough-cookie": "2.3.2",
 -            "tunnel-agent": "0.6.0",
 -            "uuid": "3.0.1"
++            "aws-sign2": "~0.6.0",
++            "aws4": "^1.2.1",
++            "caseless": "~0.12.0",
++            "combined-stream": "~1.0.5",
++            "extend": "~3.0.0",
++            "forever-agent": "~0.6.1",
++            "form-data": "~2.1.1",
++            "har-validator": "~4.2.1",
++            "hawk": "~3.1.3",
++            "http-signature": "~1.1.0",
++            "is-typedarray": "~1.0.0",
++            "isstream": "~0.1.2",
++            "json-stringify-safe": "~5.0.1",
++            "mime-types": "~2.1.7",
++            "oauth-sign": "~0.8.1",
++            "performance-now": "^0.2.0",
++            "qs": "~6.4.0",
++            "safe-buffer": "^5.0.1",
++            "stringstream": "~0.0.4",
++            "tough-cookie": "~2.3.0",
++            "tunnel-agent": "^0.6.0",
++            "uuid": "^3.0.0"
+           }
+         },
+         "rimraf": {
+           "version": "2.6.1",
+           "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz",
+           "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=",
+           "dev": true,
++          "optional": true,
+           "requires": {
 -            "glob": "7.1.2"
++            "glob": "^7.0.5"
+           }
+         },
+         "safe-buffer": {
+           "version": "5.0.1",
+           "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz",
+           "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=",
 -          "dev": true
++          "dev": true,
++          "optional": true
+         },
+         "semver": {
+           "version": "5.3.0",
+           "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+           "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+           "dev": true,
+           "optional": true
+         },
+         "set-blocking": {
+           "version": "2.0.0",
+           "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+           "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+           "dev": true,
+           "optional": true
+         },
+         "signal-exit": {
+           "version": "3.0.2",
+           "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+           "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+           "dev": true,
+           "optional": true
+         },
+         "sntp": {
+           "version": "1.0.9",
+           "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
+           "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "hoek": "2.16.3"
++            "hoek": "2.x.x"
+           }
+         },
+         "sshpk": {
+           "version": "1.13.0",
+           "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.0.tgz",
+           "integrity": "sha1-/yo+T9BEl1Vf7Zezmg/YL6+zozw=",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "asn1": "0.2.3",
 -            "assert-plus": "1.0.0",
 -            "bcrypt-pbkdf": "1.0.1",
 -            "dashdash": "1.14.1",
 -            "ecc-jsbn": "0.1.1",
 -            "getpass": "0.1.7",
 -            "jodid25519": "1.0.2",
 -            "jsbn": "0.1.1",
 -            "tweetnacl": "0.14.5"
++            "asn1": "~0.2.3",
++            "assert-plus": "^1.0.0",
++            "bcrypt-pbkdf": "^1.0.0",
++            "dashdash": "^1.12.0",
++            "ecc-jsbn": "~0.1.1",
++            "getpass": "^0.1.1",
++            "jodid25519": "^1.0.0",
++            "jsbn": "~0.1.0",
++            "tweetnacl": "~0.14.0"
+           },
+           "dependencies": {
+             "assert-plus": {
+               "version": "1.0.0",
+               "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+               "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+               "dev": true,
+               "optional": true
+             }
+           }
+         },
+         "string-width": {
+           "version": "1.0.2",
+           "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+           "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+           "dev": true,
++          "optional": true,
+           "requires": {
+             "code-point-at": "1.1.0",
+             "is-fullwidth-code-point": "1.0.0",
+             "strip-ansi": "3.0.1"
+           }
+         },
+         "string_decoder": {
+           "version": "1.0.1",
+           "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz",
+           "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=",
+           "dev": true,
++          "optional": true,
+           "requires": {
 -            "safe-buffer": "5.0.1"
++            "safe-buffer": "^5.0.1"
+           }
+         },
+         "stringstream": {
+           "version": "0.0.5",
+           "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
+           "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
+           "dev": true,
+           "optional": true
+         },
+         "strip-ansi": {
+           "version": "3.0.1",
+           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+           "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+           "dev": true,
++          "optional": true,
+           "requires": {
+             "ansi-regex": "2.1.1"
+           }
+         },
+         "strip-json-comments": {
+           "version": "2.0.1",
+           "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+           "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+           "dev": true,
+           "optional": true
+         },
+         "tar": {
+           "version": "2.2.1",
+           "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
+           "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
+           "dev": true,
++          "optional": true,
+           "requires": {
 -            "block-stream": "0.0.9",
 -            "fstream": "1.0.11",
 -            "inherits": "2.0.3"
++            "block-stream": "*",
++            "fstream": "^1.0.2",
++            "inherits": "2"
+           }
+         },
+         "tar-pack": {
+           "version": "3.4.0",
+           "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz",
+           "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "debug": "2.6.8",
 -            "fstream": "1.0.11",
 -            "fstream-ignore": "1.0.5",
 -            "once": "1.4.0",
 -            "readable-stream": "2.2.9",
 -            "rimraf": "2.6.1",
 -            "tar": "2.2.1",
 -            "uid-number": "0.0.6"
++            "debug": "^2.2.0",
++            "fstream": "^1.0.10",
++            "fstream-ignore": "^1.0.5",
++            "once": "^1.3.3",
++            "readable-stream": "^2.1.4",
++            "rimraf": "^2.5.1",
++            "tar": "^2.2.1",
++            "uid-number": "^0.0.6"
+           }
+         },
+         "tough-cookie": {
+           "version": "2.3.2",
+           "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz",
+           "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "punycode": "1.4.1"
++            "punycode": "^1.4.1"
+           }
+         },
+         "tunnel-agent": {
+           "version": "0.6.0",
+           "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+           "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "safe-buffer": "5.0.1"
++            "safe-buffer": "^5.0.1"
+           }
+         },
+         "tweetnacl": {
+           "version": "0.14.5",
+           "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+           "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+           "dev": true,
+           "optional": true
+         },
+         "uid-number": {
+           "version": "0.0.6",
+           "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz",
+           "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=",
+           "dev": true,
+           "optional": true
+         },
+         "util-deprecate": {
+           "version": "1.0.2",
+           "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+           "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
 -          "dev": true
++          "dev": true,
++          "optional": true
+         },
+         "uuid": {
+           "version": "3.0.1",
+           "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz",
+           "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=",
+           "dev": true,
+           "optional": true
+         },
+         "verror": {
+           "version": "1.3.6",
+           "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz",
+           "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=",
+           "dev": true,
+           "optional": true,
+           "requires": {
+             "extsprintf": "1.0.2"
+           }
+         },
+         "wide-align": {
+           "version": "1.1.2",
+           "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
+           "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "string-width": "1.0.2"
++            "string-width": "^1.0.2"
+           }
+         },
+         "wrappy": {
+           "version": "1.0.2",
+           "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+           "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
 -          "dev": true
++          "dev": true,
++          "optional": true
+         }
+       }
+     },
+     "fstream": {
+       "version": "1.0.11",
+       "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
+       "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
+       "dev": true,
+       "requires": {
 -        "graceful-fs": "4.1.11",
 -        "inherits": "2.0.3",
 -        "mkdirp": "0.5.1",
 -        "rimraf": "2.6.2"
++        "graceful-fs": "^4.1.2",
++        "inherits": "~2.0.0",
++        "mkdirp": ">=0.5 0",
++        "rimraf": "2"
+       }
+     },
+     "gauge": {
+       "version": "2.7.4",
+       "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+       "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+       "dev": true,
+       "requires": {
 -        "aproba": "1.2.0",
 -        "console-control-strings": "1.1.0",
 -        "has-unicode": "2.0.1",
 -        "object-assign": "4.1.1",
 -        "signal-exit": "3.0.2",
 -        "string-width": "1.0.2",
 -        "strip-ansi": "3.0.1",
 -        "wide-align": "1.1.2"
++        "aproba": "^1.0.3",
++        "console-control-strings": "^1.0.0",
++        "has-unicode": "^2.0.0",
++        "object-assign": "^4.1.0",
++        "signal-exit": "^3.0.0",
++        "string-width": "^1.0.1",
++        "strip-ansi": "^3.0.1",
++        "wide-align": "^1.1.0"
+       },
+       "dependencies": {
+         "is-fullwidth-code-point": {
+           "version": "1.0.0",
+           "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+           "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+           "dev": true,
+           "requires": {
 -            "number-is-nan": "1.0.1"
++            "number-is-nan": "^1.0.0"
+           }
+         },
+         "string-width": {
+           "version": "1.0.2",
+           "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+           "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+           "dev": true,
+           "requires": {
 -            "code-point-at": "1.1.0",
 -            "is-fullwidth-code-point": "1.0.0",
 -            "strip-ansi": "3.0.1"
++            "code-point-at": "^1.0.0",
++            "is-fullwidth-code-point": "^1.0.0",
++            "strip-ansi": "^3.0.0"
+           }
+         }
+       }
+     },
+     "gaze": {
+       "version": "1.1.2",
+       "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz",
+       "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=",
+       "dev": true,
+       "requires": {
 -        "globule": "1.2.0"
++        "globule": "^1.0.0"
+       }
+     },
+     "genfun": {
+       "version": "5.0.0",
+       "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz",
+       "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==",
+       "dev": true
+     },
+     "get-caller-file": {
+       "version": "1.0.2",
+       "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
+       "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=",
+       "dev": true
+     },
+     "get-stdin": {
+       "version": "4.0.1",
+       "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+       "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+       "dev": true
+     },
+     "get-stream": {
+       "version": "4.1.0",
+       "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+       "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+       "dev": true,
+       "requires": {
 -        "pump": "3.0.0"
++        "pump": "^3.0.0"
+       }
+     },
+     "get-value": {
+       "version": "2.0.6",
+       "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+       "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+       "dev": true
+     },
+     "getpass": {
+       "version": "0.1.7",
+       "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+       "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+       "dev": true,
+       "requires": {
 -        "assert-plus": "1.0.0"
++        "assert-plus": "^1.0.0"
+       }
+     },
+     "glob": {
+       "version": "7.1.2",
+       "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+       "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+       "dev": true,
+       "requires": {
 -        "fs.realpath": "1.0.0",
 -        "inflight": "1.0.6",
 -        "inherits": "2.0.3",
 -        "minimatch": "3.0.4",
 -        "once": "1.4.0",
 -        "path-is-absolute": "1.0.1"
++        "fs.realpath": "^1.0.0",
++        "inflight": "^1.0.4",
++        "inherits": "2",
++        "minimatch": "^3.0.4",
++        "once": "^1.3.0",
++        "path-is-absolute": "^1.0.0"
+       }
+     },
+     "glob-base": {
+       "version": "0.3.0",
+       "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+       "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+       "dev": true,
+       "requires": {
 -        "glob-parent": "2.0.0",
 -        "is-glob": "2.0.1"
++        "glob-parent": "^2.0.0",
++        "is-glob": "^2.0.0"
+       }
+     },
+     "glob-parent": {
+       "version": "2.0.0",
+       "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+       "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+       "dev": true,
+       "requires": {
 -        "is-glob": "2.0.1"
++        "is-glob": "^2.0.0"
+       }
+     },
+     "globals": {
+       "version": "9.18.0",
+       "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+       "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+       "dev": true
+     },
+     "globby": {
+       "version": "5.0.0",
+       "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
+       "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
+       "dev": true,
+       "requires": {
 -        "array-union": "1.0.2",
 -        "arrify": "1.0.1",
 -        "glob": "7.1.2",
 -        "object-assign": "4.1.1",
 -        "pify": "2.3.0",
 -        "pinkie-promise": "2.0.1"
++        "array-union": "^1.0.1",
++        "arrify": "^1.0.0",
++        "glob": "^7.0.3",
++        "object-assign": "^4.0.1",
++        "pify": "^2.0.0",
++        "pinkie-promise": "^2.0.0"
+       }
+     },
+     "globule": {
+       "version": "1.2.0",
+       "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz",
+       "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=",
+       "dev": true,
+       "requires": {
 -        "glob": "7.1.2",
 -        "lodash": "4.17.4",
 -        "minimatch": "3.0.4"
++        "glob": "~7.1.1",
++        "lodash": "~4.17.4",
++        "minimatch": "~3.0.2"
+       }
+     },
+     "graceful-fs": {
+       "version": "4.1.11",
+       "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+       "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
+       "dev": true
+     },
+     "hammerjs": {
+       "version": "2.0.8",
+       "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz",
+       "integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE="
+     },
+     "handle-thing": {
+       "version": "2.0.0",
+       "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz",
+       "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==",
+       "dev": true
+     },
+     "handlebars": {
+       "version": "4.0.12",
+       "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz",
+       "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==",
+       "dev": true,
+       "requires": {
 -        "async": "2.5.0",
 -        "optimist": "0.6.1",
 -        "source-map": "0.6.1",
 -        "uglify-js": "3.4.9"
++        "async": "^2.5.0",
++        "optimist": "^0.6.1",
++        "source-map": "^0.6.1",
++        "uglify-js": "^3.1.4"
+       },
+       "dependencies": {
+         "source-map": {
+           "version": "0.6.1",
+           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+           "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+           "dev": true
+         }
+       }
+     },
+     "har-schema": {
+       "version": "2.0.0",
+       "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+       "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+       "dev": true
+     },
+     "har-validator": {
+       "version": "5.0.3",
+       "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
+       "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
+       "dev": true,
+       "requires": {
 -        "ajv": "5.2.3",
 -        "har-schema": "2.0.0"
++        "ajv": "^5.1.0",
++        "har-schema": "^2.0.0"
+       },
+       "dependencies": {
+         "ajv": {
+           "version": "5.2.3",
+           "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.3.tgz",
+           "integrity": "sha1-wG9Zh3jETGsWGrr+NGa4GtGBTtI=",
+           "dev": true,
+           "requires": {
 -            "co": "4.6.0",
 -            "fast-deep-equal": "1.0.0",
 -            "json-schema-traverse": "0.3.1",
 -            "json-stable-stringify": "1.0.1"
++            "co": "^4.6.0",
++            "fast-deep-equal": "^1.0.0",
++            "json-schema-traverse": "^0.3.0",
++            "json-stable-stringify": "^1.0.1"
+           }
+         }
+       }
+     },
+     "has-ansi": {
+       "version": "2.0.0",
+       "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+       "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+       "dev": true,
+       "requires": {
 -        "ansi-regex": "2.1.1"
++        "ansi-regex": "^2.0.0"
+       }
+     },
+     "has-binary": {
+       "version": "0.1.7",
+       "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz",
+       "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=",
+       "dev": true,
+       "requires": {
+         "isarray": "0.0.1"
+       },
+       "dependencies": {
+         "isarray": {
+           "version": "0.0.1",
+           "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+           "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+           "dev": true
+         }
+       }
+     },
+     "has-cors": {
+       "version": "1.1.0",
+       "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
+       "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=",
+       "dev": true
+     },
+     "has-flag": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+       "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+       "dev": true
+     },
+     "has-unicode": {
+       "version": "2.0.1",
+       "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+       "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+       "dev": true
+     },
+     "has-value": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+       "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+       "dev": true,
+       "requires": {
 -        "get-value": "2.0.6",
 -        "has-values": "1.0.0",
 -        "isobject": "3.0.1"
++        "get-value": "^2.0.6",
++        "has-values": "^1.0.0",
++        "isobject": "^3.0.0"
+       },
+       "dependencies": {
+         "isobject": {
+           "version": "3.0.1",
+           "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+           "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+           "dev": true
+         }
+       }
+     },
+     "has-values": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+       "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+       "dev": true,
+       "requires": {
 -        "is-number": "3.0.0",
 -        "kind-of": "4.0.0"
++        "is-number": "^3.0.0",
++        "kind-of": "^4.0.0"
+       },
+       "dependencies": {
+         "is-number": {
+           "version": "3.0.0",
+           "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+           "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+           "dev": true,
+           "requires": {
 -            "kind-of": "3.2.2"
++            "kind-of": "^3.0.2"
+           },
+           "dependencies": {
+             "kind-of": {
+               "version": "3.2.2",
+               "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+               "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+               "dev": true,
+               "requires": {
 -                "is-buffer": "1.1.5"
++                "is-buffer": "^1.1.5"
+               }
+             }
+           }
+         },
+         "kind-of": {
+           "version": "4.0.0",
+           "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+           "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+           "dev": true,
+           "requires": {
 -            "is-buffer": "1.1.5"
++            "is-buffer": "^1.1.5"
+           }
+         }
+       }
+     },
+     "hash-base": {
+       "version": "3.0.4",
+       "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+       "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+       "dev": true,
+       "requires": {
 -        "inherits": "2.0.3",
 -        "safe-buffer": "5.1.1"
++        "inherits": "^2.0.1",
++        "safe-buffer": "^5.0.1"
+       }
+     },
+     "hash.js": {
+       "version": "1.1.7",
+       "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+       "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+       "dev": true,
+       "requires": {
 -        "inherits": "2.0.3",
 -        "minimalistic-assert": "1.0.1"
++        "inherits": "^2.0.3",
++        "minimalistic-assert": "^1.0.1"
+       }
+     },
+     "hawk": {
+       "version": "6.0.2",
+       "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz",
+       "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
+       "dev": true,
+       "requires": {
 -        "boom": "4.3.1",
 -        "cryptiles": "3.1.2",
 -        "hoek": "4.2.0",
 -        "sntp": "2.0.2"
++        "boom": "4.x.x",
++        "cryptiles": "3.x.x",
++        "hoek": "4.x.x",
++        "sntp": "2.x.x"
+       }
+     },
+     "hmac-drbg": {
+       "version": "1.0.1",
+       "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+       "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+       "dev": true,
+       "requires": {
 -        "hash.js": "1.1.7",
 -        "minimalistic-assert": "1.0.1",
 -        "minimalistic-crypto-utils": "1.0.1"
++        "hash.js": "^1.0.3",
++        "minimalistic-assert": "^1.0.0",
++        "minimalistic-crypto-utils": "^1.0.1"
+       }
+     },
+     "hoek": {
+       "version": "4.2.0",
+       "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz",
+       "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==",
+       "dev": true
+     },
+     "hosted-git-info": {
+       "version": "2.5.0",
+       "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz",
+       "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==",
+       "dev": true
+     },
+     "hpack.js": {
+       "version": "2.1.6",
+       "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
+       "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
+       "dev": true,
+       "requires": {
 -        "inherits": "2.0.3",
 -        "obuf": "1.1.2",
 -        "readable-stream": "2.3.3",
 -        "wbuf": "1.7.3"
++        "inherits": "^2.0.1",
++        "obuf": "^1.0.0",
++        "readable-stream": "^2.0.1",
++        "wbuf": "^1.1.0"
+       }
+     },
+     "html-entities": {
+       "version": "1.2.1",
+       "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
+       "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=",
+       "dev": true
+     },
+     "http-cache-semantics": {
+       "version": "3.8.1",
+       "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz",
+       "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==",
+       "dev": true
+     },
+     "http-deceiver": {
+       "version": "1.2.7",
+       "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
+       "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
+       "dev": true
+     },
+     "http-errors": {
+       "version": "1.6.2",
+       "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
+       "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=",
+       "dev": true,
+       "requires": {
+         "depd": "1.1.1",
+         "inherits": "2.0.3",
+         "setprototypeof": "1.0.3",
 -        "statuses": "1.3.1"
++        "statuses": ">= 1.3.1 < 2"
+       },
+       "dependencies": {
+         "setprototypeof": {
+           "version": "1.0.3",
+           "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz",
+           "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=",
+           "dev": true
+         }
+       }
+     },
+     "http-parser-js": {
+       "version": "0.5.0",
+       "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz",
+       "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==",
+       "dev": true
+     },
+     "http-proxy": {
+       "version": "1.16.2",
+       "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz",
+       "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=",
+       "dev": true,
+       "requires": {
 -        "eventemitter3": "1.2.0",
 -        "requires-port": "1.0.0"
++        "eventemitter3": "1.x.x",
++        "requires-port": "1.x.x"
+       }
+     },
+     "http-proxy-agent": {
+       "version": "2.1.0",
+       "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz",
+       "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==",
+       "dev": true,
+       "requires": {
 -        "agent-base": "4.2.1",
++        "agent-base": "4",
+         "debug": "3.1.0"
+       },
+       "dependencies": {
+         "agent-base": {
+           "version": "4.2.1",
+           "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz",
+           "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==",
+           "dev": true,
+           "requires": {
 -            "es6-promisify": "5.0.0"
++            "es6-promisify": "^5.0.0"
+           }
+         },
+         "debug": {
+           "version": "3.1.0",
+           "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+           "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+           "dev": true,
+           "requires": {
+             "ms": "2.0.0"
+           }
+         }
+       }
+     },
+     "http-proxy-middleware": {
+       "version": "0.18.0",
+       "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz",
+       "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==",
+       "dev": true,
+       "requires": {
 -        "http-proxy": "1.16.2",
 -        "is-glob": "4.0.0",
 -        "lodash": "4.17.11",
 -        "micromatch": "3.1.10"
++        "http-proxy": "^1.16.2",
++        "is-glob": "^4.0.0",
++        "lodash": "^4.17.5",
++        "micromatch": "^3.1.9"
+       },
+       "dependencies": {
+         "arr-diff": {
+           "version": "4.0.0",
+           "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+           "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+           "dev": true
+         },
+         "array-unique": {
+           "version": "0.3.2",
+           "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+           "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+           "dev": true
+         },
+         "braces": {
+           "version": "2.3.2",
+           "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+           "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+           "dev": true,
+           "requires": {
 -            "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.2",
 -            "snapdragon": "0.8.2",
 -            "snapdragon-node": "2.1.1",
 -            "split-string": "3.1.0",
 -            "to-regex": "3.0.2"
++            "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.2",
++            "snapdragon": "^0.8.1",
++            "snapdragon-node": "^2.0.1",
++            "split-string": "^3.0.2",
++            "to-regex": "^3.0.1"
+           },
+           "dependencies": {
+             "extend-shallow": {
+               "version": "2.0.1",
+               "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+               "dev": true,
+               "requires": {
 -                "is-extendable": "0.1.1"
++                "is-extendable": "^0.1.0"
+               }
+             }
+           }
+         },
+         "expand-brackets": {
+           "version": "2.1.4",
+           "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+           "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+           "dev": true,
+           "requires": {
 -            "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"
++            "debug": "^2.3.3",
++            "define-property": "^0.2.5",
++            "extend-shallow": "^2.0.1",
++            "posix-character-classes": "^0.1.0",
++            "regex-not": "^1.0.0",
++            "snapdragon": "^0.8.1",
++            "to-regex": "^3.0.1"
+           },
+           "dependencies": {
+             "define-property": {
+               "version": "0.2.5",
+               "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+               "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+               "dev": true,
+               "requires": {
 -                "is-descriptor": "0.1.6"
++                "is-descriptor": "^0.1.0"
+               }
+             },
+             "extend-shallow": {
+               "version": "2.0.1",
+               "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+               "dev": true,
+               "requires": {
 -                "is-extendable": "0.1.1"
++                "is-extendable": "^0.1.0"
+               }
+             },
+             "is-accessor-descriptor": {
+               "version": "0.1.6",
+               "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+               "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+               "dev": true,
+               "requires": {
 -                "kind-of": "3.2.2"
++                "kind-of": "^3.0.2"
+               },
+               "dependencies": {
+                 "kind-of": {
+                   "version": "3.2.2",
+                   "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+                   "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+                   "dev": true,
+                   "requires": {
 -                    "is-buffer": "1.1.5"
++                    "is-buffer": "^1.1.5"
+                   }
+                 }
+               }
+             },
+             "is-data-descriptor": {
+               "version": "0.1.4",
+               "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+               "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+               "dev": true,
+               "requires": {
 -                "kind-of": "3.2.2"
++                "kind-of": "^3.0.2"
+               },
+               "dependencies": {
+                 "kind-of": {
+                   "version": "3.2.2",
+                   "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+                   "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+                   "dev": true,
+                   "requires": {
 -                    "is-buffer": "1.1.5"
++                    "is-buffer": "^1.1.5"
+                   }
+                 }
+               }
+             },
+             "is-descriptor": {
+               "version": "0.1.6",
+               "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+               "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+               "dev": true,
+               "requires": {
 -                "is-accessor-descriptor": "0.1.6",
 -                "is-data-descriptor": "0.1.4",
 -                "kind-of": "5.1.0"
++                "is-accessor-descriptor": "^0.1.6",
++                "is-data-descriptor": "^0.1.4",
++                "kind-of": "^5.0.0"
+               }
+             },
+             "kind-of": {
+               "version": "5.1.0",
+               "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+               "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+               "dev": true
+             }
+           }
+         },
+         "extglob": {
+           "version": "2.0.4",
+           "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+           "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+           "dev": true,
+           "requires": {
 -            "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"
++            "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.0",
++            "snapdragon": "^0.8.1",
++            "to-regex": "^3.0.1"
+           },
+           "dependencies": {
+             "define-property": {
+               "version": "1.0.0",
+               "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+               "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+               "dev": true,
+               "requires": {
 -                "is-descriptor": "1.0.2"
++                "is-descriptor": "^1.0.0"
+               }
+             },
+             "extend-shallow": {
+               "version": "2.0.1",
+               "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+               "dev": true,
+               "requires": {
 -                "is-extendable": "0.1.1"
++                "is-extendable": "^0.1.0"
+               }
+             }
+           }
+         },
+         "fill-range": {
+           "version": "4.0.0",
+           "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+           "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+           "dev": true,
+           "requires": {
 -            "extend-shallow": "2.0.1",
 -            "is-number": "3.0.0",
 -            "repeat-string": "1.6.1",
 -            "to-regex-range": "2.1.1"
++            "extend-shallow": "^2.0.1",
++            "is-number": "^3.0.0",
++            "repeat-string": "^1.6.1",
++            "to-regex-range": "^2.1.0"
+           },
+           "dependencies": {
+             "extend-shallow": {
+               "version": "2.0.1",
+               "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+               "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+               "dev": true,
+               "requires": {
 -                "is-extendable": "0.1.1"
++                "is-extendable": "^0.1.0"
+               }
+             }
+           }
+         },
+         "is-accessor-descriptor": {
+           "version": "1.0.0",
+           "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+           "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+           "dev": true,
+           "requires": {
 -            "kind-of": "6.0.2"
++            "kind-of": "^6.0.0"
+           }
+         },
+         "is-data-descriptor": {
+           "version": "1.0.0",
+           "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+           "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+           "dev": true,
+           "requires": {
 -            "kind-of": "6.0.2"
++            "kind-of": "^6.0.0"
+           }
+         },
+         "is-descriptor": {
+           "version": "1.0.2",
+           "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+           "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+           "dev": true,
+           "requires": {
 -            "is-accessor-descriptor": "1.0.0",
 -            "is-data-descriptor": "1.0.0",
 -            "kind-of": "6.0.2"
++            "is-accessor-descriptor": "^1.0.0",
++            "is-data-descriptor": "^1.0.0",
++            "kind-of": "^6.0.2"
+           }
+         },
+         "is-extglob": {
+           "version": "2.1.1",
+           "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+           "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+           "dev": true
+         },
+         "is-glob": {
+           "version": "4.0.0",
+           "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+           "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+           "dev": true,
+           "requires": {
 -            "is-extglob": "2.1.1"
++            "is-extglob": "^2.1.1"
+           }
+         },
+         "is-number": {
+           "version": "3.0.0",
+           "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+           "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+           "dev": true,
+           "requires": {
 -            "kind-of": "3.2.2"
++            "kind-of": "^3.0.2"
+           },
+           "dependencies": {
+             "kind-of": {
+               "version": "3.2.2",
+               "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+               "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+               "dev": true,
+               "requires": {
 -                "is-buffer": "1.1.5"
++                "is-buffer": "^1.1.5"
+               }
+             }
+           }
+         },
+         "isobject": {
+           "version": "3.0.1",
+           "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+           "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+           "dev": true
+         },
+         "kind-of": {
+           "version": "6.0.2",
+           "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+           "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+           "dev": true
+         },
+         "lodash": {
+           "version": "4.17.11",
+           "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+           "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+           "dev": true
+         },
+         "micromatch": {
+           "version": "3.1.10",
+           "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+           "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+           "dev": true,
+           "requires": {
 -            "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.2",
 -            "nanomatch": "1.2.13",
 -            "object.pick": "1.3.0",
 -            "regex-not": "1.0.2",
 -            "snapdragon": "0.8.2",
 -            "to-regex": "3.0.2"
++            "arr-diff": "^4.0.0",
++            "array-unique": "^0.3.2",
++            "braces": "^2.3.1",
++            "define-property": "^2.0.2",
++            "extend-shallow": "^3.0.2",
++            "extglob": "^2.0.4",
++            "fragment-cache": "^0.2.1",
++            "kind-of": "^6.0.2",
++            "nanomatch": "^1.2.9",
++            "object.pick": "^1.3.0",
++            "regex-not": "^1.0.0",
++            "snapdragon": "^0.8.1",
++            "to-regex": "^3.0.2"
+           }
+         }
+       }
+     },
+     "http-signature": {
+       "version": "1.2.0",
+       "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+       "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+       "dev": true,
+       "requires": {
 -        "assert-plus": "1.0.0",
 -        "jsprim": "1.4.1",
 -        "sshpk": "1.13.1"
++        "assert-plus": "^1.0.0",
++        "jsprim": "^1.2.2",
++        "sshpk": "^1.7.0"
+       }
+     },
+     "https-browserify": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+       "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
+       "dev": true
+     },
+     "https-proxy-agent": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz",
+       "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=",
+       "dev": true,
+       "requires": {
 -        "agent-base": "2.1.1",
 -        "debug": "2.6.9",
 -        "extend": "3.0.1"
++        "agent-base": "2",
++        "debug": "2",
++        "extend": "3"
+       }
+     },
+     "humanize-ms": {
+       "version": "1.2.1",
+       "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
+       "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=",
+       "dev": true,
+       "requires": {
 -        "ms": "2.0.0"
++        "ms": "^2.0.0"
+       }
+     },
+     "iconv-lite": {
+       "version": "0.4.19",
+       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
+       "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==",
+       "dev": true
+     },
+     "ieee754": {
+       "version": "1.1.12",
+       "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz",
+       "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==",
+       "dev": true
+     },
+     "iferr": {
+       "version": "0.1.5",
+       "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+       "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
+       "dev": true
+     },
+     "ignore": {
+       "version": "3.3.10",
+       "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
+       "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
+       "dev": true
+     },
+     "ignore-walk": {
+       "version": "3.0.1",
+       "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz",
+       "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==",
+       "dev": true,
+       "requires": {
 -        "minimatch": "3.0.4"
++        "minimatch": "^3.0.4"
+       }
+     },
+     "image-size": {
+       "version": "0.5.5",
+       "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
+       "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
+       "dev": true,
+       "optional": true
+     },
+     "import-cwd": {
+       "version": "2.1.0",
+       "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
+       "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=",
+       "dev": true,
+       "requires": {
 -        "import-from": "2.1.0"
++        "import-from": "^2.1.0"
+       }
+     },
+     "import-from": {
+       "version": "2.1.0",
+       "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz",
+       "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
+       "dev": true,
+       "requires": {
 -        "resolve-from": "3.0.0"
++        "resolve-from": "^3.0.0"
+       }
+     },
+     "import-local": {
+       "version": "2.0.0",
+       "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
+       "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
+       "dev": true,
+       "requires": {
 -        "pkg-dir": "3.0.0",
 -        "resolve-cwd": "2.0.0"
++        "pkg-dir": "^3.0.0",
++        "resolve-cwd": "^2.0.0"
+       },
+       "dependencies": {
+         "find-up": {
+           "version": "3.0.0",
+           "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+           "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+           "dev": true,
+           "requires": {
 -            "locate-path": "3.0.0"
++            "locate-path": "^3.0.0"
+           }
+         },
+         "locate-path": {
+           "version": "3.0.0",
+           "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+           "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+           "dev": true,
+           "requires": {
 -            "p-locate": "3.0.0",
 -            "path-exists": "3.0.0"
++            "p-locate": "^3.0.0",
++            "path-exists": "^3.0.0"
+           }
+         },
+         "p-limit": {
+           "version": "2.1.0",
+           "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz",
+           "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==",
+           "dev": true,
+           "requires": {
 -            "p-try": "2.0.0"
++            "p-try": "^2.0.0"
+           }
+         },
+         "p-locate": {
+           "version": "3.0.0",
+           "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+           "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+           "dev": true,
+           "requires": {
 -            "p-limit": "2.1.0"
++            "p-limit": "^2.0.0"
+           }
+         },
+         "p-try": {
+           "version": "2.0.0",
+           "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
+           "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
+           "dev": true
+         },
+         "path-exists": {
+           "version": "3.0.0",
+           "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+           "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+           "dev": true
+         },
+         "pkg-dir": {
+           "version": "3.0.0",
+           "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+           "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+           "dev": true,
+           "requires": {
 -            "find-up": "3.0.0"
++            "find-up": "^3.0.0"
+           }
+         }
+       }
+     },
+     "imurmurhash": {
+       "version": "0.1.4",
+       "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+       "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+       "dev": true
+     },
+     "in-publish": {
+       "version": "2.0.0",
+       "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz",
+       "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=",
+       "dev": true
+     },
+     "indent-string": {
+       "version": "2.1.0",
+       "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+       "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+       "dev": true,
+       "requires": {
 -        "repeating": "2.0.1"
++        "repeating": "^2.0.0"
+       }
+     },
+     "indexof": {
+       "version": "0.0.1",
+       "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+       "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+       "dev": true
+     },
+     "inflight": {
+       "version": "1.0.6",
+       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+       "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+       "dev": true,
+       "requires": {
 -        "once": "1.4.0",
 -        "wrappy": "1.0.2"
++        "once": "^1.3.0",
++        "wrappy": "1"
+       }
+     },
+     "inherits": {
+       "version": "2.0.3",
+       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+       "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+       "dev": true
+     },
+     "ini": {
+       "version": "1.3.4",
+       "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz",
+       "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=",
+       "dev": true
+     },
+     "inquirer": {
+       "version": "6.2.1",
+       "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz",
+       "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==",
+       "dev": true,
+       "requires": {
 -        "ansi-escapes": "3.2.0",
 -        "chalk": "2.4.2",
 -        "cli-cursor": "2.1.0",
 -        "cli-width": "2.2.0",
 -        "external-editor": "3.0.3",
 -        "figures": "2.0.0",
 -        "lodash": "4.17.11",
++        "ansi-escapes": "^3.0.0",
++        "chalk": "^2.0.0",
++        "cli-cursor": "^2.1.0",
++        "cli-width": "^2.0.0",
++        "external-editor": "^3.0.0",
++        "figures": "^2.0.0",
++        "lodash": "^4.17.10",
+         "mute-stream": "0.0.7",
 -        "run-async": "2.3.0",
 -        "rxjs": "6.4.0",
 -        "string-width": "2.1.1",
 -        "strip-ansi": "5.0.0",
 -        "through": "2.3.8"
++        "run-async": "^2.2.0",
++        "rxjs": "^6.1.0",
++        "string-width": "^2.1.0",
++        "strip-ansi": "^5.0.0",
++        "through": "^2.3.6"
+       },
+       "dependencies": {
+         "ansi-regex": {
+           "version": "4.0.0",
+           "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz",
+           "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==",
+           "dev": true
+         },
+         "ansi-styles": {
+           "version": "3.2.1",
+           "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+           "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+           "dev": true,
+           "requires": {
 -            "color-convert": "1.9.3"
++            "color-convert": "^1.9.0"
+           }
+         },
+         "chalk": {
+           "version": "2.4.2",
+           "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+           "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+           "dev": true,
+           "requires": {
 -            "ansi-styles": "3.2.1",
 -            "escape-string-regexp": "1.0.5",
 -            "supports-color": "5.5.0"
++            "ansi-styles": "^3.2.1",
++            "escape-string-regexp": "^1.0.5",
++            "supports-color": "^5.3.0"
+           }
+         },
+         "has-flag": {
+           "version": "3.0.0",
+           "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+           "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+           "dev": true
+         },
+         "lodash": {
+           "version": "4.17.11",
+           "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+           "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+           "dev": true
+         },
+         "rxjs": {
+           "version": "6.4.0",
+           "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz",
+           "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==",
+           "dev": true,
+           "requires": {
 -            "tslib": "1.9.3"
++            "tslib": "^1.9.0"
+           }
+         },
+         "strip-ansi": {
+           "version": "5.0.0",
+           "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz",
+           "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==",
+           "dev": true,
+           "requires": {
 -            "ansi-regex": "4.0.0"
++            "ansi-regex": "^4.0.0"
+           }
+         },
+         "supports-color": {
+           "version": "5.5.0",
+           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+           "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+           "dev": true,
+           "requires": {
 -            "has-flag": "3.0.0"
++            "has-flag": "^3.0.0"
+           }
+         }
+       }
+     },
+     "internal-ip": {
+       "version": "3.0.1",
+       "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-3.0.1.tgz",
+       "integrity": "sha512-NXXgESC2nNVtU+pqmC9e6R8B1GpKxzsAQhffvh5AL79qKnodd+L7tnEQmTiUAVngqLalPbSqRA7XGIEL5nCd0Q==",
+       "dev": true,
+       "requires": {
 -        "default-gateway": "2.7.2",
 -        "ipaddr.js": "1.8.0"
++        "default-gateway": "^2.6.0",
++        "ipaddr.js": "^1.5.2"
+       }
+     },
+     "interpret": {
+       "version": "1.2.0",
+       "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
+       "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==",
+       "dev": true
+     },
+     "invariant": {
+       "version": "2.2.2",
+       "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
+       "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+       "dev": true,
+       "requires": {
 -        "loose-envify": "1.3.1"
++        "loose-envify": "^1.0.0"
+       }
+     },
+     "invert-kv": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+       "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+       "dev": true
+     },
+     "ip": {
+       "version": "1.1.5",
+       "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
+       "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+       "dev": true
+     },
+     "ip-regex": {
+       "version": "2.1.0",
+       "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
+       "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
+       "dev": true
+     },
+     "ipaddr.js": {
+       "version": "1.8.0",
+       "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz",
+       "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=",
+       "dev": true
+     },
+     "is-accessor-descriptor": {
+       "version": "0.1.6",
+       "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+       "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+       "dev": true,
+       "requires": {
 -        "kind-of": "3.2.2"
++        "kind-of": "^3.0.2"
+       }
+     },
+     "is-arrayish": {
+       "version": "0.2.1",
+       "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+       "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+       "dev": true
+     },
+     "is-binary-path": {
+       "version": "1.0.1",
+       "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+       "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+       "dev": true,
+       "requires": {
 -        "binary-extensions": "1.10.0"
++        "binary-extensions": "^1.0.0"
+       }
+     },
+     "is-buffer": {
+       "version": "1.1.5",
+       "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz",
+       "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=",
+       "dev": true
+     },
+     "is-builtin-module": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+       "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+       "dev": true,
+       "requires": {
 -        "builtin-modules": "1.1.1"
++        "builtin-modules": "^1.0.0"
+       }
+     },
+     "is-data-descriptor": {
+       "version": "0.1.4",
+       "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+       "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+       "dev": true,
+       "requires": {
 -        "kind-of": "3.2.2"
++        "kind-of": "^3.0.2"
+       }
+     },
+     "is-descriptor": {
+       "version": "0.1.6",
+       "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+       "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+       "dev": true,
+       "requires": {
 -        "is-accessor-descriptor": "0.1.6",
 -        "is-data-descriptor": "0.1.4",
 -        "kind-of": "5.1.0"
++        "is-accessor-descriptor": "^0.1.6",
++        "is-data-descriptor": "^0.1.4",
++        "kind-of": "^5.0.0"
+       },
+       "dependencies": {
+         "kind-of": {
+           "version": "5.1.0",
+           "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+           "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+           "dev": true
+         }
+       }
+     },
+     "is-directory": {
+       "version": "0.3.1",
+       "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+       "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
+       "dev": true
+     },
+     "is-dotfile": {
+       "version": "1.0.3",
+       "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+       "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
+       "dev": true
+     },
+     "is-equal-shallow": {
+       "version": "0.1.3",
+       "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+       "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+       "dev": true,
+       "requires": {
 -        "is-primitive": "2.0.0"
++        "is-primitive": "^2.0.0"
+       }
+     },
+     "is-extendable": {
+       "version": "0.1.1",
+       "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+       "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+       "dev": true
+     },
+     "is-extglob": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+       "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+       "dev": true
+     },
+     "is-finite": {
+       "version": "1.0.2",
+       "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+       "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+       "dev": true,
+       "requires": {
 -        "number-is-nan": "1.0.1"
++        "number-is-nan": "^1.0.0"
+       }
+     },
+     "is-fullwidth-code-point": {
+       "version": "2.0.0",
+       "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+       "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+       "dev": true
+     },
+     "is-glob": {
+       "version": "2.0.1",
+       "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+       "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+       "dev": true,
+       "requires": {
 -        "is-extglob": "1.0.0"
++        "is-extglob": "^1.0.0"
+       }
+     },
+     "is-number": {
+       "version": "2.1.0",
+       "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+       "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+       "dev": true,
+       "requires": {
 -        "kind-of": "3.2.2"
++        "kind-of": "^3.0.2"
+       }
+     },
+     "is-path-cwd": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+       "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+       "dev": true
+     },
+     "is-path-in-cwd": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz",
+       "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=",
+       "dev": true,
+       "requires": {
 -        "is-path-inside": "1.0.0"
++        "is-path-inside": "^1.0.0"
+       }
+     },
+     "is-path-inside": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz",
+       "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=",
+       "dev": true,
+       "requires": {
 -        "path-is-inside": "1.0.2"
++        "path-is-inside": "^1.0.1"
+       }
+     },
+     "is-plain-object": {
+       "version": "2.0.4",
+       "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+       "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+       "dev": true,
+       "requires": {
 -        "isobject": "3.0.1"
++        "isobject": "^3.0.1"
+       },
+       "dependencies": {
+         "isobject": {
+           "version": "3.0.1",
+           "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+           "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+           "dev": true
+         }
+       }
+     },
+     "is-posix-bracket": {
+       "version": "0.1.1",
+       "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+       "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
+       "dev": true
+     },
+     "is-primitive": {
+       "version": "2.0.0",
+       "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+       "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
+       "dev": true
+     },
+     "is-promise": {
+       "version": "2.1.0",
+       "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+       "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+       "dev": true
+     },
+     "is-stream": {
+       "version": "1.1.0",
+       "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+       "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+       "dev": true
+     },
+     "is-typedarray": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+       "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+       "dev": true
+     },
+     "is-utf8": {
+       "version": "0.2.1",
+       "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+       "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+       "dev": true
+     },
+     "is-windows": {
+       "version": "1.0.2",
+       "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+       "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+       "dev": true
+     },
+     "is-wsl": {
+       "version": "1.1.0",
+       "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+       "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+       "dev": true
+     },
+     "isarray": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+       "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+       "dev": true
+     },
+     "isbinaryfile": {
+       "version": "3.0.2",
+       "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz",
+       "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=",
+       "dev": true
+     },
+     "isexe": {
+       "version": "2.0.0",
+       "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+       "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+       "dev": true
+     },
+     "isobject": {
+       "version": "2.1.0",
+       "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+       "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+       "dev": true,
+       "requires": {
+         "isarray": "1.0.0"
+       }
+     },
+     "isstream": {
+       "version": "0.1.2",
+       "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+       "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+       "dev": true
+     },
+     "istanbul": {
+       "version": "0.4.5",
+       "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz",
+       "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=",
+       "dev": true,
+       "requires": {
 -        "abbrev": "1.0.9",
 -        "async": "1.5.2",
 -        "escodegen": "1.8.1",
 -        "esprima": "2.7.3",
 -        "glob": "5.0.15",
 -        "handlebars": "4.0.12",
 -        "js-yaml": "3.7.0",
 -        "mkdirp": "0.5.1",
 -        "nopt": "3.0.6",
 -        "once": "1.4.0",
 -        "resolve": "1.1.7",
 -        "supports-color": "3.2.3",
 -        "which": "1.3.0",
 -        "wordwrap": "1.0.0"
++        "abbrev": "1.0.x",
++        "async": "1.x",
++        "escodegen": "1.8.x",
++        "esprima": "2.7.x",
++        "glob": "^5.0.15",
++        "handlebars": "^4.0.1",
++        "js-yaml": "3.x",
++        "mkdirp": "0.5.x",
++        "nopt": "3.x",
++        "once": "1.x",
++        "resolve": "1.1.x",
++        "supports-color": "^3.1.0",
++        "which": "^1.1.1",
++        "wordwrap": "^1.0.0"
+       },
+       "dependencies": {
+         "abbrev": {
+           "version": "1.0.9",
+           "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz",
+           "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=",
+           "dev": true
+         },
+         "async": {
+           "version": "1.5.2",
+           "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+           "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+           "dev": true
+         },
+         "glob": {
+           "version": "5.0.15",
+           "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+           "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
+           "dev": true,
+           "requires": {
 -            "inflight": "1.0.6",
 -            "inherits": "2.0.3",
 -            "minimatch": "3.0.4",
 -            "once": "1.4.0",
 -            "path-is-absolute": "1.0.1"
++            "inflight": "^1.0.4",
++            "inherits": "2",
++            "minimatch": "2 || 3",
++            "once": "^1.3.0",
++            "path-is-absolute": "^1.0.0"
+           }
+         },
+         "resolve": {
+           "version": "1.1.7",
+           "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+           "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
+           "dev": true
+         },
+         "wordwrap": {
+           "version": "1.0.0",
+           "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+           "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+           "dev": true
+         }
+       }
+     },
+     "istanbul-api": {
+       "version": "1.1.14",
+       "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.1.14.tgz",
+       "integrity": "sha1-JbxXAffGgMD//5E95G42GaOm5oA=",
+       "dev": true,
+       "requires": {
 -        "async": "2.5.0",
 -        "fileset": "2.0.3",
 -        "istanbul-lib-coverage": "1.1.1",
 -        "istanbul-lib-hook": "1.0.7",
 -        "istanbul-lib-instrument": "1.8.0",
 -        "istanbul-lib-report": "1.1.1",
 -        "istanbul-lib-source-maps": "1.2.1",
 -        "istanbul-reports": "1.1.2",
 -        "js-yaml": "3.7.0",
 -        "mkdirp": "0.5.1",
 -        "once": "1.4.0"
++        "async": "^2.1.4",
++        "fileset": "^2.0.2",
++        "istanbul-lib-coverage": "^1.1.1",
++        "istanbul-lib-hook": "^1.0.7",
++        "istanbul-lib-instrument": "^1.8.0",
++        "istanbul-lib-report": "^1.1.1",
++        "istanbul-lib-source-maps": "^1.2.1",
++        "istanbul-reports": "^1.1.2",
++        "js-yaml": "^3.7.0",
++        "mkdirp": "^0.5.1",
++        "once": "^1.4.0"
+       }
+     },
+     "istanbul-instrumenter-loader": {
+       "version": "3.0.1",
+       "resolved": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-3.0.1.tgz",
+       "integrity": "sha512-a5SPObZgS0jB/ixaKSMdn6n/gXSrK2S6q/UfRJBT3e6gQmVjwZROTODQsYW5ZNwOu78hG62Y3fWlebaVOL0C+w==",
+       "dev": true,
+       "requires": {
 -        "convert-source-map": "1.6.0",
 -        "istanbul-lib-instrument": "1.8.0",
 -        "loader-utils": "1.2.3",
 -        "schema-utils": "0.3.0"
++        "convert-source-map": "^1.5.0",
++        "istanbul-lib-instrument": "^1.7.3",
++        "loader-utils": "^1.1.0",
++        "schema-utils": "^0.3.0"
+       },
+       "dependencies": {
+         "ajv": {
+           "version": "5.5.2",
+           "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+           "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+           "dev": true,
+           "requires": {
 -            "co": "4.6.0",
 -            "fast-deep-equal": "1.0.0",
 -            "fast-json-stable-stringify": "2.0.0",
 -            "json-schema-traverse": "0.3.1"
++            "co": "^4.6.0",
++            "fast-deep-equal": "^1.0.0",
++            "fast-json-stable-stringify": "^2.0.0",
++            "json-schema-traverse": "^0.3.0"
+           }
+         },
+         "schema-utils": {
+           "version": "0.3.0",
+           "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz",
+           "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=",
+           "dev": true,
+           "requires": {
 -            "ajv": "5.5.2"
++            "ajv": "^5.0.0"
+           }
+         }
+       }
+     },
+     "istanbul-lib-coverage": {
+       "version": "1.1.1",
+       "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz",
+       "integrity": "sha512-0+1vDkmzxqJIn5rcoEqapSB4DmPxE31EtI2dF2aCkV5esN9EWHxZ0dwgDClivMXJqE7zaYQxq30hj5L0nlTN5Q==",
+       "dev": true
+     },
+     "istanbul-lib-hook": {
+       "version": "1.0.7",
+       "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz",
+       "integrity": "sha512-3U2HB9y1ZV9UmFlE12Fx+nPtFqIymzrqCksrXujm3NVbAZIJg/RfYgO1XiIa0mbmxTjWpVEVlkIZJ25xVIAfkQ==",
+       "dev": true,
+       "requires": {
 -        "append-transform": "0.4.0"
++        "append-transform": "^0.4.0"
+       }
+     },
+     "istanbul-lib-instrument": {
+       "version": "1.8.0",
+       "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.8.0.tgz",
+       "integrity": "sha1-ZvbJQhzJ7EcE928tsIS6kHiitTI=",
+       "dev": true,
+       "requires": {
 -        "babel-generator": "6.26.0",
 -        "babel-template": "6.26.0",
 -        "babel-traverse": "6.26.0",
 -        "babel-types": "6.26.0",
 -        "babylon": "6.18.0",
 -        "istanbul-lib-coverage": "1.1.1",
 -        "semver": "5.4.1"
++        "babel-generator": "^6.18.0",
++        "babel-template": "^6.16.0",
++        "babel-traverse": "^6.18.0",
++        "babel-types": "^6.18.0",
++        "babylon": "^6.18.0",
++        "istanbul-lib-coverage": "^1.1.1",
++        "semver": "^5.3.0"
+       }
+     },
+     "istanbul-lib-report": {
+       "version": "1.1.1",
+       "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz",
+       "integrity": "sha512-tvF+YmCmH4thnez6JFX06ujIA19WPa9YUiwjc1uALF2cv5dmE3It8b5I8Ob7FHJ70H9Y5yF+TDkVa/mcADuw1Q==",
+       "dev": true,
+       "requires": {
 -        "istanbul-lib-coverage": "1.1.1",
 -        "mkdirp": "0.5.1",
 -        "path-parse": "1.0.5",
 -        "supports-color": "3.2.3"
++        "istanbul-lib-coverage": "^1.1.1",
++        "mkdirp": "^0.5.1",
++        "path-parse": "^1.0.5",
++        "supports-color": "^3.1.2"
+       }
+     },
+     "istanbul-lib-source-maps": {
+       "version": "1.2.1",
+       "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz",
+       "integrity": "sha512-mukVvSXCn9JQvdJl8wP/iPhqig0MRtuWuD4ZNKo6vB2Ik//AmhAKe3QnPN02dmkRe3lTudFk3rzoHhwU4hb94w==",
+       "dev": true,
+       "requires": {
 -        "debug": "2.6.9",
 -        "istanbul-lib-coverage": "1.1.1",
 -        "mkdirp": "0.5.1",
 -        "rimraf": "2.6.2",
 -        "source-map": "0.5.7"
++        "debug": "^2.6.3",
++        "istanbul-lib-coverage": "^1.1.1",
++        "mkdirp": "^0.5.1",
++        "rimraf": "^2.6.1",
++        "source-map": "^0.5.3"
+       }
+     },
+     "istanbul-reports": {
+       "version": "1.1.2",
+       "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.2.tgz",
+       "integrity": "sha1-D7Lj9qqZIr085F0F2KtNXo4HvU8=",
+       "dev": true,
+       "requires": {
 -        "handlebars": "4.0.10"
++        "handlebars": "^4.0.3"
+       },
+       "dependencies": {
+         "async": {
+           "version": "1.5.2",
+           "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+           "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+           "dev": true
+         },
+         "camelcase": {
+           "version": "1.2.1",
+           "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+           "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=",
+           "dev": true,
+           "optional": true
+         },
+         "cliui": {
+           "version": "2.1.0",
+           "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+           "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "center-align": "0.1.3",
 -            "right-align": "0.1.3",
++            "center-align": "^0.1.1",
++            "right-align": "^0.1.1",
+             "wordwrap": "0.0.2"
+           },
+           "dependencies": {
+             "wordwrap": {
+               "version": "0.0.2",
+               "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+               "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=",
+               "dev": true,
+               "optional": true
+             }
+           }
+         },
+         "handlebars": {
+           "version": "4.0.10",
+           "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz",
+           "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=",
+           "dev": true,
+           "requires": {
 -            "async": "1.5.2",
 -            "optimist": "0.6.1",
 -            "source-map": "0.4.4",
 -            "uglify-js": "2.8.29"
++            "async": "^1.4.0",
++            "optimist": "^0.6.1",
++            "source-map": "^0.4.4",
++            "uglify-js": "^2.6"
+           }
+         },
+         "minimist": {
+           "version": "0.0.10",
+           "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
+           "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
+           "dev": true
+         },
+         "optimist": {
+           "version": "0.6.1",
+           "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+           "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+           "dev": true,
+           "requires": {
 -            "minimist": "0.0.10",
 -            "wordwrap": "0.0.3"
++            "minimist": "~0.0.1",
++            "wordwrap": "~0.0.2"
+           }
+         },
+         "source-map": {
+           "version": "0.4.4",
+           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
+           "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
+           "dev": true,
+           "requires": {
 -            "amdefine": "1.0.1"
++            "amdefine": ">=0.0.4"
+           }
+         },
+         "uglify-js": {
+           "version": "2.8.29",
+           "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
+           "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "source-map": "0.5.7",
 -            "uglify-to-browserify": "1.0.2",
 -            "yargs": "3.10.0"
++            "source-map": "~0.5.1",
++            "uglify-to-browserify": "~1.0.0",
++            "yargs": "~3.10.0"
+           },
+           "dependencies": {
+             "source-map": {
+               "version": "0.5.7",
+               "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+               "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+               "dev": true,
+               "optional": true
+             }
+           }
+         },
+         "yargs": {
+           "version": "3.10.0",
+           "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+           "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+           "dev": true,
+           "optional": true,
+           "requires": {
 -            "camelcase": "1.2.1",
 -            "cliui": "2.1.0",
 -            "decamelize": "1.2.0",
++            "camelcase": "^1.0.2",
++            "cliui": "^2.1.0",
++            "decamelize": "^1.0.0",
+             "window-size": "0.1.0"
+           }
+         }
+       }
+     },
+     "jasmine": {
+       "version": "2.8.0",
+       "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz",
+       "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=",
+       "dev": true,
+       "requires": {
 -        "exit": "0.1.2",
 -        "glob": "7.1.2",
 -        "jasmine-core": "2.8.0"
++        "exit": "^0.1.2",
++        "glob": "^7.0.6",
++        "jasmine-core": "~2.8.0"
+       },
+       "dependencies": {
+         "jasmine-core": {
+           "version": "2.8.0",
+           "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz",
+           "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=",
+           "dev": true
+         }
+       }
+     },
+     "jasmine-core": {
+       "version": "2.5.2",
+       "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.5.2.tgz",
+       "integrity": "sha1-b2G9eQYeJ/Q+b5NV5Es8bKtv8pc=",
+       "dev": true
+     },
+     "jasmine-spec-reporter": {
+       "version": "3.2.0",
+       "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-3.2.0.tgz",
+       "integrity": "sha1-/b6FqAzN07J2dGvHf96Dwc53Pv8=",
+       "dev": true,
+       "requires": {
+         "colors": "1.1.2"
+       }
+     },
+     "jasminewd2": {
+       "version": "2.2.0",
+       "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz",
+       "integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=",
+       "dev": true
+     },
+     "js-base64": {
+       "version": "2.3.2",
+       "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.3.2.tgz",
+       "integrity": "sha512-Y2/+DnfJJXT1/FCwUebUhLWb3QihxiSC42+ctHLGogmW2jPY6LCapMdFZXRvVP2z6qyKW7s6qncE/9gSqZiArw==",
+       "dev": true
+     },
+     "js-tokens": {
+       "version": "3.0.2",
+       "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+       "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+       "dev": true
+     },
+     "js-yaml": {
+       "version": "3.7.0",
+       "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz",
+       "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=",
+       "dev": true,
+       "requires": {
 -        "argparse": "1.0.9",
 -        "esprima": "2.7.3"
++        "argparse": "^1.0.7",
++        "esprima": "^2.6.0"
+       }
+     },
+     "jsbn": {
+       "version": "0.1.1",
+       "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+       "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+       "dev": true,
+       "optional": true
+     },
+     "jsesc": {
+       "version": "0.5.0",
+       "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+       "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+       "dev": true
+     },
+     "json-parse-better-errors": {
+       "version": "1.0.2",
+       "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+       "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+       "dev": true
+     },
+     "json-schema": {
+       "version": "0.2.3",
+       "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+       "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+       "dev": true
+     },
+     "json-schema-traverse": {
+       "version": "0.3.1",
+       "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+       "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+       "dev": true
+     },
+     "json-stable-stringify": {
+       "version": "1.0.1",
+       "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
+       "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
+       "dev": true,
+       "requires": {
 -        "jsonify": "0.0.0"
++        "jsonify": "~0.0.0"
+       }
+     },
+     "json-stringify-safe": {
+       "version": "5.0.1",
+       "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+       "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+       "dev": true
+     },
+     "json3": {
+       "version": "3.3.2",
+       "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
+       "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=",
+       "dev": true
+     },
+     "json5": {
+       "version": "1.0.1",
+       "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+       "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+       "dev": true,
+       "requires": {
 -        "minimist": "1.2.0"
++        "minimist": "^1.2.0"
+       }
+     },
+     "jsonify": {
+       "version": "0.0.0",
+       "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+       "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
+       "dev": true
+     },
+     "jsonparse": {
+       "version": "1.3.1",
+       "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+       "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+       "dev": true
+     },
+     "jsprim": {
+       "version": "1.4.1",
+       "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+       "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+       "dev": true,
+       "requires": {
+         "assert-plus": "1.0.0",
+         "extsprintf": "1.3.0",
+         "json-schema": "0.2.3",
+         "verror": "1.10.0"
+       }
+     },
+     "karma": {
+       "version": "1.4.1",
+       "resolved": "https://registry.npmjs.org/karma/-/karma-1.4.1.tgz",
+       "integrity": "sha1-QZgacdVCN2BrCj6oxYyQdz9BZQ4=",
+       "dev": true,
+       "requires": {
 -        "bluebird": "3.5.1",
 -        "body-parser": "1.18.2",
 -        "chokidar": "1.7.0",
 -        "colors": "1.1.2",
 -        "combine-lists": "1.0.1",
 -        "connect": "3.6.5",
 -        "core-js": "2.4.1",
 -        "di": "0.0.1",
 -        "dom-serialize": "2.2.1",
 -        "expand-braces": "0.1.2",
 -        "glob": "7.1.2",
 -        "graceful-fs": "4.1.11",
 -        "http-proxy": "1.16.2",
 -        "isbinaryfile": "3.0.2",
 -        "lodash": "3.10.1",
 -        "log4js": "0.6.38",
 -        "mime": "1.4.1",
 -        "minimatch": "3.0.4",
 -        "optimist": "0.6.1",
 -        "qjobs": "1.1.5",
 -        "range-parser": "1.2.0",
 -        "rimraf": "2.6.2",
 -        "safe-buffer": "5.1.1",
++        "bluebird": "^3.3.0",
++        "body-parser": "^1.12.4",
++        "chokidar": "^1.4.1",
++        "colors": "^1.1.0",
++        "combine-lists": "^1.0.0",
++        "connect": "^3.3.5",
++        "core-js": "^2.2.0",
++        "di": "^0.0.1",
++        "dom-serialize": "^2.2.0",
++        "expand-braces": "^0.1.1",
++        "glob": "^7.1.1",
++        "graceful-fs": "^4.1.2",
++        "http-proxy": "^1.13.0",
++        "isbinaryfile": "^3.0.0",
++        "lodash": "^3.8.0",
++        "log4js": "^0.6.31",
++        "mime": "^1.3.4",
++        "minimatch": "^3.0.0",
++        "optimist": "^0.6.1",
++        "qjobs": "^1.1.4",
++        "range-parser": "^1.2.0",
++        "rimraf": "^2.3.3",
++        "safe-buffer": "^5.0.1",
+         "socket.io": "1.7.2",
 -        "source-map": "0.5.7",
++        "source-map": "^0.5.3",
+         "tmp": "0.0.28",
 -        "useragent": "2.2.1"
++        "useragent": "^2.1.10"
+       },
+       "dependencies": {
+         "lodash": {
+           "version": "3.10.1",
+           "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
+           "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
+           "dev": true
+         },
+         "minimist": {
+           "version": "0.0.10",
+           "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
+           "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
+           "dev": true
+         },
+         "optimist": {
+           "version": "0.6.1",
+           "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+           "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+           "dev": true,
+           "requires": {
 -            "minimist": "0.0.10",
 -            "wordwrap": "0.0.3"
++            "minimist": "~0.0.1",
++            "wordwrap": "~0.0.2"
+           }
+         },
+         "tmp": {
+           "version": "0.0.28",
+           "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz",
+           "integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=",
+           "dev": true,
+           "requires": {
 -            "os-tmpdir": "1.0.2"
++            "os-tmpdir": "~1.0.1"
+           }
+         }
+       }
+     },
+     "karma-chrome-launcher": {
+       "version": "2.0.0",
+       "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.0.0.tgz",
+       "integrity": "sha1-wnkMWjKxVXfQ//Wk1aJwOztDnCU=",
+       "dev": true,
+       "requires": {
 -        "fs-access": "1.0.1",
 -        "which": "1.3.0"
++        "fs-access": "^1.0.0",
++        "which": "^1.2.1"
+       }
+     },
+     "karma-cli": {
+       "version": "1.0.1",
+       "resolved": "https://registry.npmjs.org/karma-cli/-/karma-cli-1.0.1.tgz",
+       "integrity": "sha1-rmw8WKMTodALRRZMRVubhs4X+WA=",
+       "dev": true,
+       "requires": {
 -        "resolve": "1.4.0"
++        "resolve": "^1.1.6"
+       }
+     },
+     "karma-coverage-istanbul-reporter": {
+       "version": "0.2.3",
+       "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-0.2.3.tgz",
+       "integrity": "sha1-EfG+nPqTdVp3usOasW4xWnEAtcU=",
+       "dev": true,
+       "requires": {
 -        "istanbul-api": "1.1.14"
++        "istanbul-api": "^1.1.1"
+       }
+     },
+     "karma-jasmine": {
+       "version": "1.1.0",
+       "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.0.tgz",
+       "integrity": "sha1-IuTAa/mhguUpTR9wXjczgRuBCs8=",
+       "dev": true
+     },
+     "karma-jasmine-html-reporter": {
+       "version": "0.2.2",
+       "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-0.2.2.tgz",
+       "integrity": "sha1-SKjl7xiAdhfuK14zwRlMNbQ5Ukw=",
+       "dev": true,
+       "requires": {
 -        "karma-jasmine": "1.1.0"
++        "karma-jasmine": "^1.0.2"
+       }
+     },
+     "karma-source-map-support": {
+       "version": "1.3.0",
+       "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.3.0.tgz",
+       "integrity": "sha512-HcPqdAusNez/ywa+biN4EphGz62MmQyPggUsDfsHqa7tSe4jdsxgvTKuDfIazjL+IOxpVWyT7Pr4dhAV+sxX5Q==",
+       "dev": true,
+       "requires": {
 -        "source-map-support": "0.5.10"
++        "source-map-support": "^0.5.5"
+       },
+       "dependencies": {
+         "source-map": {
+           "version": "0.6.1",
+           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+           "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+           "dev": true
+         },
+         "source-map-support": {
+           "version": "0.5.10",
+           "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz",
+           "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==",
+           "dev": true,
+           "requires": {
 -            "buffer-from": "1.1.1",
 -            "source-map": "0.6.1"
++            "buffer-from": "^1.0.0",
++            "source-map": "^0.6.0"
+           }
+         }
+       }
+     },
+     "killable": {
+       "version": "1.0.1",
+       "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz",
+       "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==",
+       "dev": true
+     },
+     "kind-of": {
+       "version": "3.2.2",
+       "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+       "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+       "dev": true,
+       "requires": {
 -        "is-buffer": "1.1.5"
++        "is-buffer": "^1.1.5"
+       }
+     },
+     "lazy-cache": {
+       "version": "1.0.4",
+       "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+       "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
+       "dev": true,
+       "optional": true
+     },
+     "lcid": {
+       "version": "1.0.0",
+       "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+       "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+       "dev": true,
+       "requires": {
 -        "invert-kv": "1.0.0"
++        "invert-kv": "^1.0.0"
+       }
+     },
+     "less": {
+       "version": "3.9.0",
+       "resolved": "https://registry.npmjs.org/less/-/less-3.9.0.tgz",
+       "integrity": "sha512-31CmtPEZraNUtuUREYjSqRkeETFdyEHSEPAGq4erDlUXtda7pzNmctdljdIagSb589d/qXGWiiP31R5JVf+v0w==",
+       "dev": true,
+       "requires": {
 -        "clone": "2.1.2",
 -        "errno": "0.1.7",
 -        "graceful-fs": "4.1.11",
 -        "image-size": "0.5.5",
 -        "mime": "1.4.1",
 -        "mkdirp": "0.5.1",
 -        "promise": "7.3.1",
 -        "request": "2.83.0",
 -        "source-map": "0.6.1"
++        "clone": "^2.1.2",
++        "errno": "^0.1.1",
++        "graceful-fs": "^4.1.2",
++        "image-size": "~0.5.0",
++        "mime": "^1.4.1",
++        "mkdirp": "^0.5.0",
++        "promise": "^7.1.1",
++        "request": "^2.83.0",
++        "source-map": "~0.6.0"
+       },
+       "dependencies": {
+         "source-map": {
+           "version": "0.6.1",
+           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+           "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+           "dev": true,
+           "optional": true
+         }
+       }
+     },
+     "less-loader": {
+       "version": "4.1.0",
+       "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.1.0.tgz",
+       "integrity": "sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==",
+       "dev": true,
+       "requires": {
 -        "clone": "2.1.2",
 -        "loader-utils": "1.2.3",
 -        "pify": "3.0.0"
++        "clone": "^2.1.1",
++        "loader-utils": "^1.1.0",
++        "pify": "^3.0.0"
+       },
+       "dependencies": {
+         "pify": {
+           "version": "3.0.0",
+           "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+           "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+           "dev": true
+         }
+       }
+     },
+     "levn": {
+       "version": "0.3.0",
+       "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+       "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+       "dev": true,
+       "requires": {
 -        "prelude-ls": "1.1.2",
 -        "type-check": "0.3.2"
++        "prelude-ls": "~1.1.2",
++        "type-check": "~0.3.2"
+       }
+     },
+     "license-webpack-plugin": {
+       "version": "2.1.0",
+       "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.1.0.tgz",
+       "integrity": "sha512-vDiBeMWxjE9n6TabQ9J4FH8urFdsRK0Nvxn1cit9biCiR9aq1zBR0X2BlAkEiIG6qPamLeU0GzvIgLkrFc398A==",
+       "dev": true,
+       "requires": {
 -        "@types/webpack-sources": "0.1.5",
 -        "webpack-sources": "1.3.0"
++        "@types/webpack-sources": "^0.1.5",
++        "webpack-sources": "^1.2.0"
+       }
+     },
+     "load-json-file": {
+       "version": "1.1.0",
+       "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+       "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+       "dev": true,
+       "requires": {
 -        "graceful-fs": "4.1.11",
 -        "parse-json": "2.2.0",
 -        "pify": "2.3.0",
 -        "pinkie-promise": "2.0.1",
 -        "strip-bom": "2.0.0"
++        "graceful-fs": "^4.1.2",
++        "parse-json": "^2.2.0",
++        "pify": "^2.0.0",
++        "pinkie-promise": "^2.0.0",
++        "strip-bom": "^2.0.0"
+       }
+     },
+     "loader-runner": {
+       "version": "2.4.0",
+       "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
+       "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
+       "dev": true
+     },
+     "loader-utils": {
+       "version": "1.2.3",
+       "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+       "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+       "dev": true,
+       "requires": {
 -        "big.js": "5.2.2",
 -        "emojis-list": "2.1.0",
 -        "json5": "1.0.1"
++        "big.js": "^5.2.2",
++        "emojis-list": "^2.0.0",
++        "json5": "^1.0.1"
+       }
+     },
+     "locate-path": {
+       "version": "2.0.0",
+       "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+       "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+       "dev": true,
+       "requires": {
 -        "p-locate": "2.0.0",
 -        "path-exists": "3.0.0"
++        "p-locate": "^2.0.0",
++        "path-exists": "^3.0.0"
+       },
+       "dependencies": {
+         "path-exists": {
+           "version": "3.0.0",
+           "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+           "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+           "dev": true
+         }
+       }
+     },
+     "lodash": {
+       "version": "4.17.4",
+       "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+       "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+       "dev": true
+     },
+     "lodash.assign": {
+       "version": "4.2.0",
+       "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
+       "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
+       "dev": true
+     },
+     "lodash.clonedeep": {
+       "version": "4.5.0",
+       "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+       "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
+       "dev": true
+     },
+     "lodash.debounce": {
+       "version": "4.0.8",
+       "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+       "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
+       "dev": true
+     },
+     "lodash.mergewith": {
+       "version": "4.6.0",
+       "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz",
+       "integrity": "sha1-FQzwoWeR9ZA7iJHqsVRgknS96lU=",
+       "dev": true
+     },
+     "lodash.tail": {
+       "version": "4.1.1",
+       "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz",
+       "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=",
+       "dev": true
+     },
+     "log4js": {
+       "version": "0.6.38",
+       "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz",
+       "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=",
+       "dev": true,
+       "requires": {
 -        "readable-stream": "1.0.34",
 -        "semver": "4.3.6"
++        "readable-stream": "~1.0.2",
++        "semver": "~4.3.3"
+       },
+       "dependencies": {
+         "isarray": {
+           "version": "0.0.1",
+           "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+           "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+           "dev": true
+         },
+         "readable-stream": {
+           "version": "1.0.34",
+           "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
+           "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
+           "dev": true,
+           "requires": {
 -            "core-util-is": "1.0.2",
 -            "inherits": "2.0.3",
++            "core-util-is": "~1.0.0",
++            "inherits": "~2.0.1",
+             "isarray": "0.0.1",
 -            "string_decoder": "0.10.31"
++            "string_decoder": "~0.10.x"
+           }
+         },
+         "semver": {
+           "version": "4.3.6",
+           "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
+           "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
+           "dev": true
+         },
+         "string_decoder": {
+           "version": "0.10.31",
+           "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+           "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+           "dev": true
+         }
+       }
+     },
+     "loglevel": {
+       "version": "1.6.1",
+       "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz",
+       "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=",
+       "dev": true
+     },
+     "longest": {
+       "version": "1.0.1",
+       "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+       "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
 -      "dev": true
++      "dev": true,
++      "optional": true
+     },
+     "loose-envify": {
+       "version": "1.3.1",
+       "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+       "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+       "dev": true,
+       "requires": {
 -        "js-tokens": "3.0.2"
++        "js-tokens": "^3.0.0"
+       }
+     },
+     "loud-rejection": {
+       "version": "1.6.0",
+       "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+       "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+       "dev": true,
+       "requires": {
 -        "currently-unhandled": "0.4.1",
 -        "signal-exit": "3.0.2"
++        "currently-unhandled": "^0.4.1",
++        "signal-exit": "^3.0.0"
+       }
+     },
+     "lru-cache": {
+       "version": "4.1.1",
+       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
+       "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==",
+       "dev": true,
+       "requires": {
 -        "pseudomap": "1.0.2",
 -        "yallist": "2.1.2"
++        "pseudomap": "^1.0.2",
++        "yallist": "^2.1.2"
+       }
+     },
+     "magic-string": {
+       "version": "0.25.2",
+       "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.2.tgz",
+       "integrity": "sha512-iLs9mPjh9IuTtRsqqhNGYcZXGei0Nh/A4xirrsqW7c+QhKVFL2vm7U09ru6cHRD22azaP/wMDgI+HCqbETMTtg==",
+       "dev": true,
+       "requires": {
 -        "sourcemap-codec": "1.4.4"
++        "sourcemap-codec": "^1.4.4"
+       }
+     },
+     "make-dir": {
+       "version": "1.3.0",
+       "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+       "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+       "dev": true,
+       "requires": {
 -        "pify": "3.0.0"
++        "pify": "^3.0.0"
+       },
+       "dependencies": {
+         "pify": {
+           "version": "3.0.0",
+           "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+           "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+           "dev": true
+         }
+       }
+     },
+     "make-error": {
+       "version": "1.3.0",
+       "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.0.tgz",
+       "integrity": "sha1-Uq06M5zPEM5itAQLcI/nByRLi5Y=",
+       "dev": true
+     },
+     "make-fetch-happen": {
+       "version": "4.0.1",
+       "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz",
+       "integrity": "sha512-7R5ivfy9ilRJ1EMKIOziwrns9fGeAD4bAha8EB7BIiBBLHm2KeTUGCrICFt2rbHfzheTLynv50GnNTK1zDTrcQ==",
+       "dev": true,
+       "requires": {
 -        "agentkeepalive": "3.5.2",
 -        "cacache": "11.3.2",
 -        "http-cache-semantics": "3.8.1",
 -        "http-proxy-agent": "2.1.0",
 -        "https-proxy-agent": "2.2.1",
 -        "lru-cache": "4.1.5",
 -        "mississippi": "3.0.0",
 -        "node-fetch-npm": "2.0.2",
 -        "promise-retry": "1.1.1",
 -        "socks-proxy-agent": "4.0.1",
 -        "ssri": "6.0.1"
++        "agentkeepalive": "^3.4.1",
++        "cacache": "^11.0.1",
++        "http-cache-semantics": "^3.8.1",
++        "http-proxy-agent": "^2.1.0",
++        "https-proxy-agent": "^2.2.1",
++        "lru-cache": "^4.1.2",
++        "mississippi": "^3.0.0",
++        "node-fetch-npm": "^2.0.2",
++        "promise-retry": "^1.1.1",
++        "socks-proxy-agent": "^4.0.0",
++        "ssri": "^6.0.0"
+       },
+       "dependencies": {
+         "agent-base": {
+           "version": "4.2.1",
+           "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz",
+           "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==",
+           "dev": true,
+           "requires": {
 -            "es6-promisify": "5.0.0"
++            "es6-promisify": "^5.0.0"
+           }
+         },
+         "debug": {
+           "version": "3.2.6",
+           "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+           "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+           "dev": true,
+           "requires": {
 -            "ms": "2.1.1"
++            "ms": "^2.1.1"
+           }
+         },
+         "https-proxy-agent": {
+           "version": "2.2.1",
+           "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz",
+           "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==",
+           "dev": true,
+           "requires": {
 -            "agent-base": "4.2.1",
 -            "debug": "3.2.6"
++            "agent-base": "^4.1.0",
++            "debug": "^3.1.0"
+           }
+         },
+         "lru-cache": {
+           "version": "4.1.5",
+           "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+           "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+           "dev": true,
+           "requires": {
 -            "pseudomap": "1.0.2",
 -            "yallist": "2.1.2"
++            "pseudomap": "^1.0.2",
++            "yallist": "^2.1.2"
+           }
+         },
+         "ms": {
+           "version": "2.1.1",
+           "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+           "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+           "dev": true
+         }
+       }
+     },
+     "map-age-cleaner": {
+       "version": "0.1.3",
+       "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
+       "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
+       "dev": true,
+       "requires": {
 -        "p-defer": "1.0.0"
++        "p-defer": "^1.0.0"
+       }
+     },
+     "map-cache": {
+       "version": "0.2.2",
... 8531 lines suppressed ...


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org


[incubator-dlab] 06/12: [DLAB-4]: added terminal per notebook on actions panel

Posted by bh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bhliva pushed a commit to branch v2.1.1
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git

commit 45378b00994e6411db9501210794bc139ced6ef0
Author: Andriana Kovalyshyn <an...@epam.com>
AuthorDate: Wed May 8 16:32:10 2019 +0300

    [DLAB-4]: added terminal per notebook on actions panel
---
 .../exploratory/detail-dialog/detail-dialog.component.html        | 5 -----
 .../webapp/src/app/resources/exploratory/detail-dialog/index.ts   | 2 --
 .../resources/webapp/src/app/resources/resources-grid/index.ts    | 3 ++-
 .../src/app/resources/resources-grid/resources-grid.component.css | 8 +++++++-
 .../app/resources/resources-grid/resources-grid.component.html    | 6 ++++++
 .../src/app/resources/resources-grid/resources-grid.component.ts  | 5 -----
 6 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.html b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.html
index 8e9373e..4fe8794 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.html
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/detail-dialog.component.html
@@ -118,11 +118,6 @@
               (click)="editClusterConfiguration(configurationForm.value)">Update</button>
           </div>
         </div>
-
-        <div>
-          <label>Terminal: </label>
-          <a target="_blank" [routerLink]="['/terminal',  notebook.ip]" mat-raised-button type="button" class="butt action">Open terminal</a>
-        </div>
       </div>
     </div>
   </modal-content>
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/index.ts b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/index.ts
index 0a7bcac..1571d71 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/index.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/exploratory/detail-dialog/index.ts
@@ -20,7 +20,6 @@
 import { NgModule } from '@angular/core';
 import { CommonModule } from '@angular/common';
 import { FormsModule, ReactiveFormsModule } from '@angular/forms';
-import { RouterModule } from '@angular/router';
 import { ModalModule } from '../../../shared';
 import { MaterialModule } from '../../../shared/material.module';
 import { DetailDialogComponent } from './detail-dialog.component';
@@ -34,7 +33,6 @@ export * from './detail-dialog.component';
     ModalModule,
     FormsModule,
     ReactiveFormsModule,
-    RouterModule,
     MaterialModule,
     DirectivesModule
   ],
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/index.ts b/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/index.ts
index b078349..ea94971 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/index.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/index.ts
@@ -19,7 +19,7 @@
 
 import { NgModule } from '@angular/core';
 import { CommonModule } from '@angular/common';
-
+import { RouterModule } from '@angular/router';
 import { MaterialModule } from '../../shared/material.module';
 import { ResourcesGridComponent } from './resources-grid.component';
 import { ComputationalResourcesModule } from '../computational/computational-resources-list';
@@ -36,6 +36,7 @@ import { UnderscorelessPipeModule } from '../../core/pipes/underscoreless-pipe';
 @NgModule({
   imports: [
     CommonModule,
+    RouterModule,
     ComputationalResourcesModule,
     ModalModule,
     ConfirmationDialogModule,
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.css b/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.css
index 6b4682f..ec1d129 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.css
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.css
@@ -174,6 +174,11 @@
   color: #577289;
   transition: all 0.45s ease-in-out;
 }
+.dashboard_table .list-menu a.navigate {  
+  text-decoration: none;
+  color: #577289;
+  transition: all 0.45s ease-in-out;
+}
 
 .dashboard_table .list-menu li i {
   font-size: 18px;
@@ -181,7 +186,8 @@
   vertical-align: bottom;
 }
 
-.dashboard_table .list-menu li:hover {
+.dashboard_table .list-menu li:hover,
+.dashboard_table .list-menu li:hover a {
   background: none !important;
   color: #36afd5;
 }
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.html b/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.html
index 8502953..559cd13 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.html
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.html
@@ -141,6 +141,12 @@
             <i class="material-icons">developer_board</i>
             <span>Manage libraries</span>
           </li>
+          <li (click)="openTerminal(env.ip)">
+            <a target="_blank" [routerLink]="['/terminal',  env.ip]" class="navigate">
+              <i class="material-icons">laptop</i>
+              <span>Open terminal</span>
+            </a>
+          </li>
         </ul>
       </bubble-up>
     </td>
diff --git a/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.ts b/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.ts
index c897950..1a5564b 100644
--- a/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/resources/resources-grid/resources-grid.component.ts
@@ -305,9 +305,4 @@ export class ResourcesGridComponent implements OnInit {
       this.createAMI.open({ isFooter: false }, data);
     }
   }
-
-  dropdownPosition($event): void {
-    const contentHeight = document.body.offsetHeight > window.outerHeight ? document.body.offsetHeight : window.outerHeight;
-    this.isOutscreenDropdown = $event.pageY + 285 > contentHeight ? true : false;
-  }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org


[incubator-dlab] 08/12: DLAB-2 added backend for web terminal

Posted by bh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bhliva pushed a commit to branch v2.1.1
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git

commit 84ee64251853fe78e0f7339fcd661e8a09194d91
Author: bhliva <bo...@epam.com>
AuthorDate: Thu May 2 15:21:23 2019 +0300

    DLAB-2 added backend for web terminal
---
 services/self-service/pom.xml                      |  6 +++
 services/self-service/self-service.yml             | 22 +++++++--
 .../dlab/backendapi/SelfServiceApplication.java    | 13 +++++
 .../SelfServiceApplicationConfiguration.java       | 16 +++++++
 .../epam/dlab/backendapi/modules/DevModule.java    | 17 +++++--
 .../dlab/backendapi/modules/ProductionModule.java  |  1 +
 .../dlab/backendapi/service/GuacamoleService.java  | 10 ++++
 .../service/impl/GuacamoleServiceImpl.java         | 56 ++++++++++++++++++++++
 .../servlet/guacamole/GuacamoleSecurityFilter.java | 56 ++++++++++++++++++++++
 .../servlet/guacamole/GuacamoleServlet.java        | 32 +++++++++++++
 10 files changed, 219 insertions(+), 10 deletions(-)

diff --git a/services/self-service/pom.xml b/services/self-service/pom.xml
index e1190a6..5521958 100644
--- a/services/self-service/pom.xml
+++ b/services/self-service/pom.xml
@@ -161,6 +161,12 @@
             </exclusions>
             <scope>test</scope>
         </dependency>
+
+        <dependency>
+            <groupId>org.apache.guacamole</groupId>
+            <artifactId>guacamole-common</artifactId>
+            <version>1.0.0</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/services/self-service/self-service.yml b/services/self-service/self-service.yml
index 8a2fc60..8ae3c02 100644
--- a/services/self-service/self-service.yml
+++ b/services/self-service/self-service.yml
@@ -67,6 +67,8 @@ maxSessionDurabilityMilliseconds: 288000000
 </#if>
 
 server:
+  gzip:
+    enabled: false
   requestLog:
     appenders:
     - type: file
@@ -76,8 +78,8 @@ server:
       archivedFileCount: 10
   rootPath: "/api"
   applicationConnectors:
-#    - type: http
-#      port: 8080
+  #    - type: http
+  #      port: 8080
   - type: https
     port: 8443
     certAlias: dlab
@@ -87,8 +89,8 @@ server:
     trustStorePath: ${TRUST_STORE_PATH}
     trustStorePassword: ${TRUST_STORE_PASSWORD}
   adminConnectors:
-#    - type: http
-#      port: 8081
+  #    - type: http
+  #      port: 8081
   - type: https
     port: 8444
     certAlias: dlab
@@ -105,6 +107,7 @@ logging:
   loggers:
     com.epam: TRACE
     com.novemberain: ERROR
+    org.apache.guacamole: TRACE
   appenders:
 <#if DEV_MODE == "true">
   - type: console
@@ -158,4 +161,13 @@ schedulers:
     cron: "0 0 * ? * * *"
   checkUserQuoteScheduler:
     enabled: true
-    cron: "0 0 * ? * * *"
\ No newline at end of file
+    cron: "0 0 * ? * * *"
+
+guacamole:
+  connectionProtocol: ssh
+  serverHost: localhost
+  serverPort: 4822
+  port: 22
+  username: dlab-user
+
+
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/SelfServiceApplication.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/SelfServiceApplication.java
index 7df4e47..1a8f59b 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/SelfServiceApplication.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/SelfServiceApplication.java
@@ -29,6 +29,8 @@ import com.epam.dlab.backendapi.modules.ModuleFactory;
 import com.epam.dlab.backendapi.resources.*;
 import com.epam.dlab.backendapi.resources.callback.*;
 import com.epam.dlab.backendapi.schedulers.internal.ManagedScheduler;
+import com.epam.dlab.backendapi.servlet.guacamole.GuacamoleSecurityFilter;
+import com.epam.dlab.backendapi.servlet.guacamole.GuacamoleServlet;
 import com.epam.dlab.cloud.CloudModule;
 import com.epam.dlab.constants.ServiceConsts;
 import com.epam.dlab.migration.mongo.DlabMongoMigration;
@@ -52,6 +54,9 @@ import io.federecio.dropwizard.swagger.SwaggerBundle;
 import io.federecio.dropwizard.swagger.SwaggerBundleConfiguration;
 import lombok.extern.slf4j.Slf4j;
 
+import javax.servlet.DispatcherType;
+import java.util.EnumSet;
+
 /**
  * Self Service based on Dropwizard application.
  */
@@ -113,6 +118,14 @@ public class SelfServiceApplication extends Application<SelfServiceApplicationCo
 		environment.healthChecks().register(
 				ServiceConsts.PROVISIONING_SERVICE_NAME, injector.getInstance(ProvisioningServiceHealthCheck.class));
 
+		final String guacamoleServletName = "GuacamoleServlet";
+		environment.servlets().addServlet(guacamoleServletName, injector.getInstance(GuacamoleServlet.class))
+				.addMapping("/api/tunnel");
+		environment.servlets().addFilter("GuacamoleSecurityFilter",
+				injector.getInstance(GuacamoleSecurityFilter.class))
+				.addMappingForServletNames(EnumSet.allOf(DispatcherType.class), true, guacamoleServletName);
+
+
 		JerseyEnvironment jersey = environment.jersey();
 		jersey.register(new RuntimeExceptionMapper());
 		jersey.register(new JsonProcessingExceptionMapper());
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/SelfServiceApplicationConfiguration.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/SelfServiceApplicationConfiguration.java
index 78a074b..6499b67 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/SelfServiceApplicationConfiguration.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/SelfServiceApplicationConfiguration.java
@@ -121,6 +121,22 @@ public class SelfServiceApplicationConfiguration extends ServiceConfiguration {
 	@JsonProperty(ServiceConsts.MAVEN_SEARCH_API)
 	private RESTServiceFactory mavenApiFactory;
 
+	@Valid
+	@NotNull
+	private Map<String, String> guacamole;
+
+	public Map<String, String> getGuacamole() {
+		return guacamole;
+	}
+
+	public String getGuacamoleHost() {
+		return guacamole.get("serverHost");
+	}
+
+	public Integer getGuacamolePort() {
+		return Integer.valueOf(guacamole.get("serverPort"));
+	}
+
 	@JsonProperty("jerseyClient")
 	public JerseyClientConfiguration getJerseyClientConfiguration() {
 		return jerseyClient;
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/modules/DevModule.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/modules/DevModule.java
index 27c38e4..bd4a5ab 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/modules/DevModule.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/modules/DevModule.java
@@ -109,6 +109,7 @@ public class DevModule extends ModuleBase<SelfServiceApplicationConfiguration> i
 		bind(UserGroupDao.class).to(UserGroupDaoImpl.class);
 		bind(ApplicationSettingService.class).to(ApplicationSettingServiceImpl.class);
 		bind(UserSettingService.class).to(UserSettingServiceImpl.class);
+		bind(GuacamoleService.class).to(GuacamoleServiceImpl.class);
 	}
 
 	/**
@@ -133,6 +134,8 @@ public class DevModule extends ModuleBase<SelfServiceApplicationConfiguration> i
 					return authorize((UserCredentialDTO) parameter);
 				} else if (GET_USER_INFO.equals(path) && TOKEN.equals(parameter) && clazz.equals(UserInfo.class)) {
 					return (T) getUserInfo();
+				} else if (GET_USER_INFO.equals(path) && !TOKEN.equals(parameter) && clazz.equals(UserInfo.class)) {
+					return null;
 				} else if (LOGOUT.equals(path)) {
 					return (T) Response.ok().build();
 				}
@@ -144,14 +147,18 @@ public class DevModule extends ModuleBase<SelfServiceApplicationConfiguration> i
 				if (LOGIN_NAME.equals(credential.getUsername())) {
 					return (T) Response.ok(TOKEN).build();
 				} else {
-					return (T) Response.status(Response.Status.UNAUTHORIZED)
-							.entity(new ErrorDTO(Response.Status.UNAUTHORIZED.getStatusCode(), "Username or password" +
-									" is invalid"))
-							.type(MediaType.APPLICATION_JSON_TYPE)
-							.build();
+					return (T) unauthorized();
 				}
 			}
 
+			private Response unauthorized() {
+				return Response.status(Response.Status.UNAUTHORIZED)
+						.entity(new ErrorDTO(Response.Status.UNAUTHORIZED.getStatusCode(), "Username or password" +
+								" is invalid"))
+						.type(MediaType.APPLICATION_JSON_TYPE)
+						.build();
+			}
+
 			@Override
 			public <T> T get(String path, Class<T> clazz) {
 				throw new UnsupportedOperationException(OPERATION_IS_NOT_SUPPORTED);
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/modules/ProductionModule.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/modules/ProductionModule.java
index e3ed4dc..7db5b26 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/modules/ProductionModule.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/modules/ProductionModule.java
@@ -86,5 +86,6 @@ public class ProductionModule extends ModuleBase<SelfServiceApplicationConfigura
 		bind(InactivityService.class).to(InactivityServiceImpl.class);
 		bind(ApplicationSettingService.class).to(ApplicationSettingServiceImpl.class);
 		bind(UserSettingService.class).to(UserSettingServiceImpl.class);
+		bind(GuacamoleService.class).to(GuacamoleServiceImpl.class);
 	}
 }
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/GuacamoleService.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/GuacamoleService.java
new file mode 100644
index 0000000..760e701
--- /dev/null
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/GuacamoleService.java
@@ -0,0 +1,10 @@
+package com.epam.dlab.backendapi.service;
+
+import com.epam.dlab.auth.UserInfo;
+import org.apache.guacamole.net.GuacamoleTunnel;
+
+public interface GuacamoleService {
+
+	GuacamoleTunnel getTunnel(UserInfo userInfo, String host);
+
+}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/GuacamoleServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/GuacamoleServiceImpl.java
new file mode 100644
index 0000000..7292646
--- /dev/null
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/GuacamoleServiceImpl.java
@@ -0,0 +1,56 @@
+package com.epam.dlab.backendapi.service.impl;
+
+import com.epam.dlab.auth.UserInfo;
+import com.epam.dlab.backendapi.SelfServiceApplicationConfiguration;
+import com.epam.dlab.backendapi.service.GuacamoleService;
+import com.epam.dlab.exceptions.DlabException;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.guacamole.net.GuacamoleTunnel;
+import org.apache.guacamole.net.InetGuacamoleSocket;
+import org.apache.guacamole.net.SimpleGuacamoleTunnel;
+import org.apache.guacamole.protocol.ConfiguredGuacamoleSocket;
+import org.apache.guacamole.protocol.GuacamoleConfiguration;
+
+import java.util.Map;
+
+@Slf4j
+@Singleton
+public class GuacamoleServiceImpl implements GuacamoleService {
+
+	private static final String PRIVATE_KEY_PARAM_NAME = "private-key";
+	private static final String HOSTNAME_PARAM = "hostname";
+	private static final String CONNECTION_PROTOCOL_PARAM = "connectionProtocol";
+	private final SelfServiceApplicationConfiguration conf;
+
+	@Inject
+	public GuacamoleServiceImpl(SelfServiceApplicationConfiguration conf) {
+		this.conf = conf;
+	}
+
+	@Override
+	public GuacamoleTunnel getTunnel(UserInfo userInfo, String host) {
+		try {
+			final String privateKeyContent = "";// TODO figure out from which place private key should be taken
+			final InetGuacamoleSocket socket = new InetGuacamoleSocket(conf.getGuacamoleHost(),
+					conf.getGuacamolePort());
+			final GuacamoleConfiguration guacamoleConfig = getGuacamoleConfig(privateKeyContent, conf.getGuacamole(),
+					host);
+			return new SimpleGuacamoleTunnel(new ConfiguredGuacamoleSocket(socket, guacamoleConfig));
+		} catch (Exception e) {
+			log.error("Can not create guacamole tunnel due to: " + e.getMessage());
+			throw new DlabException("Can not create guacamole tunnel due to: " + e.getMessage(), e);
+		}
+	}
+
+	private GuacamoleConfiguration getGuacamoleConfig(String privateKeyContent, Map<String, String> guacamoleParams,
+													  String host) {
+		GuacamoleConfiguration guacamoleConfiguration = new GuacamoleConfiguration();
+		guacamoleConfiguration.setProtocol(guacamoleParams.get(CONNECTION_PROTOCOL_PARAM));
+		guacamoleConfiguration.setParameters(guacamoleParams);
+		guacamoleConfiguration.setParameter(HOSTNAME_PARAM, host);
+		guacamoleConfiguration.setParameter(PRIVATE_KEY_PARAM_NAME, privateKeyContent);
+		return guacamoleConfiguration;
+	}
+}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/servlet/guacamole/GuacamoleSecurityFilter.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/servlet/guacamole/GuacamoleSecurityFilter.java
new file mode 100644
index 0000000..4545ed7
--- /dev/null
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/servlet/guacamole/GuacamoleSecurityFilter.java
@@ -0,0 +1,56 @@
+package com.epam.dlab.backendapi.servlet.guacamole;
+
+import com.epam.dlab.auth.UserInfo;
+import com.epam.dlab.backendapi.auth.SelfServiceSecurityAuthenticator;
+import com.google.inject.Inject;
+import io.dropwizard.auth.AuthenticationException;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.ws.rs.core.HttpHeaders;
+import java.io.IOException;
+import java.util.Optional;
+
+@Slf4j
+public class GuacamoleSecurityFilter implements Filter {
+	private static final String AUTH_HEADER_PREFIX = "Bearer ";
+	private final SelfServiceSecurityAuthenticator authenticator;
+
+	@Inject
+	public GuacamoleSecurityFilter(SelfServiceSecurityAuthenticator authenticator) {
+		this.authenticator = authenticator;
+	}
+
+	@Override
+	public void init(FilterConfig filterConfig) {
+
+	}
+
+	@Override
+	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+		HttpServletRequest request = (HttpServletRequest) servletRequest;
+		HttpServletResponse response = (HttpServletResponse) servletResponse;
+		final String authorization = request.getHeader(HttpHeaders.AUTHORIZATION);
+		try {
+			final String credentials = StringUtils.substringAfter(authorization, AUTH_HEADER_PREFIX);
+			final Optional<UserInfo> user = authenticator.authenticate(credentials);
+			if (user.isPresent()) {
+				request.setAttribute(GuacamoleServlet.USER_ATTRIBUTE, user.get());
+				filterChain.doFilter(servletRequest, servletResponse);
+			} else {
+				response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
+			}
+		} catch (AuthenticationException e) {
+			log.error("Authentication error occurred: {}", e.getMessage());
+		}
+
+	}
+
+	@Override
+	public void destroy() {
+
+	}
+}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/servlet/guacamole/GuacamoleServlet.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/servlet/guacamole/GuacamoleServlet.java
new file mode 100644
index 0000000..d0025ba
--- /dev/null
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/servlet/guacamole/GuacamoleServlet.java
@@ -0,0 +1,32 @@
+package com.epam.dlab.backendapi.servlet.guacamole;
+
+import com.epam.dlab.auth.UserInfo;
+import com.epam.dlab.backendapi.service.GuacamoleService;
+import com.epam.dlab.exceptions.DlabException;
+import com.google.inject.Inject;
+import org.apache.guacamole.net.GuacamoleTunnel;
+import org.apache.guacamole.servlet.GuacamoleHTTPTunnelServlet;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+
+public class GuacamoleServlet extends GuacamoleHTTPTunnelServlet {
+	static final String USER_ATTRIBUTE = "user";
+	private final GuacamoleService guacamoleService;
+
+	@Inject
+	public GuacamoleServlet(GuacamoleService guacamoleService) {
+		this.guacamoleService = guacamoleService;
+	}
+
+	@Override
+	protected GuacamoleTunnel doConnect(HttpServletRequest request) {
+		try {
+			final UserInfo userInfo = (UserInfo) request.getAttribute(USER_ATTRIBUTE);
+			final String host = request.getReader().readLine();
+			return guacamoleService.getTunnel(userInfo, host);
+		} catch (IOException e) {
+			throw new DlabException("Can not read request body: " + e.getMessage(), e);
+		}
+	}
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org


[incubator-dlab] 02/12: [DLAB-4]: added guacamole-common-js lib

Posted by bh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bhliva pushed a commit to branch v2.1.1
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git

commit b9f736e4ba1dc34efd341460e4f93b5bb0aadf3d
Author: Andriana Kovalyshyn <an...@epam.com>
AuthorDate: Tue May 7 17:04:05 2019 +0300

    [DLAB-4]: added guacamole-common-js lib
---
 services/self-service/src/main/resources/webapp/package-lock.json | 5 +++++
 services/self-service/src/main/resources/webapp/package.json      | 1 +
 2 files changed, 6 insertions(+)

diff --git a/services/self-service/src/main/resources/webapp/package-lock.json b/services/self-service/src/main/resources/webapp/package-lock.json
index 7f36983..a4d77b4 100644
--- a/services/self-service/src/main/resources/webapp/package-lock.json
+++ b/services/self-service/src/main/resources/webapp/package-lock.json
@@ -6098,6 +6098,11 @@
       "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
       "dev": true
     },
+    "guacamole-common-js": {
+      "version": "1.0.0-b",
+      "resolved": "https://registry.npmjs.org/guacamole-common-js/-/guacamole-common-js-1.0.0-b.tgz",
+      "integrity": "sha512-DLEy7yBQvwwJ4xoWfj1Z+DLOKCy5zwW4ELdpDeYKVWZMpBegbGGwI5qWb61b3aT7KBWsF6DRJHviPlcFHUdMRA=="
+    },
     "hammerjs": {
       "version": "2.0.8",
       "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz",
diff --git a/services/self-service/src/main/resources/webapp/package.json b/services/self-service/src/main/resources/webapp/package.json
index 740a719..ecb4388 100644
--- a/services/self-service/src/main/resources/webapp/package.json
+++ b/services/self-service/src/main/resources/webapp/package.json
@@ -28,6 +28,7 @@
     "@angular/platform-server": "^8.0.0-beta.2",
     "@angular/router": "^8.0.0-beta.2",
     "core-js": "2.4.1",
+    "guacamole-common-js": "^1.0.0-b",
     "hammerjs": "^2.0.8",
     "moment": "^2.20.1",
     "moment-timezone": "^0.5.16",


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org


[incubator-dlab] 07/12: [DLAB-4]: fixed location and token for connection

Posted by bh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bhliva pushed a commit to branch v2.1.1
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git

commit 1a7be785a6206e6613d972a91085eb769110f0c2
Author: Andriana Kovalyshyn <an...@epam.com>
AuthorDate: Mon May 13 12:55:39 2019 +0300

    [DLAB-4]: fixed location and token for connection
---
 .../src/app/webterminal/webterminal.component.scss |  9 +++++++-
 .../src/app/webterminal/webterminal.component.ts   | 26 ++++++++++------------
 2 files changed, 20 insertions(+), 15 deletions(-)

diff --git a/services/self-service/src/main/resources/webapp/src/app/webterminal/webterminal.component.scss b/services/self-service/src/main/resources/webapp/src/app/webterminal/webterminal.component.scss
index 57b8cc4..cdf9269 100644
--- a/services/self-service/src/main/resources/webapp/src/app/webterminal/webterminal.component.scss
+++ b/services/self-service/src/main/resources/webapp/src/app/webterminal/webterminal.component.scss
@@ -19,5 +19,12 @@
  
 #terminal {
   height: 100vh;
-  display: block;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+@media screen and (min-width: 1281px) {
+  #terminal {
+    justify-content: center;
+  }
 }
diff --git a/services/self-service/src/main/resources/webapp/src/app/webterminal/webterminal.component.ts b/services/self-service/src/main/resources/webapp/src/app/webterminal/webterminal.component.ts
index eae2e12..e11964f 100644
--- a/services/self-service/src/main/resources/webapp/src/app/webterminal/webterminal.component.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/webterminal/webterminal.component.ts
@@ -17,12 +17,13 @@
  * under the License.
  */
 
-import { Component, OnInit, ViewEncapsulation, ViewContainerRef, ViewChild, Renderer2, ElementRef, Inject } from '@angular/core';
+import { Component, OnInit, ViewEncapsulation, ViewContainerRef, ViewChild, Inject } from '@angular/core';
 import { DOCUMENT } from '@angular/common';
 import { ActivatedRoute } from '@angular/router';
-
 import Guacamole from 'guacamole-common-js';
 
+import { StorageService } from '../core/services';
+
 @Component({
   selector: 'dlab-webterminal',
   templateUrl: './webterminal.component.html',
@@ -33,9 +34,8 @@ export class WebterminalComponent implements OnInit {
   @ViewChild('terminal', { read: ViewContainerRef }) terminal: ViewContainerRef;
 
   constructor(
-    private elementRef: ElementRef,
-    private renderer: Renderer2,
     private route: ActivatedRoute,
+    private storageService: StorageService,
     @Inject(DOCUMENT) private document) {
   }
 
@@ -45,33 +45,31 @@ export class WebterminalComponent implements OnInit {
     this.open(this.id);
   }
 
-  open(parameters) {
-
+  public open(id_parameter: string) {
     const tunnel = new Guacamole.HTTPTunnel(
-      'https://localhost:8443/api/tunnel', false,
-      { 'Authorization': 'Bearer token123' }
+      `${window.location.origin}/api/tunnel`, false,
+      { 'Authorization': `Bearer ${this.storageService.getToken()}` }
     );
+
     const guac = new Guacamole.Client(tunnel);
     const display = document.getElementById('display');
 
     display.appendChild(guac.getDisplay().getElement());
-
-    guac.connect('52.10.77.216');
+    const guacDisplay = guac.getDisplay();
+    const layer = guacDisplay.getDefaultLayer();
+    guac.connect(id_parameter);
 
     // Error handler
-    guac.onerror = (error) => alert(error);
+    guac.onerror = (error) => console.log(error.message);
     window.onunload = () => guac.disconnect();
 
     // Mouse
     const mouse = new Guacamole.Mouse(guac.getDisplay().getElement());
-
     mouse.onmousemove = (mouseState) => guac.sendMouseState(mouseState);
 
     // Keyboard
     const keyboard = new Guacamole.Keyboard(document);
-
     keyboard.onkeydown = (keysym) => guac.sendKeyEvent(1, keysym);
-
     keyboard.onkeyup = (keysym) => guac.sendKeyEvent(0, keysym);
   }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org


[incubator-dlab] 09/12: DLAB-2 added possibility to use admin key during ssh connection

Posted by bh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bhliva pushed a commit to branch v2.1.1
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git

commit deb3d36497297d3972bc349d64db8c41ca731b7a
Author: bhliva <bo...@epam.com>
AuthorDate: Mon May 6 14:44:02 2019 +0300

    DLAB-2 added possibility to use admin key during ssh connection
---
 .../java/com/epam/dlab/rest/contracts/KeyAPI.java  |  3 ++-
 .../backendapi/resources/base/KeyResource.java     | 25 ++++++++++++++-----
 .../{ReuploadKeyService.java => KeyService.java}   | 29 +++++++++++++++++++---
 .../service/impl/GuacamoleServiceImpl.java         | 17 ++++++++-----
 .../service/impl/ReuploadKeyServiceImplTest.java   | 10 ++++----
 5 files changed, 63 insertions(+), 21 deletions(-)

diff --git a/services/dlab-webapp-common/src/main/java/com/epam/dlab/rest/contracts/KeyAPI.java b/services/dlab-webapp-common/src/main/java/com/epam/dlab/rest/contracts/KeyAPI.java
index 422d36b..4b5eba3 100644
--- a/services/dlab-webapp-common/src/main/java/com/epam/dlab/rest/contracts/KeyAPI.java
+++ b/services/dlab-webapp-common/src/main/java/com/epam/dlab/rest/contracts/KeyAPI.java
@@ -20,7 +20,8 @@
 package com.epam.dlab.rest.contracts;
 
 public class KeyAPI {
-	public static final String REUPLOAD_KEY = "/reupload_key";
+	public static final String REUPLOAD_KEY = "/key/reupload";
+	public static final String GET_ADMIN_KEY = "/key";
 	public static final String KEY_EXTENTION = ".pub";
 
 	private KeyAPI() {
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/base/KeyResource.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/base/KeyResource.java
index 9e8b975..fcacef0 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/base/KeyResource.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/resources/base/KeyResource.java
@@ -23,7 +23,7 @@ package com.epam.dlab.backendapi.resources.base;
 import com.epam.dlab.auth.UserInfo;
 import com.epam.dlab.backendapi.ProvisioningServiceApplicationConfiguration;
 import com.epam.dlab.backendapi.core.commands.DockerAction;
-import com.epam.dlab.backendapi.service.impl.ReuploadKeyService;
+import com.epam.dlab.backendapi.service.impl.KeyService;
 import com.epam.dlab.dto.reuploadkey.ReuploadKeyDTO;
 import com.epam.dlab.rest.contracts.KeyAPI;
 import com.epam.dlab.util.FileUtils;
@@ -39,26 +39,39 @@ import java.util.UUID;
 /**
  * Provides API for reuploading keys
  */
-@Path(KeyAPI.REUPLOAD_KEY)
+@Path("key")
 @Consumes(MediaType.APPLICATION_JSON)
 @Produces(MediaType.APPLICATION_JSON)
 public class KeyResource {
 
+	private final KeyService keyService;
+	private final ProvisioningServiceApplicationConfiguration configuration;
+	private final String keyContent;
+
 	@Inject
-	private ReuploadKeyService reuploadKeyService;
-	@Inject
-	private ProvisioningServiceApplicationConfiguration configuration;
+	public KeyResource(KeyService keyService, ProvisioningServiceApplicationConfiguration configuration) {
+		this.keyService = keyService;
+		this.configuration = configuration;
+		this.keyContent = keyService.getAdminKey();
+	}
 
+
+	@Path("/reupload")
 	@POST
 	public String reuploadKey(@Auth UserInfo ui, @DefaultValue("true") @QueryParam("is_primary_reuploading")
 			boolean isPrimaryReuploading, ReuploadKeyDTO dto) throws IOException {
 		if (isPrimaryReuploading) {
 			replaceKeyfile(dto);
 		}
-		reuploadKeyService.reuploadKeyAction(ui.getName(), dto, DockerAction.REUPLOAD_KEY);
+		keyService.reuploadKeyAction(ui.getName(), dto, DockerAction.REUPLOAD_KEY);
 		return UUID.randomUUID().toString();
 	}
 
+	@GET
+	public String getAdminKey(@Auth UserInfo userInfo) {
+		return keyContent;
+	}
+
 	private void replaceKeyfile(ReuploadKeyDTO dto) throws IOException {
 		String edgeUserName = dto.getEdgeUserName();
 		String filename = UsernameUtils.replaceWhitespaces(edgeUserName) + KeyAPI.KEY_EXTENTION;
diff --git a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/ReuploadKeyService.java b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/KeyService.java
similarity index 82%
rename from services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/ReuploadKeyService.java
rename to services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/KeyService.java
index e3889cb..6394564 100644
--- a/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/ReuploadKeyService.java
+++ b/services/provisioning-service/src/main/java/com/epam/dlab/backendapi/service/impl/KeyService.java
@@ -20,28 +20,42 @@
 package com.epam.dlab.backendapi.service.impl;
 
 import com.epam.dlab.auth.SystemUserInfoService;
+import com.epam.dlab.backendapi.ProvisioningServiceApplicationConfiguration;
 import com.epam.dlab.backendapi.core.Directories;
 import com.epam.dlab.backendapi.core.commands.DockerAction;
 import com.epam.dlab.backendapi.core.commands.DockerCommands;
 import com.epam.dlab.backendapi.core.commands.RunDockerCommand;
 import com.epam.dlab.backendapi.core.response.handlers.ReuploadKeyCallbackHandler;
-import com.epam.dlab.backendapi.service.impl.DockerService;
 import com.epam.dlab.dto.reuploadkey.ReuploadKeyCallbackDTO;
 import com.epam.dlab.dto.reuploadkey.ReuploadKeyDTO;
+import com.epam.dlab.exceptions.DlabException;
 import com.epam.dlab.model.ResourceData;
 import com.epam.dlab.rest.contracts.ApiCallbacks;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import lombok.extern.slf4j.Slf4j;
 
+import java.io.IOException;
+
+import static java.lang.String.format;
+import static java.nio.file.Files.readAllBytes;
+import static java.nio.file.Paths.get;
+
 @Slf4j
 @Singleton
-public class ReuploadKeyService extends DockerService implements DockerCommands {
+public class KeyService extends DockerService implements DockerCommands {
 
 	private static final String REUPLOAD_KEY_ACTION = "reupload_key";
 
+	private final SystemUserInfoService systemUserInfoService;
+	private final ProvisioningServiceApplicationConfiguration conf;
+
 	@Inject
-	private SystemUserInfoService systemUserInfoService;
+	public KeyService(SystemUserInfoService systemUserInfoService, ProvisioningServiceApplicationConfiguration conf) {
+		this.systemUserInfoService = systemUserInfoService;
+		this.conf = conf;
+	}
+
 
 	public void reuploadKeyAction(String userName, ReuploadKeyDTO dto, DockerAction action) {
 		log.debug("{} for edge user {}", action, dto.getEdgeUserName());
@@ -57,6 +71,15 @@ public class ReuploadKeyService extends DockerService implements DockerCommands
 		log.debug("Executed {} Docker commands", count);
 	}
 
+	public String getAdminKey() {
+		try {
+			return new String(readAllBytes(get(format("%s/%s.pem", conf.getKeyDirectory(), conf.getAdminKey()))));
+		} catch (IOException e) {
+			log.error("Can not read admin key: {}", e.getMessage());
+			throw new DlabException("Can not read admin key: " + e.getMessage(), e);
+		}
+	}
+
 	private String getUuid() {
 		return DockerCommands.generateUUID();
 	}
diff --git a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/GuacamoleServiceImpl.java b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/GuacamoleServiceImpl.java
index 7292646..62721ec 100644
--- a/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/GuacamoleServiceImpl.java
+++ b/services/self-service/src/main/java/com/epam/dlab/backendapi/service/impl/GuacamoleServiceImpl.java
@@ -3,7 +3,10 @@ package com.epam.dlab.backendapi.service.impl;
 import com.epam.dlab.auth.UserInfo;
 import com.epam.dlab.backendapi.SelfServiceApplicationConfiguration;
 import com.epam.dlab.backendapi.service.GuacamoleService;
+import com.epam.dlab.constants.ServiceConsts;
 import com.epam.dlab.exceptions.DlabException;
+import com.epam.dlab.rest.client.RESTService;
+import com.epam.dlab.rest.contracts.KeyAPI;
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
 import lombok.extern.slf4j.Slf4j;
@@ -13,6 +16,7 @@ import org.apache.guacamole.net.SimpleGuacamoleTunnel;
 import org.apache.guacamole.protocol.ConfiguredGuacamoleSocket;
 import org.apache.guacamole.protocol.GuacamoleConfiguration;
 
+import javax.inject.Named;
 import java.util.Map;
 
 @Slf4j
@@ -23,20 +27,21 @@ public class GuacamoleServiceImpl implements GuacamoleService {
 	private static final String HOSTNAME_PARAM = "hostname";
 	private static final String CONNECTION_PROTOCOL_PARAM = "connectionProtocol";
 	private final SelfServiceApplicationConfiguration conf;
+	private final RESTService provisioningService;
 
 	@Inject
-	public GuacamoleServiceImpl(SelfServiceApplicationConfiguration conf) {
+	public GuacamoleServiceImpl(SelfServiceApplicationConfiguration conf,
+								@Named(ServiceConsts.PROVISIONING_SERVICE_NAME) RESTService provisioningService) {
 		this.conf = conf;
+		this.provisioningService = provisioningService;
 	}
 
 	@Override
 	public GuacamoleTunnel getTunnel(UserInfo userInfo, String host) {
 		try {
-			final String privateKeyContent = "";// TODO figure out from which place private key should be taken
-			final InetGuacamoleSocket socket = new InetGuacamoleSocket(conf.getGuacamoleHost(),
-					conf.getGuacamolePort());
-			final GuacamoleConfiguration guacamoleConfig = getGuacamoleConfig(privateKeyContent, conf.getGuacamole(),
-					host);
+			String key = provisioningService.get(KeyAPI.GET_ADMIN_KEY, userInfo.getAccessToken(), String.class);
+			InetGuacamoleSocket socket = new InetGuacamoleSocket(conf.getGuacamoleHost(), conf.getGuacamolePort());
+			GuacamoleConfiguration guacamoleConfig = getGuacamoleConfig(key, conf.getGuacamole(), host);
 			return new SimpleGuacamoleTunnel(new ConfiguredGuacamoleSocket(socket, guacamoleConfig));
 		} catch (Exception e) {
 			log.error("Can not create guacamole tunnel due to: " + e.getMessage());
diff --git a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ReuploadKeyServiceImplTest.java b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ReuploadKeyServiceImplTest.java
index 06dd1a5..6e4bdc1 100644
--- a/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ReuploadKeyServiceImplTest.java
+++ b/services/self-service/src/test/java/com/epam/dlab/backendapi/service/impl/ReuploadKeyServiceImplTest.java
@@ -141,7 +141,7 @@ public class ReuploadKeyServiceImplTest {
 				Arrays.asList(RUNNING, REUPLOADING_KEY), Arrays.asList(DataEngineType.SPARK_STANDALONE,
 						DataEngineType.CLOUD_SERVICE), RUNNING);
 		verify(requestBuilder).newKeyReupload(refEq(userInfo), anyString(), eq(keyContent), any(List.class));
-		verify(provisioningService).post("/reupload_key", TOKEN, reuploadFile, String.class);
+		verify(provisioningService).post("/key/reupload", TOKEN, reuploadFile, String.class);
 		verifyNoMoreInteractions(userResourceService, exploratoryService, keyDAO, exploratoryDAO, computationalDAO,
 				requestBuilder, provisioningService);
 		verifyZeroInteractions(requestId);
@@ -184,7 +184,7 @@ public class ReuploadKeyServiceImplTest {
 				Arrays.asList(RUNNING, REUPLOADING_KEY), Arrays.asList(DataEngineType.SPARK_STANDALONE,
 						DataEngineType.CLOUD_SERVICE), RUNNING);
 		verify(requestBuilder).newKeyReupload(refEq(userInfo), anyString(), eq(keyContent), any(List.class));
-		verify(provisioningService).post("/reupload_key", TOKEN, reuploadFile, String.class);
+		verify(provisioningService).post("/key/reupload", TOKEN, reuploadFile, String.class);
 		verifyNoMoreInteractions(userResourceService, exploratoryService, keyDAO, exploratoryDAO, computationalDAO,
 				requestBuilder, provisioningService);
 		verifyZeroInteractions(requestId);
@@ -299,7 +299,7 @@ public class ReuploadKeyServiceImplTest {
 
 		verify(keyDAO).updateEdgeStatus(USER, "reuploading key");
 		verify(requestBuilder).newKeyReupload(refEq(userInfo), anyString(), eq(""), any(List.class));
-		verify(provisioningService).post("/reupload_key", TOKEN, reuploadFile, String.class,
+		verify(provisioningService).post("/key/reupload", TOKEN, reuploadFile, String.class,
 				Collections.singletonMap("is_primary_reuploading", false));
 		verify(requestId).put(USER, expectedUuid);
 		verifyNoMoreInteractions(keyDAO, requestBuilder, provisioningService, requestId);
@@ -347,7 +347,7 @@ public class ReuploadKeyServiceImplTest {
 
 		verify(exploratoryDAO).updateStatusForExploratory(USER, EXPLORATORY_NAME, REUPLOADING_KEY);
 		verify(requestBuilder).newKeyReupload(refEq(userInfo), anyString(), eq(""), any(List.class));
-		verify(provisioningService).post("/reupload_key", TOKEN, reuploadFile, String.class,
+		verify(provisioningService).post("/key/reupload", TOKEN, reuploadFile, String.class,
 				Collections.singletonMap("is_primary_reuploading", false));
 		verify(requestId).put(USER, expectedUuid);
 		verifyNoMoreInteractions(exploratoryDAO, requestBuilder, provisioningService, requestId);
@@ -399,7 +399,7 @@ public class ReuploadKeyServiceImplTest {
 		verify(computationalDAO).updateStatusForComputationalResource(USER, EXPLORATORY_NAME,
 				"compName", REUPLOADING_KEY);
 		verify(requestBuilder).newKeyReupload(refEq(userInfo), anyString(), eq(""), any(List.class));
-		verify(provisioningService).post("/reupload_key", TOKEN, reuploadFile, String.class,
+		verify(provisioningService).post("/key/reupload", TOKEN, reuploadFile, String.class,
 				Collections.singletonMap("is_primary_reuploading", false));
 		verify(requestId).put(USER, expectedUuid);
 		verifyNoMoreInteractions(computationalDAO, requestBuilder, provisioningService, requestId);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org


[incubator-dlab] 05/12: [DLAB-4]: added routing to web terminal connection

Posted by bh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bhliva pushed a commit to branch v2.1.1
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git

commit 736a26e9e046ac7448e2704bf0d4de63920221fb
Author: Andriana Kovalyshyn <an...@epam.com>
AuthorDate: Tue May 7 17:14:08 2019 +0300

    [DLAB-4]: added routing to web terminal connection
---
 services/self-service/src/main/resources/webapp/src/app/app.module.ts | 2 ++
 .../src/main/resources/webapp/src/app/app.routing.module.ts           | 4 ++++
 2 files changed, 6 insertions(+)

diff --git a/services/self-service/src/main/resources/webapp/src/app/app.module.ts b/services/self-service/src/main/resources/webapp/src/app/app.module.ts
index 6307cd8..88aa630 100644
--- a/services/self-service/src/main/resources/webapp/src/app/app.module.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/app.module.ts
@@ -40,6 +40,7 @@ import { ErrorInterceptor } from './core/interceptors/error.interceptor';
 
 import { ReportingModule } from './reporting/reporting.module';
 import { ManagenementModule } from './management';
+import { WebterminalModule } from './webterminal';
 
 import { CoreModule } from './core/core.module';
 import { ToastrModule } from 'ngx-toastr';
@@ -60,6 +61,7 @@ import { ToastrModule } from 'ngx-toastr';
     AccessDeniedModule,
     ReportingModule,
     ManagenementModule,
+    WebterminalModule,
     RouterModule,
     AppRoutingModule,
     CoreModule.forRoot(),
diff --git a/services/self-service/src/main/resources/webapp/src/app/app.routing.module.ts b/services/self-service/src/main/resources/webapp/src/app/app.routing.module.ts
index 43d0abf..eba8d7e 100644
--- a/services/self-service/src/main/resources/webapp/src/app/app.routing.module.ts
+++ b/services/self-service/src/main/resources/webapp/src/app/app.routing.module.ts
@@ -26,6 +26,7 @@ import { AccessNotebookGuideComponent, PublicKeyGuideComponent } from './help';
 import { NotFoundComponent } from './not-found/not-found.component';
 import { AccessDeniedComponent } from './access-denied/access-denied.component';
 import { ReportingComponent } from './reporting/reporting.component';
+import { WebterminalComponent } from './webterminal/webterminal.component';
 import { ManagementComponent } from './management/management.component';
 import { AuthorizationGuard, CheckParamsGuard, CloudProviderGuard } from './core/services';
 
@@ -45,6 +46,9 @@ const routes: Routes = [{
     component: ManagementComponent,
     canActivate: [AuthorizationGuard]
   }, {
+    path: 'terminal/:id',
+    component: WebterminalComponent
+  }, {
     path: 'help/publickeyguide',
     component: PublicKeyGuideComponent,
     canActivate: [AuthorizationGuard]


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org


[incubator-dlab] 03/12: [DLAB-4]: added web terminal component

Posted by bh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bhliva pushed a commit to branch v2.1.1
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git

commit 255cb90c631d8a52affc1add7872f4cbca44b3b3
Author: Andriana Kovalyshyn <an...@epam.com>
AuthorDate: Tue May 7 17:09:43 2019 +0300

    [DLAB-4]: added web terminal component
---
 .../resources/webapp/src/app/webterminal/index.ts  | 36 ++++++++++
 .../src/app/webterminal/webterminal.component.html | 20 ++++++
 .../src/app/webterminal/webterminal.component.scss | 23 +++++++
 .../src/app/webterminal/webterminal.component.ts   | 77 ++++++++++++++++++++++
 4 files changed, 156 insertions(+)

diff --git a/services/self-service/src/main/resources/webapp/src/app/webterminal/index.ts b/services/self-service/src/main/resources/webapp/src/app/webterminal/index.ts
new file mode 100644
index 0000000..5b01d6a
--- /dev/null
+++ b/services/self-service/src/main/resources/webapp/src/app/webterminal/index.ts
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import { NgModule } from '@angular/core';
+import { CommonModule } from '@angular/common';
+import { FormsModule, ReactiveFormsModule } from '@angular/forms';
+import { MaterialModule } from '../shared/material.module';
+import { WebterminalComponent } from './webterminal.component';
+
+@NgModule({
+  imports: [
+    CommonModule,
+    FormsModule,
+    ReactiveFormsModule,
+    MaterialModule
+  ],
+  declarations: [WebterminalComponent],
+  exports: [WebterminalComponent]
+})
+export class WebterminalModule { }
diff --git a/services/self-service/src/main/resources/webapp/src/app/webterminal/webterminal.component.html b/services/self-service/src/main/resources/webapp/src/app/webterminal/webterminal.component.html
new file mode 100644
index 0000000..d99bf42
--- /dev/null
+++ b/services/self-service/src/main/resources/webapp/src/app/webterminal/webterminal.component.html
@@ -0,0 +1,20 @@
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+-->
+
+<div id="display" #display></div>
diff --git a/services/self-service/src/main/resources/webapp/src/app/webterminal/webterminal.component.scss b/services/self-service/src/main/resources/webapp/src/app/webterminal/webterminal.component.scss
new file mode 100644
index 0000000..57b8cc4
--- /dev/null
+++ b/services/self-service/src/main/resources/webapp/src/app/webterminal/webterminal.component.scss
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+ 
+#terminal {
+  height: 100vh;
+  display: block;
+}
diff --git a/services/self-service/src/main/resources/webapp/src/app/webterminal/webterminal.component.ts b/services/self-service/src/main/resources/webapp/src/app/webterminal/webterminal.component.ts
new file mode 100644
index 0000000..eae2e12
--- /dev/null
+++ b/services/self-service/src/main/resources/webapp/src/app/webterminal/webterminal.component.ts
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import { Component, OnInit, ViewEncapsulation, ViewContainerRef, ViewChild, Renderer2, ElementRef, Inject } from '@angular/core';
+import { DOCUMENT } from '@angular/common';
+import { ActivatedRoute } from '@angular/router';
+
+import Guacamole from 'guacamole-common-js';
+
+@Component({
+  selector: 'dlab-webterminal',
+  templateUrl: './webterminal.component.html',
+  styleUrls: ['./webterminal.component.scss']
+})
+export class WebterminalComponent implements OnInit {
+  public id: string;
+  @ViewChild('terminal', { read: ViewContainerRef }) terminal: ViewContainerRef;
+
+  constructor(
+    private elementRef: ElementRef,
+    private renderer: Renderer2,
+    private route: ActivatedRoute,
+    @Inject(DOCUMENT) private document) {
+  }
+
+  ngOnInit() {
+    this.id = this.route.snapshot.paramMap.get('id');
+    console.log(this.id);
+    this.open(this.id);
+  }
+
+  open(parameters) {
+
+    const tunnel = new Guacamole.HTTPTunnel(
+      'https://localhost:8443/api/tunnel', false,
+      { 'Authorization': 'Bearer token123' }
+    );
+    const guac = new Guacamole.Client(tunnel);
+    const display = document.getElementById('display');
+
+    display.appendChild(guac.getDisplay().getElement());
+
+    guac.connect('52.10.77.216');
+
+    // Error handler
+    guac.onerror = (error) => alert(error);
+    window.onunload = () => guac.disconnect();
+
+    // Mouse
+    const mouse = new Guacamole.Mouse(guac.getDisplay().getElement());
+
+    mouse.onmousemove = (mouseState) => guac.sendMouseState(mouseState);
+
+    // Keyboard
+    const keyboard = new Guacamole.Keyboard(document);
+
+    keyboard.onkeydown = (keysym) => guac.sendKeyEvent(1, keysym);
+
+    keyboard.onkeyup = (keysym) => guac.sendKeyEvent(0, keysym);
+  }
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org


[incubator-dlab] 11/12: [DLAB-583]: added meta data service

Posted by bh...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bhliva pushed a commit to branch v2.1.1
in repository https://gitbox.apache.org/repos/asf/incubator-dlab.git

commit 040ecad826314c09addbd2475c6f4b1a84d32474
Author: Andriana Kovalyshyn <an...@epam.com>
AuthorDate: Fri Apr 12 16:08:29 2019 +0300

    [DLAB-583]: added meta data service
---
 .../src/app/shared/navbar/navbar.component.html    | 23 ++++------------------
 .../src/app/shared/navbar/navbar.component.scss    | 21 ++++----------------
 2 files changed, 8 insertions(+), 36 deletions(-)

diff --git a/services/self-service/src/main/resources/webapp/src/app/shared/navbar/navbar.component.html b/services/self-service/src/main/resources/webapp/src/app/shared/navbar/navbar.component.html
index 8bb75c9..d13c23e 100644
--- a/services/self-service/src/main/resources/webapp/src/app/shared/navbar/navbar.component.html
+++ b/services/self-service/src/main/resources/webapp/src/app/shared/navbar/navbar.component.html
@@ -42,28 +42,13 @@
     <a *ngIf="healthStatus.status" [routerLink]="['/environment_management']" class="statusbar">
       <span class="material-icons" ngClass="{{healthStatus.status || ''}}">radio_button_checked</span>
     </a>
-    <!-- *ngIf="metadata" -->
-    <a  class="statusbar" #info (click)="actions.toggle($event, info)">
-      <span class="material-icons meta">info</span>
+    <a *ngIf="metadata" class="statusbar" #info (click)="actions.toggle($event, info)">
+      <span class="material-icons meta">share</span>
     </a>
     <bubble-up #actions class="list-menu" position="bottom-right">
       <div class="app-info">
-          <p>
-            <strong>Version: </strong>
-            <span class="ellipsis">{{ metadata?.version }}</span>
-          </p>
-          <p>
-            <strong>Branch: </strong>
-            <span class="ellipsis">{{ metadata?.branch }}</span>
-          </p>
-          <p>
-            <strong>Revision: </strong>
-            <span class="ellipsis">{{ metadata?.commit }}</span>
-          </p>
-          <p>
-            <a class="helper_instruction" [attr.href]="metadata?.release_notes" target="_blank">
-              <i class="material-icons">link</i>Release notes </a>
-          </p>
+          <p><strong>Version: </strong> {{ metadata?.version }}</p>
+          <p><strong>Branch: </strong> {{ metadata?.branch }}</p>
       </div>
     </bubble-up>
     <button class="btn btn-logout" (click)="logout_btnClick()">Log out <span class="user-name">{{currentUserName}}</span></button>
diff --git a/services/self-service/src/main/resources/webapp/src/app/shared/navbar/navbar.component.scss b/services/self-service/src/main/resources/webapp/src/app/shared/navbar/navbar.component.scss
index 45bc4da..e79d196 100644
--- a/services/self-service/src/main/resources/webapp/src/app/shared/navbar/navbar.component.scss
+++ b/services/self-service/src/main/resources/webapp/src/app/shared/navbar/navbar.component.scss
@@ -45,7 +45,7 @@
 
     .statusbar {
       display: flex;
-      width: 50px;
+      width: 60px;
       height: 46px;
       text-decoration: none;
       justify-content: center;
@@ -70,9 +70,9 @@
         }
       }
       .meta {
-        color: #c7d4d6;
+        color: #fff;
         &:hover {
-          color: #fff;
+          color: #c7d4d6;
         }
       }
     }
@@ -98,21 +98,8 @@
   p {
     strong {
       color: #455c74;
-      font-size: 14px;
+      font-size: 16px;
       font-weight: 600;
-      width: 120px;
-      display: inline-block;
-    }
-    .helper_instructiongit {
-      font-size: 14px;
-      i {
-        vertical-align: bottom;
-      }
-    }
-    span {
-      width: 180px;
-      display: inline-block;
-      vertical-align: bottom;
     }
   }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@dlab.apache.org
For additional commands, e-mail: commits-help@dlab.apache.org