diff --git a/README.md b/README.md
index 208078bcac5c6cc3d5f07b35ce912ada66c45324..fee78e20595ca1cd8c1e2e131679939f36ead3e3 100644
--- a/README.md
+++ b/README.md
@@ -7,6 +7,8 @@ Ce dépôt contient le _backend_ de Sigma, le successeur de Frankiz, un site ét
 
 À terme, ce projet doit tourner sur un serveur du BR et servir d'API à un _frontend_ React *au code séparé et documenté séparément* toute les données nécessaires à son bon fonctionnement (authentification, appartenance à un groupe, droits de visibilité...). Le dépôt pour le serveur front se trouve ici : <https://gitlab.binets.fr/br/sigma-frontend> (on l'appellera indifféremment serveur front, front ou frontend...)
 
+Le but des lignes qui suivent est de permettre au lecteur de rapidement mettre en place et lancer un sigma local et se familiariser avec son administration. Comment obtenir la documentation détaillée du projet est expliqué à la fin de ce document.
+
 Pour obtenir une copie du projet, cloner le dépôt par :
 ```bash
 git clone git@gitlab.binets.fr:br/sigma-backend.git
@@ -224,8 +226,4 @@ Le script pour faire tourner [JSDoc](http://usejsdoc.org/index.html) et régén
 
 Les fichiers compilés se situent dans [`doc`](.) avec leurs fichiers image. Par nature de l'outil JSDoc il est facile de documenter en détail des fonctions .js mais plus compliqué de documenter un fichier.
 
-A chaque execution JSDoc rajoute les commentaires placés dans chacun des fichiers dans la doc de façon structurée. Les notes en Markdown placés dans notes/ sont également rajoutées en tant que tutoriels (voir {@tutorial CONTRIBUTING}).
-
-La structure générale du projet peut être résumé comme suit :
-
-![struct_projet](../assets/struct.png "Structure du projet")
\ No newline at end of file
+A chaque execution JSDoc rajoute les commentaires placés dans chacun des fichiers dans la doc de façon structurée. Les notes en Markdown placés dans notes/ sont également rajoutées en tant que tutoriels (voir {@tutorial CONTRIBUTING}).
\ No newline at end of file
diff --git a/assets/auth.png b/assets/auth.png
new file mode 100644
index 0000000000000000000000000000000000000000..fb358fa894a0fa0ba32e4dccc49ddab2df52f061
Binary files /dev/null and b/assets/auth.png differ
diff --git a/assets/grapheDroits.jpg b/assets/grapheDroits.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..b24b0d52bfa422eed3841d081aa83cb4db4b4f4e
Binary files /dev/null and b/assets/grapheDroits.jpg differ
diff --git a/assets/struct.png b/assets/struct.png
index 7c9e4abaeabc48289eb6b57c61c922a24e4d0594..15d6d97d6964f37fb845fcc921a70346776011db 100644
Binary files a/assets/struct.png and b/assets/struct.png differ
diff --git a/db/knex_router.ts b/db/knex_router.ts
index abdcb4783f8f1fac9d11d4c2d5360d8313a22e7f..34962cb8ef2c08b4e5682e2d959e2e4f63f2ca5f 100644
--- a/db/knex_router.ts
+++ b/db/knex_router.ts
@@ -4,7 +4,7 @@
 require('dotenv').config();
 
 const environment = process.env.TARGET_ENV || 'development';
-const config = require('./knexfile')[environment];
+export const config = require('./knexfile')[environment];
 
 console.log("Running Knex configuration '%s'", environment);
 
diff --git a/db/migrations_v3/20181110191614_create_groups.js b/db/migrations/20181110191614_create_groups.js
similarity index 100%
rename from db/migrations_v3/20181110191614_create_groups.js
rename to db/migrations/20181110191614_create_groups.js
diff --git a/db/migrations_v3/20181110191757_create_associativetable_metagroup_memberships.js b/db/migrations/20181110191757_create_associativetable_metagroup_memberships.js
similarity index 100%
rename from db/migrations_v3/20181110191757_create_associativetable_metagroup_memberships.js
rename to db/migrations/20181110191757_create_associativetable_metagroup_memberships.js
diff --git a/db/migrations_v3/20181110192012_create_messages_announcements.js b/db/migrations/20181110192012_create_messages_announcements.js
similarity index 100%
rename from db/migrations_v3/20181110192012_create_messages_announcements.js
rename to db/migrations/20181110192012_create_messages_announcements.js
diff --git a/db/migrations_v3/20181110192431_create_messages_events.js b/db/migrations/20181110192431_create_messages_events.js
similarity index 100%
rename from db/migrations_v3/20181110192431_create_messages_events.js
rename to db/migrations/20181110192431_create_messages_events.js
diff --git a/db/migrations_v3/20181110192917_create_messages_private_posts.js b/db/migrations/20181110192917_create_messages_private_posts.js
similarity index 100%
rename from db/migrations_v3/20181110192917_create_messages_private_posts.js
rename to db/migrations/20181110192917_create_messages_private_posts.js
diff --git a/db/migrations_v3/20181110193153_create_messages_questions.js b/db/migrations/20181110193153_create_messages_questions.js
similarity index 100%
rename from db/migrations_v3/20181110193153_create_messages_questions.js
rename to db/migrations/20181110193153_create_messages_questions.js
diff --git a/db/migrations_v3/20181110193226_create_messages_answers.js b/db/migrations/20181110193226_create_messages_answers.js
similarity index 100%
rename from db/migrations_v3/20181110193226_create_messages_answers.js
rename to db/migrations/20181110193226_create_messages_answers.js
diff --git a/db/migrations_v3/20181110193517_create_requests_user_join_group.js b/db/migrations/20181110193517_create_requests_user_join_group.js
similarity index 100%
rename from db/migrations_v3/20181110193517_create_requests_user_join_group.js
rename to db/migrations/20181110193517_create_requests_user_join_group.js
diff --git a/db/migrations_v3/20181110193612_create_requests_group_join_metagroup.js b/db/migrations/20181110193612_create_requests_group_join_metagroup.js
similarity index 100%
rename from db/migrations_v3/20181110193612_create_requests_group_join_metagroup.js
rename to db/migrations/20181110193612_create_requests_group_join_metagroup.js
diff --git a/db/migrations_v3/20181110193656_create_requests_group_coauthor_event.js b/db/migrations/20181110193656_create_requests_group_coauthor_event.js
similarity index 100%
rename from db/migrations_v3/20181110193656_create_requests_group_coauthor_event.js
rename to db/migrations/20181110193656_create_requests_group_coauthor_event.js
diff --git a/db/migrations_v1/20180225001319_create_groups.js b/db/migrations_v1/20180225001319_create_groups.js
deleted file mode 100644
index 952684150583e80f1b957c534025f2c0f661ff07..0000000000000000000000000000000000000000
--- a/db/migrations_v1/20180225001319_create_groups.js
+++ /dev/null
@@ -1,17 +0,0 @@
-
-exports.up = function (knex, Promise) {
-    return knex.schema.createTable('groups', function (table) {
-        table.timestamp(true, true);
-        table.string('name').notNullable();
-        table.string('uid',128).primary().notNullable();
-        table.string('parent_uid',128);
-        table.foreign('parent_uid').references('groups.uid');
-        table.string('website').defaultTo('');
-        table.text('description').defaultTo('');
-        table.enum('school', ['polytechnique', 'ensta', 'supoptique']).notNullable();
-    });
-};
-
-exports.down = function (knex, Promise) {
-    return knex.schema.dropTable('groups');
-};
diff --git a/db/migrations_v1/20180302130024_create_messages.js b/db/migrations_v1/20180302130024_create_messages.js
deleted file mode 100644
index dead1ac7428fb9d313553611c737d0da84b93e47..0000000000000000000000000000000000000000
--- a/db/migrations_v1/20180302130024_create_messages.js
+++ /dev/null
@@ -1,14 +0,0 @@
-
-exports.up = function(knex, Promise) {
-    return knex.schema.createTable('messages', function (table) {
-        table.timestamps(true,true);
-        table.increments('id');
-
-        table.string('title').notNullable();
-        table.text('content');
-    });
-};
-
-exports.down = function(knex, Promise) {
-    return knex.schema.dropTable('messages');
-};
diff --git a/db/migrations_v1/20180302152113_requests.js b/db/migrations_v1/20180302152113_requests.js
deleted file mode 100644
index 7fa068828355a24885361b81ff8f301954213e7b..0000000000000000000000000000000000000000
--- a/db/migrations_v1/20180302152113_requests.js
+++ /dev/null
@@ -1,37 +0,0 @@
-
-exports.up = function(knex, Promise) {
-    return knex.schema.createTable('requests', function (table){
-        table.timestamps(true, true);
-        table.increments('id');
-        table.string('recipient').notNullable();
-        table.text('message');
-    }).then(()=>{
-        return knex.schema.createTable('user_join_group', function (table) {
-            table.inherits('requests');
-            table.string('useruid').notNullable();
-        }).then(()=>{
-            return knex.schema.createTable('group_join_event', function (table){
-                table.inherits('requests');
-                table.string('eventuid').notNullable();
-                table.string('senderuid').notNullable();
-            }).then(() => {
-                return knex.schema.createTable('your_group_host_event', function(table){
-                    table.inherits('requests');
-                    table.string('eventuid').notNullable();
-                    table.string('senderuid').notNullable();
-                });
-            });
-        });
-    });
-};
-
-exports.down = function(knex, Promise) {
-    return knex.schema.dropTable('your_group_host_event').then(() => {
-        return knex.schema.dropTable('group_join_event').then(() => {
-            return knex.schema.dropTable('user_join_group').then(() => {
-                return knex.schema.dropTable('requests').then(() => {
-                });
-            });
-        });
-    });
-};
diff --git a/db/migrations_v1/20180303192411_create_metaGroups.js b/db/migrations_v1/20180303192411_create_metaGroups.js
deleted file mode 100644
index fc416ee3a7c68fa53b96a1365b65f255fd06f266..0000000000000000000000000000000000000000
--- a/db/migrations_v1/20180303192411_create_metaGroups.js
+++ /dev/null
@@ -1,46 +0,0 @@
-
-/* 
-Une migrations pour rajouter dans la BDD les tables simple_group et meta_group 
-(cf la documentation de l'API GraphQL)
-Les objets qui étaient jusqu'à présent stoqués dans la table groups 
-sont déplacés dans la table simple_groups
-En cas de rollback, le déplacement se fait dans l'autre sens
-(et les meta groupes sont perdus)
-
-Après cette migration, plus rien n'est sensé être mis directement dans la table groups
-*/
-
-exports.up = function(knex, Promise) {
-    return knex('groups').select().then( groups_content => {
-        return knex('groups').del().then(function () {
-            return knex.schema.table('groups', function (table){
-                table.dropColumn('school');
-            }).then(()=> {
-                return knex.schema.createTable('simple_groups', function (table){
-                    table.inherits('groups');
-                    table.enum('school', ['polytechnique', 'ensta', 'supoptique']).notNullable();
-                }).then(() => {
-                    return knex.schema.createTable('meta_groups', function (table){
-                        table.inherits('groups');
-                    }).then(function(){
-                        return knex('simple_groups').insert(groups_content);
-                    });
-                });
-            });
-        });
-    });
-};
-
-exports.down = function(knex, Promise) {
-    return knex('simple_groups').select().then(simple_groups_content => {
-        return knex.schema.dropTable('simple_groups').then(function (){
-            return knex.schema.dropTable('meta_groups').then(function (){
-                return knex.schema.table('groups', function (table){
-                    table.enum('school', ['polytechnique', 'ensta', 'supoptique']).notNullable();
-                }).then(function (){
-                    return knex('groups').insert(simple_groups_content);
-                });
-            });
-        });
-    });
-};
diff --git a/db/migrations_v1/20180304154225_group_type_column.js b/db/migrations_v1/20180304154225_group_type_column.js
deleted file mode 100644
index f178a0a9ddf63ec1de5e2e6e050eb5ab4ea6af1c..0000000000000000000000000000000000000000
--- a/db/migrations_v1/20180304154225_group_type_column.js
+++ /dev/null
@@ -1,17 +0,0 @@
-
-exports.up = function(knex, Promise) {
-    return knex.schema.table('groups', function(table) {
-        table.enum('type', ['simple', 'meta', 'error']).notNullable().defaultTo('error');
-    }).then( () => {
-        return knex('simple_groups').update({type : "simple"}).then(() => {
-            return knex('meta_groups').update({type : "meta"});
-        });
-    });
-  
-};
-
-exports.down = function(knex, Promise) {
-    return knex.schema.table('groups', function(table) {
-        table.dropColumn('type');
-    });
-};
diff --git a/db/migrations_v1/20180305111321_metaGroup_member_table.js b/db/migrations_v1/20180305111321_metaGroup_member_table.js
deleted file mode 100644
index b69354e738b906e9cea4d91ee0bc83b30dda2920..0000000000000000000000000000000000000000
--- a/db/migrations_v1/20180305111321_metaGroup_member_table.js
+++ /dev/null
@@ -1,13 +0,0 @@
-
-exports.up = function(knex, Promise) {
-    return knex.schema.createTable('meta_group_membership', function (table){
-        table.timestamp(true, true);
-        table.string('member_uid').notNullable();
-        table.string('union_uid').notNullable();
-        table.enum('status', ['admin', 'speaker', 'basic']).notNullable();
-    });
-};
-
-exports.down = function(knex, Promise) {
-    return knex.schema.dropTable('meta_group_membership');
-};
diff --git a/db/migrations_v1/20180307213043_fixes_and_messages.js b/db/migrations_v1/20180307213043_fixes_and_messages.js
deleted file mode 100644
index e06d514c2cefa5d37bc4ea91516aa68b33dd5744..0000000000000000000000000000000000000000
--- a/db/migrations_v1/20180307213043_fixes_and_messages.js
+++ /dev/null
@@ -1,35 +0,0 @@
-
-exports.up = async function(knex, Promise) {
-    await knex.schema.createTable('announcements', function (table){
-        table.inherits('messages');
-        table.specificType('authors', knex.raw('varchar(128)[]'));
-        table.integer('views').defaultTo(0);
-    });
-    await knex.schema.createTable('events', function (table){
-        table.inherits('messages');
-        table.string('location');
-        table.dateTime('start_time');
-        table.dateTime('end_time');
-        table.boolean('is_announcement');
-        table.specificType('authors', knex.raw('varchar(128)[]'));
-    });
-    await knex.schema.createTable('group_message_relationships', function(table){
-        table.integer('message').notNullable();
-        table.string('group').notNullable();
-        table.enum('status', ['join', 'host', 'publish']).notNullable();
-    });
-    await knex.schema.createTable('user_participation', function(table){
-        table.integer('event').notNullable();
-        table.string('user_uid').notNullable();
-        table.enum('user_db', ['ldap']).notNullable().defaultTo('ldap');
-    });
-    return;
-};
-
-exports.down = async function(knex, Promise) {
-    await knex.schema.dropTable('group_message_relationships');
-    await knex.schema.dropTable('user_participation');
-    await knex.schema.dropTable('events');
-    await knex.schema.dropTable('announcements');
-    return;
-};
diff --git a/db/migrations_v1/20180309145434_supervision.js b/db/migrations_v1/20180309145434_supervision.js
deleted file mode 100644
index 554e48a5497dfb3f73dfb509338eac738de057b2..0000000000000000000000000000000000000000
--- a/db/migrations_v1/20180309145434_supervision.js
+++ /dev/null
@@ -1,14 +0,0 @@
-
-exports.up = function(knex, Promise) {
-    return knex.schema.createTable('taken_rights', function(table){
-        table.timestamp(true, true);
-        table.string('user_uid').notNullable();
-        table.string('group_uid').notNullable();
-        table.string('justification');
-    });
-  
-};
-
-exports.down = function(knex, Promise) {
-    return knex.schema.dropTable('taken_rights');
-};
diff --git a/db/migrations_v1/20180316003119_create_posts.js b/db/migrations_v1/20180316003119_create_posts.js
deleted file mode 100644
index 1207a75925c0c0bfaa8fadd8fe53e9f5b78b49dd..0000000000000000000000000000000000000000
--- a/db/migrations_v1/20180316003119_create_posts.js
+++ /dev/null
@@ -1,11 +0,0 @@
-
-exports.up = async function(knex, Promise) {
-    await knex.schema.createTable('posts', function(table) {
-        table.inherits('messages');
-    });
-    return;
-};
-
-exports.down = async function(knex, Promise) {
-    return knex.schema.dropTable('posts');
-};
diff --git a/db/migrations_v1/20180413024152_new_group_message_relations.js b/db/migrations_v1/20180413024152_new_group_message_relations.js
deleted file mode 100644
index 28c50374cd898bda5dd45ec196224e02510712bf..0000000000000000000000000000000000000000
--- a/db/migrations_v1/20180413024152_new_group_message_relations.js
+++ /dev/null
@@ -1,25 +0,0 @@
-
-exports.up = async function(knex, Promise) {
-    let relations = await knex.select().from('group_message_relationships');
-    await knex('group_message_relationships').del();    
-    await knex.schema.table('group_message_relationships', table => {
-        table.dropColumn('status');
-    });
-    await knex.schema.table('group_message_relationships', table => {
-        table.enum('status', ['join', 'host', 'publish', 'recieve', 'internal']);
-    });
-    return knex('group_message_relationships').insert(relations);
-};
-
-exports.down = async function(knex, Promise) {
-    let relations = await knex.select().from('group_message_relationships')
-        .whereIn('status', ['join', 'host', 'publish']);
-    await knex('group_message_relationships').del();    
-    await knex.schema.table('group_message_relationships', table => {
-        table.dropColumn('status');
-    });
-    await knex.schema.table('group_message_relationships', table => {
-        table.enum('status', ['join', 'host', 'publish']);
-    });
-    return knex('group_message_relationships').insert(relations);
-};
diff --git a/db/migrations_v1/20180415160405_message_types.js b/db/migrations_v1/20180415160405_message_types.js
deleted file mode 100644
index ff31bb0b75bae49f6c18c13349b1c0b017ef1670..0000000000000000000000000000000000000000
--- a/db/migrations_v1/20180415160405_message_types.js
+++ /dev/null
@@ -1,29 +0,0 @@
-
-exports.up = async function(knex, Promise) {
-    await knex.schema.createTable('private_posts', function(table){
-        table.inherits('messages');
-        table.string('author_uid', 128).notNullable();
-        table.enum('author_db', ['ldap']).notNullable().defaultTo('ldap');
-        table.string('recipient_uid', 128).notNullable();
-    });
-    await knex.schema.createTable('questions', function(table){
-        table.inherits('messages');
-        table.string('author_uid', 128).notNullable();
-        table.enum('author_db', ['ldap']).notNullable().defaultTo('ldap');
-        table.string('recipient_uid', 128).notNullable();
-    });
-    await knex.schema.createTable('answers', function(table){
-        table.inherits('messages');
-        table.string('author_uid', 128).notNullable();
-        table.string('recipient_uid', 128).notNullable();
-        table.string('for_question', 128).notNullable();
-    });
-    return;
-};
-
-exports.down = async function(knex, Promise) {
-    await knex.schema.dropTable('answers');
-    await knex.schema.dropTable('questions');
-    await knex.schema.dropTable('private_posts');
-    return;
-};
diff --git a/db/migrations_v1/20180530182824_drop_reciepient_column.js b/db/migrations_v1/20180530182824_drop_reciepient_column.js
deleted file mode 100644
index 90a48e9ae803a33ee89180fb4aa98b3b9b9f1f90..0000000000000000000000000000000000000000
--- a/db/migrations_v1/20180530182824_drop_reciepient_column.js
+++ /dev/null
@@ -1,52 +0,0 @@
-
-exports.up = async function(knex, Promise) {
-    let recipients = await knex('private_posts').select('id', 'recipient_uid');
-    for(entry of recipients){
-        knex('group_message_relationships').insert({
-            message : entry.id,
-            group : entry.recipient_uid,
-            status : "recieve"
-        });
-    }
-    await knex.schema.table('private_posts', (table) => {
-        table.dropColumn('recipient_uid');
-    });
-
-    recipients = await knex('questions').select('id', 'recipient_uid');
-    for(entry of recipients){
-        knex('group_message_relationships').insert({
-            message : entry.id,
-            group : entry.recipient_uid,
-            status : "recieve"
-        });
-    }
-    await knex.schema.table('questions', (table) => {
-        table.dropColumn('recipient_uid');
-    });
-    
-    recipients = await knex('answers').select('id', 'recipient_uid');
-    for(entry of recipients){
-        knex('group_message_relationships').insert({
-            message : entry.id,
-            group : entry.recipient_uid,
-            status : "recieve"
-        });
-    }
-    await knex.schema.table('answers', (table) => {
-        table.dropColumn('recipient_uid');
-    });
-    
-};
-
-exports.down = async function(knex, Promise) {
-    await knex.schema.table('private_posts', (table) => {
-        table.string("recipient_uid");
-    });
-    await knex.schema.table('questions', (table) => {
-        table.string("recipient_uid");
-    });
-    await knex.schema.table('answers', (table) => {
-        table.string("recipient_uid");
-    });
-  
-};
diff --git a/db/migrations_v1/20180530191430_fix_spelling_recieve.js b/db/migrations_v1/20180530191430_fix_spelling_recieve.js
deleted file mode 100644
index e816c31d7826661d4eedd1a8f9d52d3872c4e5b2..0000000000000000000000000000000000000000
--- a/db/migrations_v1/20180530191430_fix_spelling_recieve.js
+++ /dev/null
@@ -1,36 +0,0 @@
-
-exports.up = async function(knex, Promise) {
-    let relations = await knex.select().from('group_message_relationships');
-    await knex('group_message_relationships').del();    
-    await knex.schema.table('group_message_relationships', table => {
-        table.dropColumn('status');
-    });
-    await knex.schema.table('group_message_relationships', table => {
-        table.enum('status', ['join', 'host', 'publish', 'receive', 'internal']);
-    });
-    let entry;
-    for(entry of relations){
-        if(entry.status == "recieve"){
-            entry.status = "receive";
-        }
-    }
-    return knex('group_message_relationships').insert(relations);
-};
-
-exports.down = async function(knex, Promise) {
-    let relations = await knex.select().from('group_message_relationships');
-    await knex('group_message_relationships').del();    
-    await knex.schema.table('group_message_relationships', table => {
-        table.dropColumn('status');
-    });
-    await knex.schema.table('group_message_relationships', table => {
-        table.enum('status', ['join', 'host', 'publish', 'recieve', 'internal']);
-    });
-    let entry;
-    for(entry of relations){
-        if(entry.status == "receive"){
-            entry.status = "recieve";
-        }
-    }
-    return knex('group_message_relationships').insert(relations);
-};
diff --git a/db/migrations_v1/20180831165621_question_for_answer.js b/db/migrations_v1/20180831165621_question_for_answer.js
deleted file mode 100644
index 6464eabb459359f66e2b9c1e57df8c0be7e30da1..0000000000000000000000000000000000000000
--- a/db/migrations_v1/20180831165621_question_for_answer.js
+++ /dev/null
@@ -1,12 +0,0 @@
-
-exports.up = async function(knex, Promise) {
-    await knex.schema.table('questions', table => {
-        table.string('for_answer', 128);
-    });
-};
-
-exports.down = async function(knex, Promise) {
-    await knex.schema.table('questions', table => {
-        table.dropColumn('for_answer');
-    });
-};
diff --git a/db/migrations_v2/20181110100101_create_groups.js b/db/migrations_v2/20181110100101_create_groups.js
deleted file mode 100644
index 7f56bb994110ae4777981444a50dbfd8ec481dd7..0000000000000000000000000000000000000000
--- a/db/migrations_v2/20181110100101_create_groups.js
+++ /dev/null
@@ -1,24 +0,0 @@
-
-// Special groups (implemented by the seeds, specified as a note here) :
-// 'root' group, ancestor of all SimpleGroups. (simple group)
-// 'noone' group, direct child of 'root' group. Serves as recipient of all unpublished Messages 
-//      (e.g. drafts, messages with deleted recipient...) (simple group)
-
-exports.up = function (knex, Promise) {
-    return knex.schema.createTable('groups', function (table) {
-        table.string('gid',128).primary().notNullable(); //primary key *human readable*! should, but does not need to, match exactly column 'name'
-        table.timestamps(true, true); //adds timestamptz-type (a PostgresQL data type) updated_at and created_at columns
-        table.enum('type', ['simple', 'meta', 'error']).notNullable().defaultTo('error');
-        
-        table.string('parent_gid',128).notNullable().defaultTo('root')
-            .references('gid').inTable('groups') 
-            .onDelete('SET DEFAULT'); //if parent group is deleted, become child of root group
-        table.string('name').notNullable();
-        table.string('website'); //.defaultTo(''); <-- default to null instead
-        table.text('description').defaultTo('Hello world! <Insert group description here>');
-    });
-};
-
-exports.down = function (knex, Promise) {
-    return knex.schema.dropTable('groups');
-};
diff --git a/db/migrations_v2/20181110100202_create_childtable_simple_groups.js b/db/migrations_v2/20181110100202_create_childtable_simple_groups.js
deleted file mode 100644
index ead227bff989ece79ccb560ca093c8173333e8c7..0000000000000000000000000000000000000000
--- a/db/migrations_v2/20181110100202_create_childtable_simple_groups.js
+++ /dev/null
@@ -1,23 +0,0 @@
-//Après cette migration, plus rien n'est sensé être mis directement dans la table groups
-
-let schoolEnum = [
-    'polytechnique',
-    'ensta',
-    'supoptique',
-    'ensae',
-    'centrale',
-    'enscachan',
-    'otherschool',
-    'notaschool'
-];
-
-exports.up = function (knex, Promise) {
-    return knex.schema.createTable('simple_groups', function (table) {
-        table.inherits('groups');
-        table.enum('school', schoolEnum).notNullable();
-    });
-};
-
-exports.down = function (knex, Promise) {
-    return knex.schema.dropTable('simple_groups');
-};
diff --git a/db/migrations_v2/20181110100303_create_childtable_meta_groups.js b/db/migrations_v2/20181110100303_create_childtable_meta_groups.js
deleted file mode 100644
index 44108910206db39ad71c6bc3af7ea4689c6cdb0f..0000000000000000000000000000000000000000
--- a/db/migrations_v2/20181110100303_create_childtable_meta_groups.js
+++ /dev/null
@@ -1,10 +0,0 @@
-
-exports.up = function (knex, Promise) {
-    return knex.schema.createTable('meta_groups', function (table) {
-        table.inherits('groups');
-    });
-};
-
-exports.down = function (knex, Promise) {
-    return knex.schema.dropTable('meta_groups');
-};
diff --git a/db/migrations_v2/20181110100404_create_associativetable_metagroup_memberships.js b/db/migrations_v2/20181110100404_create_associativetable_metagroup_memberships.js
deleted file mode 100644
index d803d552d0f9edaf1d52a86e990f56344e0fb33a..0000000000000000000000000000000000000000
--- a/db/migrations_v2/20181110100404_create_associativetable_metagroup_memberships.js
+++ /dev/null
@@ -1,34 +0,0 @@
-// Using associative tables is the recommended way of representing many-to-many relationships.
-//https://en.wikipedia.org/wiki/Many-to-many_%28data_model%29
-//http://web.csulb.edu/colleges/coe/cecs/dbdesign/dbdesign.php?page=manymany.php
-
-let rightsEnum = [
-    'admin',
-    'speaker',
-    'member'
-];
-
-exports.up = function (knex, Promise) {
-    return knex.schema.createTable('metagroup_memberships', function (table) {
-        table.timestamps(true, true);
-        table.string('simple_group_gid',128).notNullable()
-            .references('gid').inTable('groups' /*'simple_groups'*/)
-            .onDelete('CASCADE'); //delete row from group_memberships if member is deleted
-        table.string('meta_group_gid',128).notNullable()
-            .references('gid').inTable('groups' /*'meta_groups'*/)
-            .onDelete('CASCADE');
-        /*
-        ^ as stated in https://www.postgresql.org/docs/10/static/ddl-inherit.html#DDL-INHERIT-CAVEATS,
-        "A serious limitation of the inheritance feature is that indexes (including unique constraints) and foreign key constraints only apply to single tables, not to their inheritance children."
-        it is not possible (with PostgresQL v10) to use both inheritance and foreign keys at once.
-        until it is, or a workaround is found, we simply don't maintain child-level referential integrity
-        and we hope all the rest will work, e.g. simple_group_gids will indeed refer to simple groups, and idem for meta_group_gids.
-        TODO: maybe, check if PostgresQL's latest version enables this feature?
-        */
-        table.enum('rights', rightsEnum).notNullable(); //TODO: this is not used by GraphQL schema!
-    });
-};
-
-exports.down = function (knex, Promise) {
-    return knex.schema.dropTable('metagroup_memberships');
-};
diff --git a/db/migrations_v2/20181110110101_create_messages.js b/db/migrations_v2/20181110110101_create_messages.js
deleted file mode 100644
index 2efdc03360ea32debdbb21a3ecc76ba796338035..0000000000000000000000000000000000000000
--- a/db/migrations_v2/20181110110101_create_messages.js
+++ /dev/null
@@ -1,18 +0,0 @@
-
-exports.up = function (knex, Promise) {
-    return knex.schema.createTable('messages', function (table) {
-        table.increments('mid'); //autoincrementing (non-nullable) primary key
-        table.timestamps(true, true); //adds timestamptz-type (a PostgresQL data type) updated_at and created_at columns
-        
-        table.string('recipient',128).notNullable().defaultTo('noone')
-            .references('gid').inTable('groups')
-            .onDelete('SET DEFAULT'); //if recipient is deleted, direct to the special "no-one" group
-        //'authors' can be a Group or a User, so specified in childtables.
-        table.string('title').notNullable();
-        table.text('content');
-    });
-};
-
-exports.down = function (knex, Promise) {
-    return knex.schema.dropTable('messages');
-};
diff --git a/db/migrations_v2/20181110110202_create_childtable_announcements.js b/db/migrations_v2/20181110110202_create_childtable_announcements.js
deleted file mode 100644
index 8c9e8c95cea9adc33272fa9589a46b3734978e2e..0000000000000000000000000000000000000000
--- a/db/migrations_v2/20181110110202_create_childtable_announcements.js
+++ /dev/null
@@ -1,22 +0,0 @@
-
-exports.up = function(knex, Promise) {
-    return knex.schema.createTable('announcements', function (table) {
-        table.inherits('messages');
-        //TODO: for now, we support only 1 author (where as graphql schema indicates support for [Group] authors)
-        table.string('author',128).notNullable()
-            .references('gid').inTable('groups')
-            .onDelete('CASCADE'); //delete message if author is deleted
-        table.integer('views').defaultTo(0);
-        /* 
-        we cannot declare this column yet, as table 'events' is not yet created.
-        it will be declared in the migration for the 'events' childtable.
-        table.integer('for_event')
-            .references('mid').inTable('events')
-            .onDelete('SET NULL');
-        */
-    });
-};
-
-exports.down = function(knex, Promise) {
-    return knex.schema.dropTable('announcements');
-};
diff --git a/db/migrations_v2/20181110110303_create_childtable_events.js b/db/migrations_v2/20181110110303_create_childtable_events.js
deleted file mode 100644
index 7d9e11e5391af4678b0b7b9d468c16b4b5c532b7..0000000000000000000000000000000000000000
--- a/db/migrations_v2/20181110110303_create_childtable_events.js
+++ /dev/null
@@ -1,47 +0,0 @@
-
-exports.up = function (knex, Promise) {
-    return knex.schema.createTable('events', function (table) {
-        table.inherits('messages');
-        table.string('location').notNullable();
-        table.dateTime('start_time').notNullable();
-        table.dateTime('end_time').notNullable(); //TODO: add a CHECK (https://www.postgresql.org/docs/current/ddl-constraints.html) that start_time < end_time
-
-        //TODO: for now, we support only 1 author (where as graphql schema indicates support for [Group] authors)
-        table.string('author', 128).notNullable()
-            .references('gid').inTable('groups')
-            .onDelete('CASCADE'); //delete message if author is deleted
-        table.integer('for_announcement')
-            .references('mid').inTable('messages' /*'announcements'*/)
-            .onDelete('SET NULL');
-        /*
-        ^ as stated in https://www.postgresql.org/docs/10/static/ddl-inherit.html#DDL-INHERIT-CAVEATS,
-        "A serious limitation of the inheritance feature is that indexes (including unique constraints) and foreign key constraints only apply to single tables, not to their inheritance children."
-        it is not possible (with PostgresQL v10) to use both inheritance and foreign keys at once.
-        until it is, or a workaround is found, we simply don't maintain child-level referential integrity
-        and we hope all the rest will work, e.g. simple_group_gids will indeed refer to simple groups, and idem for meta_group_gids.
-        TODO: maybe, check if PostgresQL's latest version enables this feature?
-        */
-        
-        //TODO: add support for participatingGroups and participatingUsers from the graphql schema
-
-    }).then( () => {
-        //update 'announcements' table by adding the 'for_event' column
-        knex.schema.table('announcements', function (table) {
-            table.integer('for_event')
-                .references('mid').inTable('messages' /*'events'*/)
-                .onDelete('SET NULL');
-        });
-        /*
-        ^ as stated in https://www.postgresql.org/docs/10/static/ddl-inherit.html#DDL-INHERIT-CAVEATS,
-        "A serious limitation of the inheritance feature is that indexes (including unique constraints) and foreign key constraints only apply to single tables, not to their inheritance children."
-        it is not possible (with PostgresQL v10) to use both inheritance and foreign keys at once.
-        until it is, or a workaround is found, we simply don't maintain child-level referential integrity
-        and we hope all the rest will work, e.g. simple_group_gids will indeed refer to simple groups, and idem for meta_group_gids.
-        TODO: maybe, check if PostgresQL's latest version enables this feature?
-        */
-    });
-};
-
-exports.down = function (knex, Promise) {
-    return knex.schema.dropTable('events');
-};
diff --git a/db/migrations_v2/20181110110404_create_childtable_private_posts.js b/db/migrations_v2/20181110110404_create_childtable_private_posts.js
deleted file mode 100644
index b92bd25f9c6dd5e78650908287f136dca3c6f2a1..0000000000000000000000000000000000000000
--- a/db/migrations_v2/20181110110404_create_childtable_private_posts.js
+++ /dev/null
@@ -1,11 +0,0 @@
-
-exports.up = function (knex, Promise) {
-    return knex.schema.createTable('private_posts', function (table) {
-        table.inherits('messages');
-        table.string('author').notNullable(); //must refer to a User's uid.
-    });
-};
-
-exports.down = function (knex, Promise) {
-    return knex.schema.dropTable('private_posts');
-};
diff --git a/db/migrations_v2/20181110110505_create_childtable_questions.js b/db/migrations_v2/20181110110505_create_childtable_questions.js
deleted file mode 100644
index 3cfcfbc72956ca71dcd5e0e326dc53a7b6eea9fb..0000000000000000000000000000000000000000
--- a/db/migrations_v2/20181110110505_create_childtable_questions.js
+++ /dev/null
@@ -1,18 +0,0 @@
-
-exports.up = function (knex, Promise) {
-    return knex.schema.createTable('questions', function (table) {
-        table.inherits('messages');
-        table.string('author').notNullable(); //must refer to a User's uid.
-        /* 
-        we cannot declare this column yet, as table 'answers' is not yet created.
-        it will be declared in the migration for the 'answers' childtable.
-        table.integer('for_answer')
-            .references('mid').inTable('answers')
-            .onDelete('SET NULL'); //if answer is deleted, set for_answer to null
-        */
-    });
-};
-
-exports.down = function (knex, Promise) {
-    return knex.schema.dropTable('questions');
-};
diff --git a/db/migrations_v2/20181110110606_create_childtable_answers.js b/db/migrations_v2/20181110110606_create_childtable_answers.js
deleted file mode 100644
index 2407c4961bad2914baab676dbf73cbc8321d1736..0000000000000000000000000000000000000000
--- a/db/migrations_v2/20181110110606_create_childtable_answers.js
+++ /dev/null
@@ -1,46 +0,0 @@
-
-exports.up = function (knex, Promise) {
-    return knex.schema.createTable('answers', function (table) {
-        table.inherits('messages');
-        /*
-        we require that a GraphQL Answer's author field be the same as its recipient field.
-        since recipient is already known (defined in the 'messages' parent-table),
-        then we simply don't store answers' authors in database.
-        (another way would be to add equality constraints, but uselessly complex.)
-        table.string('author', 128).notNullable()
-            .references('gid').inTable('groups')
-            .onDelete('CASCADE');
-        */
-        table.integer('for_question').notNullable()
-            .references('mid').inTable('messages' /*'questions'*/)
-            .onDelete('CASCADE'); //if question is deleted, also delete the answer
-        /*
-        ^ as stated in https://www.postgresql.org/docs/10/static/ddl-inherit.html#DDL-INHERIT-CAVEATS,
-        "A serious limitation of the inheritance feature is that indexes (including unique constraints) and foreign key constraints only apply to single tables, not to their inheritance children."
-        it is not possible (with PostgresQL v10) to use both inheritance and foreign keys at once.
-        until it is, or a workaround is found, we simply don't maintain child-level referential integrity
-        and we hope all the rest will work, e.g. simple_group_gids will indeed refer to simple groups, and idem for meta_group_gids.
-        TODO: maybe, check if PostgresQL's latest version enables this feature?
-        */
-
-    }).then(() => {
-        //update 'questions' table by adding the 'for_answer' column
-        knex.schema.table('questions', function (table) {
-            table.integer('for_answer')
-                .references('mid').inTable('messages' /*'answers'*/)
-                .onDelete('SET NULL'); //if answer is deleted, set for_answer to null
-        });
-        /*
-        ^ as stated in https://www.postgresql.org/docs/10/static/ddl-inherit.html#DDL-INHERIT-CAVEATS,
-        "A serious limitation of the inheritance feature is that indexes (including unique constraints) and foreign key constraints only apply to single tables, not to their inheritance children."
-        it is not possible (with PostgresQL v10) to use both inheritance and foreign keys at once.
-        until it is, or a workaround is found, we simply don't maintain child-level referential integrity
-        and we hope all the rest will work, e.g. simple_group_gids will indeed refer to simple groups, and idem for meta_group_gids.
-        TODO: maybe, check if PostgresQL's latest version enables this feature?
-        */
-    });
-};
-
-exports.down = function (knex, Promise) {
-    return knex.schema.dropTable('answers');
-};
diff --git a/db/migrations_v2/20181110120101_create_requests.js b/db/migrations_v2/20181110120101_create_requests.js
deleted file mode 100644
index b89276fa6688bef7aab14ac24579253c1fe06489..0000000000000000000000000000000000000000
--- a/db/migrations_v2/20181110120101_create_requests.js
+++ /dev/null
@@ -1,38 +0,0 @@
-
-exports.up = function (knex, Promise) {
-    return knex.schema.createTable('requests', function (table) {
-        table.increments('rid'); //autoincrementing (non-nullable) primary key
-        table.timestamps(true, true); //adds timestamptz-type (a PostgresQL data type) updated_at and created_at columns
-
-        table.string('request_to',128).notNullable()
-            .references('gid').inTable('groups')
-            .onDelete('CASCADE'); //delete request from database if recipient group is deleted
-        //'request_from' can be a Group or a User, so specified in childtables.
-        table.text('request_comment');
-    });
-
-    /* TODO: make a new migration to create these child tables
-    .then(()=>{
-        return knex.schema.createTable('user_join_group', function (table) {
-            table.inherits('requests');
-            table.string('useruid').notNullable();
-        }).then(()=>{
-            return knex.schema.createTable('group_join_event', function (table){
-                table.inherits('requests');
-                table.string('eventuid').notNullable();
-                table.string('senderuid').notNullable();
-            }).then(() => {
-                return knex.schema.createTable('your_group_host_event', function(table){
-                    table.inherits('requests');
-                    table.string('eventuid').notNullable();
-                    table.string('senderuid').notNullable();
-                });
-            });
-        });
-    });
-    */
-};
-
-exports.down = function (knex, Promise) {
-    return knex.schema.dropTable('requests');
-};
diff --git a/db/migrations_v2/20181110120202_create_childtable_user_join_group.js b/db/migrations_v2/20181110120202_create_childtable_user_join_group.js
deleted file mode 100644
index 2ea3b56dd66a9541afa3d190c768f05c60f226ab..0000000000000000000000000000000000000000
--- a/db/migrations_v2/20181110120202_create_childtable_user_join_group.js
+++ /dev/null
@@ -1,11 +0,0 @@
-
-exports.up = function(knex, Promise) {
-    return knex.schema.createTable('user_join_group', function (table) {
-        table.inherits('requests');
-        table.string('request_from').notNullable(); //must refer to a User's uid.
-    });
-};
-
-exports.down = function(knex, Promise) {
-    return knex.schema.dropTable('user_join_group');
-};
diff --git a/db/migrations_v2/20181110120303_create_childtable_group_join_metagroup.js b/db/migrations_v2/20181110120303_create_childtable_group_join_metagroup.js
deleted file mode 100644
index 9aa23e822682c22053f08d12df37d131fe0a04cd..0000000000000000000000000000000000000000
--- a/db/migrations_v2/20181110120303_create_childtable_group_join_metagroup.js
+++ /dev/null
@@ -1,22 +0,0 @@
-
-exports.up = function (knex, Promise) {
-    return knex.schema.createTable('group_join_metagroup', function (table) {
-        table.inherits('requests');
-        table.string('request_from',128).notNullable()
-            .references('gid').inTable('groups' /*'simple_groups'*/)
-            .onDelete('CASCADE'); //if requesting group is deleted, also delete request
-        /*
-        ^ as stated in https://www.postgresql.org/docs/10/static/ddl-inherit.html#DDL-INHERIT-CAVEATS,
-        "A serious limitation of the inheritance feature is that indexes (including unique constraints) and foreign key constraints only apply to single tables, not to their inheritance children."
-        it is not possible (with PostgresQL v10) to use both inheritance and foreign keys at once.
-        until it is, or a workaround is found, we simply don't maintain child-level referential integrity
-        and we hope all the rest will work, e.g. simple_group_gids will indeed refer to simple groups, and idem for meta_group_gids.
-        TODO: maybe, check if PostgresQL's latest version enables this feature?
-        */
-    });
-};
-
-exports.down = function (knex, Promise) {
-    return knex.schema.dropTable('group_join_metagroup');
-};
-
diff --git a/db/migrations_v2/20181110120404_create_childtable_group_coauthor_event.js b/db/migrations_v2/20181110120404_create_childtable_group_coauthor_event.js
deleted file mode 100644
index a2097480bf4fa8237eadea26e9f476cc7e78ba6c..0000000000000000000000000000000000000000
--- a/db/migrations_v2/20181110120404_create_childtable_group_coauthor_event.js
+++ /dev/null
@@ -1,24 +0,0 @@
-
-exports.up = function (knex, Promise) {
-    return knex.schema.createTable('group_coauthor_event', function (table) {
-        table.inherits('requests');
-        table.string('request_from',128).notNullable()
-            .references('gid').inTable('groups' /*'simple_groups'*/)
-            .onDelete('CASCADE'); //if requesting group is deleted, also delete request
-        /*
-        ^ as stated in https://www.postgresql.org/docs/10/static/ddl-inherit.html#DDL-INHERIT-CAVEATS,
-        "A serious limitation of the inheritance feature is that indexes (including unique constraints) and foreign key constraints only apply to single tables, not to their inheritance children."
-        it is not possible (with PostgresQL v10) to use both inheritance and foreign keys at once.
-        until it is, or a workaround is found, we simply don't maintain child-level referential integrity
-        and we hope all the rest will work, e.g. simple_group_gids will indeed refer to simple groups, and idem for meta_group_gids.
-        TODO: maybe, check if PostgresQL's latest version enables this feature?
-        */
-        table.integer('for_event').notNullable()
-            .references('mid').inTable('messages' /*'events'*/)
-            .onDelete('CASCADE'); //if event is deleted, also delete request
-    });
-};
-
-exports.down = function (knex, Promise) {
-    return knex.schema.dropTable('group_coauthor_event');
-};
diff --git a/db/migrations_v2/readme.txt b/db/migrations_v2/readme.txt
deleted file mode 100644
index f70d6788d84fc106d9dcb44be9353f8688524985..0000000000000000000000000000000000000000
--- a/db/migrations_v2/readme.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-Cette version du schéma de la BDD a été abandonnée lorsqu'on s'est rendus compte que,
-du moins pour la version actuelle de PostgresQL (v11 en 2018-11), on ne peut pas utiliser
-simultanément le inheritance et des foreign keys. Plus précisément,
-
-https://stackoverflow.com/questions/24360312/foreign-keys-table-inheritance-in-postgresql
-> The short version: you can use foreign keys, or table inheritance, but not both. This isn't inherently impossible, it's just that it's technically quite difficult to implement unique indexes that span inherited tables in PostgreSQL in a fast, reliable manner. Without that, you can't have a useful foreign key. Nobody's successfully implemented it well enough for a patch adding support to be accepted into PostgreSQL yet.
-> A foreign key can point to a table that is part of an inheritance hierarchy, but it'll only find rows in that table exactly. Not in any parent or child tables. To see which rows the foreign key sees, do a `SELECT * FROM ONLY` thetable. The ONLY keyword means "ignoring inheritance" and that's what the foreign key lookup will do.
-
-https://www.postgresql.org/docs/current/ddl-inherit.html#DDL-INHERIT-CAVEATS
-A serious limitation of the inheritance feature is that indexes (including unique constraints) and foreign key constraints only apply to single tables, not to their inheritance children. This is true on both the referencing and referenced sides of a foreign key constraint. 
-
-Il peut toutefois être utile de garder cette version du schéma de la BDD dans un coin, au cas où
-la fonctionnalité inheritance + foreign keys arrive dans une prochaine version de PostgresQL...
diff --git a/db/seeds_v3/00_special_groups.js b/db/seeds/00_special_groups.js
similarity index 100%
rename from db/seeds_v3/00_special_groups.js
rename to db/seeds/00_special_groups.js
diff --git a/db/seeds_v3/01_dummy_groups.js b/db/seeds/01_dummy_groups.js
similarity index 100%
rename from db/seeds_v3/01_dummy_groups.js
rename to db/seeds/01_dummy_groups.js
diff --git a/db/seeds_v3/02_dummy_metagroups.js b/db/seeds/02_dummy_metagroups.js
similarity index 100%
rename from db/seeds_v3/02_dummy_metagroups.js
rename to db/seeds/02_dummy_metagroups.js
diff --git a/db/seeds_v3/03_dummy_metagroup_memberships.js b/db/seeds/03_dummy_metagroup_memberships.js
similarity index 100%
rename from db/seeds_v3/03_dummy_metagroup_memberships.js
rename to db/seeds/03_dummy_metagroup_memberships.js
diff --git a/db/seeds_v3/04_dummy_announcements.js b/db/seeds/04_dummy_announcements.js
similarity index 100%
rename from db/seeds_v3/04_dummy_announcements.js
rename to db/seeds/04_dummy_announcements.js
diff --git a/db/seeds_v3/05_dummy_events.js b/db/seeds/05_dummy_events.js
similarity index 100%
rename from db/seeds_v3/05_dummy_events.js
rename to db/seeds/05_dummy_events.js
diff --git a/db/seeds_v3/06_dummy_private_posts.js b/db/seeds/06_dummy_private_posts.js
similarity index 100%
rename from db/seeds_v3/06_dummy_private_posts.js
rename to db/seeds/06_dummy_private_posts.js
diff --git a/db/seeds_v3/07_dummy_requests.js b/db/seeds/07_dummy_requests.js
similarity index 100%
rename from db/seeds_v3/07_dummy_requests.js
rename to db/seeds/07_dummy_requests.js
diff --git a/db/seeds_v1/01_create_groups.js b/db/seeds_v1/01_create_groups.js
deleted file mode 100644
index a66046cc274a3f0498818d31d70bfc35d5039afd..0000000000000000000000000000000000000000
--- a/db/seeds_v1/01_create_groups.js
+++ /dev/null
@@ -1,129 +0,0 @@
-
-exports.seed = async function(knex, Promise) {
-    // Deletes ALL existing entries
-    await knex('groups').del();
-    await knex('simple_groups').del();
-    // Inserts seed entries
-    const simple_groups = [{
-        name: 'BR',
-        uid: 'br',
-        website: 'br.binets.fr',
-        description: 'Le Binet Réseau est responsable du réseau internet des élèves sur le campus de l\'Ecole polytechnique.',
-        school: 'polytechnique',
-        parent_uid: 'kes',
-        type : 'simple'
-    },{
-        name: 'JTX',
-        uid: 'jtx',
-        description: "Le Journal Télévisé de l'X te fait revivre les évènements promo en images et expose régulièrement ses créations.",
-        website: 'binet-jtx.com',
-        school: 'polytechnique',
-        parent_uid: 'kes',
-        type : 'simple'
-    },{
-        name: 'Faërix',
-        uid: 'faerix',
-        website: 'faerix.net',
-        description: "Faërix est le binet de jeux de l'école : jeux de cartes, de plateau, de rôles... Le binet organise chaque année, sur un week-end, une convention de jeux de rôles, les Rencontres Rôlistes de l'X.",
-        school: 'polytechnique',
-        parent_uid: 'kes',
-        type : 'simple'
-    },{
-        name: 'Bôbar',
-        uid: 'bob',
-        description: "Le bar de l'École polytechnique, tenu par et pour les X. Le BôBar t'enkhûle avec affection",
-        website: 'http://tdb.bobar.pro/',
-        school: 'polytechnique',
-        parent_uid: 'kes',
-        type : 'simple'
-    },{
-        name: 'Kès',
-        uid: 'kes',
-        description: "La Kès est le bureau des élèves de l'école, constitué de 16 kessiers élus par la promotion. Son local est ouvert de 12h30 à 22h30 tous les jours de la semaine (vendredi jusqu'à 18h15), et se trouve à l'entrée Est du Bataclan. Pour plus d'infos : consultez le Wikix ou téléphonez au 2726 pour faire un gros bisou à Mina et Zaza",
-        website: 'kes.binets.fr',
-        school: 'polytechnique',
-        type : 'simple'
-    },{
-        name: 'DaTA',
-        uid: 'data',
-        website: 'data-ensta.fr',
-        school: 'ensta',
-        parent_uid: 'bdeensta',
-        type : 'simple'
-    },{
-        name: 'Laser Wave',
-        uid: 'laserwave',
-        website: 'laserwave.fr',
-        school: 'supoptique',
-        type : 'simple'
-    },{
-        name: 'WikiX',
-        uid: 'wikix',
-        website: 'https://wikix.polytechnique.org/',
-        school: "polytechnique",
-        description: "Le recueil de la mémoire des élèves",
-        type: "simple",
-    },{
-        name: 'BDE Ensta',
-        uid: 'bdeensta',
-        website: 'http://bde.ensta-paristech.fr/',
-        school: 'ensta',
-        type : 'simple'
-    },{
-        name: "X-Chine",
-        uid: "x-chine",
-        school: "polytechnique",
-        description: `X-Chine est le binet qui rassemble les amoureux et les curieux de l'Empire du Milieu, qu'ils soient chinois ou non !`,
-        type: "simple"
-    },{
-        name: 'Subaïsse',
-        uid: 'subaisse',
-        description: 'Le Binet de ceux qui subissent',
-        school: 'polytechnique',
-        parent_uid: 'kes',
-        type : 'simple'
-    },{
-        name: 'X-Broadway',
-        uid: 'xbroadway',
-        website: 'https://xbroadway.binets.fr/',
-        description: "Créé par la promotion 2012, le binet X-Broadway prépare pendant une année une comédie musicale qu'il joue durant le tronc commun de la promo suivante. Chaque année, le bureau est composé de multiples pôles : comédie, danse, manute, musique, et prez'. Une fois le bureau constitué, il recrute sa troupe parmi les étudiants du plateau de Saclay.",
-        school: "polytechnique",
-        parent_uid: 'kes',
-        type: 'simple'
-    },{
-        name: 'Å’nologie',
-        uid: 'oenologie',
-        website: 'oenologie.binets.fr',
-        description: "Le binet de la Finesse et du Bon Goût par excellence. Cours d'initiation, dégustations, soirées Vins & Fromages, voyages chez les producteurs : le Binet Œnologie est là pour partager la passion du vin avec tous, néophytes ou connaisseurs.",
-        school: "polytechnique",
-        parent_uid: "kes",
-        type: "simple"
-    },{
-        name: "Tribunes de l'X",
-        uid: 'politix',
-        website: 'https://www.facebook.com/Tribunes-de-lX-250533552110256/',
-        description: "Le binet Tribunes de l'X a pour but d'intéresser les élèves à la \"vie de la cité\" en organisant des conférences ou débats, autour de grandes sujets d'actualité et d'enjeux fondamentaux pour le débat public, avec des personnalités diverses, hommes politiques ou intellectuels. Cette association est la tribune étudiante de l'X.",
-        school: "polytechnique",
-        parent_uid: "kes",
-        type: 'simple'
-    },{
-        name: "X-Finance",
-        uid: 'x-finance',
-        description: "X Finance gère un fonds d'investissement étudiant au profit de la FX en partenariat avec Edmond de Rothschild. Nous développons également des modèles algorithmiques pour gérer le risque. Le binet organise également des événements de networking en partenariat avec des écoles françaises et européeennes.",
-        school: "polytechnique",
-        parent_uid: "kes",
-        type: "simple"
-    },{
-        name: "ASK",
-        uid: "ask",
-        description: "L'Action Sociale de la Kès regroupe les activités à caractère social et solidaire du platâl, comme le soutien scolaire, la bibliothèque de rue, les maraudes, le don du sang, les journées handicap ou encore le parrainage d'enfants. Chacun y trouvera son compte et pourra s'y investir à sa guise! Si tu as l'âme de l'Abbé Pierre ou le sex appeal d'Adriana Karembeu, chauffe toi et viens donner un peu de ton temps aux autres! Promis, on est gentils. Des bisous bisous!",
-        school: "polytechnique",
-        parent_uid: "kes",
-        type: "simple"
-    }
-
-    ];
-
-    return knex('simple_groups').insert(simple_groups);
-    
-};
diff --git a/db/seeds_v1/02_make_metagroups.js b/db/seeds_v1/02_make_metagroups.js
deleted file mode 100644
index 432bb33d1b96b6f4fda099d16cbf35d471193c6a..0000000000000000000000000000000000000000
--- a/db/seeds_v1/02_make_metagroups.js
+++ /dev/null
@@ -1,24 +0,0 @@
-
-exports.seed = function(knex, Promise) {
-    // Deletes ALL existing entries
-    return knex('meta_groups').del()
-      .then(function () {
-        // Inserts seed entries
-        return knex('meta_groups').insert([
-          { 
-            name: 'Fédérez',
-            uid: 'federez',
-            website: 'federez.io',
-            description: "L'association de toutes les associations de réseau des écoles",
-            type : 'meta'
-          },
-          { 
-            name: 'BSCkBl',
-            uid: 'bsckbl',
-            website: 'bsckbl.binets.fr',
-            type : 'meta'
-          }
-        ]);
-      });
-  };
-  
\ No newline at end of file
diff --git a/db/seeds_v1/03_make_requests.js b/db/seeds_v1/03_make_requests.js
deleted file mode 100644
index aceaf4721893cb157cd6d5197384e49ff99b0e36..0000000000000000000000000000000000000000
--- a/db/seeds_v1/03_make_requests.js
+++ /dev/null
@@ -1,38 +0,0 @@
-
-exports.seed = function(knex, Promise) {
-  // Deletes ALL existing entries
-  return knex('user_join_group').del()
-  .then(function () {
-    // Inserts seed entries
-  return knex('user_join_group').insert([
-    { id: 1, 
-      recipient: 'br',
-      message: "C'est ici pour développer sigma ?",
-      useruid: "anatole.romon"
-    },
-    { id: 2, 
-      recipient: 'br',
-      message: "Bonjour, je cherche le binet subaisse",
-      useruid: "quentin.gendre"
-    },
-    {id : 3,
-    recipient: 'jtx',
-    message: "Quand je serais grand je serais cinéaste !",
-    useruid: "anatole.romon"
-  }
-  ]).then(() => {
-  return knex('group_join_event').del()
-  .then(function (){
-  return knex('group_join_event').insert([
-    {
-      id : 4,
-      recipient : "br",
-      message : "nous aussi on veut coder sigma",
-      eventuid : 42,
-      senderuid : "subaisse"
-    }
-  ]);
-  });
-  });
-  });
-};
diff --git a/db/seeds_v1/04_make_posts.js b/db/seeds_v1/04_make_posts.js
deleted file mode 100644
index 6ac602b8c9439e729996c21fc3c6653cb0fcdab6..0000000000000000000000000000000000000000
--- a/db/seeds_v1/04_make_posts.js
+++ /dev/null
@@ -1,110 +0,0 @@
-
-exports.seed = async function(knex, Promise) {
-    await knex('announcements').del();
-    await knex('announcements').insert([{
-        id: 0,
-        title: "Fissurer c'est bien",
-        content: "Les nouveaux ordis du JTX sont arrivés ! Le BR aide à les installer ;)"
-    },{
-        id: 1,
-        title: "Proj'et Promotion",
-        content: "La nouvelle proj' du JTX arrive !"
-    },{
-        id: 2,
-        title: "Fête de la Lune",
-        content: "C'est bientôt la fête de la Lune ! Inscrivez-vous pour un dîner-spectacle dans le Grand Hall !"
-    },{
-        id: 3,
-        title: "Formation Web",
-        content: "Envie d'apprendre à faire un site Web en Django ? Alors viens en amphi Sauvy ce jeudi à 20h !"
-    },{
-        id: 4,
-        title: "Journées FedeRez",
-        content: "Cette année, nous parlerons de vie privée, protection des données et sécurité",
-        authors: ['federez']
-    }]);
-
-    await knex('events').del();
-    await knex('events').insert([
-        {
-            title : "coder sigma",
-            content : "Tous ensemble pour faire du Dev. Que demander de plus ? (a part du sommeil)",
-            start_time : knex.fn.now(),
-            end_time : knex.fn.now(),
-            is_announcement : false
-        }
-    ]);
-
-    await knex('private_posts').del();
-    await knex('private_posts').insert([
-        {
-            title : "Anatole met du temps à faire avancer resolver_dev",
-            content : "C'est scandaleux qu'anatole mette autant de temps à corriger les bugs et merge sa branche. Comment on fait pour présenter le projet aux 17 ?",
-            author_uid : "guillaume.wang",
-            author_db : "ldap"
-        },
-        {
-            title : "Sushi tradi",
-            content : "Le prochain sushi tradi aura lieux ce mardi. Tout le monde est invité.",
-            author_uid : "martin.guillot",
-            author_db : "ldap"
-        },
-    ]);
-
-    await knex('group_message_relationships').del();
-
-    await knex('group_message_relationships').insert([
-        {
-            message : 42,
-            group : 'br',
-            status : 'host'
-        },
-        {
-            message : 42,
-            group : 'kes',
-            status : 'receive'
-        }
-    
-    ]);
-
-    await knex('group_message_relationships').insert([{
-        message: 0,
-        group: 'br',
-        status: 'host'
-    },
-    {
-        message: 0,
-        group: 'jtx',
-        status: 'host'
-    },
-    {
-        message: 1,
-        group: 'br',
-        status: 'host'
-    },
-    {
-        message: 2,
-        group: 'xchine',
-        status: 'host'
-    },
-    {
-        message: 3,
-        group: 'br',
-        status: 'host'
-    }]);
-  
-    await knex('group_message_relationships').insert([
-        {
-            message : 4,
-            group : "br",
-            status : "receive"
-        },
-        {
-            message : 5,
-            group : "faerix",
-            status : "receive"
-        }
-    ]);
-
-    return;
-};
diff --git a/db/seeds_v1/05_metagroup_membership.js b/db/seeds_v1/05_metagroup_membership.js
deleted file mode 100644
index cd1587503a14bf8f86f50d8f3964f34113bae412..0000000000000000000000000000000000000000
--- a/db/seeds_v1/05_metagroup_membership.js
+++ /dev/null
@@ -1,23 +0,0 @@
-
-exports.seed = async function(knex, Promise) {
-    // Deletes ALL existing entries
-    await knex('meta_groups').del();
-    await knex('meta_group_membership').insert([
-      { 
-        member_uid : "br",
-        union_uid : "federez",
-        status : "admin"
-      },
-      { 
-        member_uid : "data",
-        union_uid : "federez",
-        status : "admin"
-      },
-      { 
-        member_uid : "bob",
-        union_uid : "bsckbl",
-        status : "admin"
-      }
-    ]);
-    return;
-};
diff --git a/db/seeds_v1/06_taken_rights.js b/db/seeds_v1/06_taken_rights.js
deleted file mode 100644
index 9915ef9ae4d45a7f55c737c185ed4589313b9258..0000000000000000000000000000000000000000
--- a/db/seeds_v1/06_taken_rights.js
+++ /dev/null
@@ -1,14 +0,0 @@
-
-exports.seed = function(knex, Promise) {
-  // Deletes ALL existing entries
-  return knex('taken_rights').del()
-    .then(function () {
-      // Inserts seed entries
-      return knex('taken_rights').insert([
-        {
-          user_uid : "anatole.romon",
-          group_uid : "kes",
-        }
-      ]);
-    });
-};
diff --git a/db/seeds_v1/07_make_event.js b/db/seeds_v1/07_make_event.js
deleted file mode 100644
index 31668a7df58d839711c869c3c488614722517b48..0000000000000000000000000000000000000000
--- a/db/seeds_v1/07_make_event.js
+++ /dev/null
@@ -1,38 +0,0 @@
-
-exports.seed = async function(knex, Promise) {
-    // Deletes ALL existing entries
-    await knex('events').del();
-    return await knex('events').insert([
-        {
-            title : "Fête de la lune",
-            content : "La fête de la lune, c'est bientôt dans le grand hall !",
-            start_time : knex.fn.now(),
-            end_time : knex.fn.now(),
-            authors : ["x-chine"],
-            is_announcement : false
-        },{
-            title: "Perm BR du mardi soir",
-            content: "La perm' BR c'est maintenant!",
-            location: "Amphi Sauvy",
-            start_time: knex.fn.now(),
-            end_time: knex.fn.now(),
-            authors : ["br"],
-            is_announcement : true
-        },{
-            title: "Formation Git",
-            content: "Aujourd'hui, on va parler du système de contrôle de versions Git, qui est particulièrement utile pour travailler à plusieurs sur des projets informatiques: PSC, code de PI ou de projet de MAP, site binet, quoi que ce soit!",
-            start_time: knex.fn.now(),
-            end_time: knex.fn.now(),
-            location: "Amphi Painlevé",
-            authors: ["br"],
-            is_announcement: false
-        },{
-            title: "Formation Web",
-            content: "Envie d'apprendre à faire un site Web en Django ? Alors viens en amphi Sauvy ce jeudi à 20h !",
-            authors: ['br'],
-            start_time: knex.fn.now(),
-            end_time: knex.fn.now(),
-            is_announcement: false
-        }
-    ]);
-};
diff --git a/notes/CONTRIBUTING.md b/notes/CONTRIBUTING.md
index 553fc8d85cacae6f931871b079e8a6cdb893edbb..f2234dd9d41b7de31a4448e94aae957b56460b13 100644
--- a/notes/CONTRIBUTING.md
+++ b/notes/CONTRIBUTING.md
@@ -1,12 +1,26 @@
-Documentation haut-niveau, décrivant le projet du point de vue développeur de façon globale, sans rentrer dans le détail du code. 
+Ceci est la documentation haut-niveau de sigma, décrivant le projet du point de vue développeur de façon globale, sans trop rentrer dans le détail du code. 
 
-Il y a aussi une documentation plus précise, générée par JSDoc à partir des commentaires dans le code-même. Pour la générer, exécuter `npm run doc`. Elle sera alors [disponible dans ./doc](./doc/index.html). 
+## Pourquoi Sigma ?
 
-## Description et actualité des branches
+### Deux constats
+
+Frankiz est obsolète et plus maintenable. Le jour où Frankiz tombe, il emportera le BR, et peut-être tout le platâl, avec lui. Il est plus que temps de développer un outil nouveau, documenté, clair, moderne et qu'il sera beaucoup plus facile de faire évoluer. En outre, la centralisation des pouvoirs des admins et l'interface vieillie font qu'il s'agit d'un service largement sous-utilisé.
+
+L'organisation actuelle des associations à l'école n'est également pas satisfaisante ; tout passe par Facebook, qui trie des données dans le dos de la plupart des utilisateurs, fait remonter les messages aléatoirement et complexifie beaucoup la constitution d'un emploi du temps compréhensible pour tous les acteurs. Ne jamais oublier la maxime du grand maître : « Facebook est centré sur l’individu, Sigma est centré sur le groupe. » – Quentin Gendre, X2015. 
+
+En revanche, le LDAP généré par Frankiz tous les quarts d'heure est indispensable au fonctionnement de nombreux sites binets. En conséquence il n'est pas envisageable sans passer beaucoup de temps à modifier tous ces sites de laisser tomber le LDAP Frankiz.
+
+Ainsi, l'idée est de conserver le LDAP Frankiz mais pas sa BDD, inutilisable car non documentée, et utiliser exclusivement le LDAP Frankiz pour la gestion des utilisateurs.
 
-#### Migrations Knex
+### L'idée
 
-Pour `./db/migrations`, il faut utiliser migrations_v3 (la dernière) (c'est logique). Ca s'appelle `migrations_v3` et pas `migrations` parce que je ne voulais pas supprimer les deux autres versions sans confirmer auprès des autres devs que c'était ok. -- kadabra
+Il s'agit de reprendre un nouveau Frankiz plus moderne et clairement documenté, mais pas seulement. Plusieurs fonctionnalités intéressantes sont envisageables :
+- gestion des inscriptions (notamment avec nombre de places limité),
+- inscription par trigramme,
+- minimodules ou des greffons à étudier
+- intégration des événements d'autres écoles
+
+## Description et actualité des branches
 
 ### _stable_
 
@@ -83,12 +97,17 @@ Les dossiers à la racine du projet :
     - `resolvers/` : (@akka vodol tu peux expliquer ici ?)
   - [`ldap`](./src/ldap) : gestion des requêtes au LDAP. Fournit une couche d'abstraction permettant aux resolvers GraphQL de ne pas se soucier des spécifités et de la complexité syntaxique des requêtes LDAP
 
-## Base de données
+La structure générale du projet peut être résumé comme suit :
+
+![struct_projet](../assets/struct.png "Structure du projet")
+
+## Bases de données
+
 Sigma s'appuie sur deux bases de données (toutes deux hébergées par le BR) :
 - Le LDAP frankiz, qui contient identifiants, mots de passe, et toutes les informations sur les utilisateurs et groupes spécifiques X.
-  - On y accède par des requêtes LDAP, d'où la nécessité de ldap.js (une dépendance npm faisant office de traducteur javascript/LDAP).
+  - Plus de détail dans {@tutorial memo_ldap}
 - La BDD propre à Sigma, en [PostgreSQL](https://www.postgresql.fr/), contient les groupes et leurs niveaux de visibilité mais peu d'information sur les utilisateurs (seulement son école).
-  - Les requêtes à cette BDD sont gérées par [Knex.js](http://knexjs.org), qui permet de construire facilement des requêtes PostgreSQL.
+  - Les requêtes à cette BDD sont gérées par [Knex.js](http://knexjs.org), qui permet de construire facilement des requêtes PostgreSQL (voir {@tutorial memo_postgresql} et {@tutorial memo_knexjs}).
 
 Cette structure peut sembler lourde et redondante mais s'explique par plusieurs raisons :
 - Volonté de pouvoir intégrer d'autres écoles simplement
@@ -100,12 +119,12 @@ Cette structure peut sembler lourde et redondante mais s'explique par plusieurs
   - Le LDAP contient des informations plus sensibles (c'est là que toutes les données sur les utilisateurs sont stockées)
 
 ### Utiliser la BDD sigma avec *Knex.js*
-cf. {@tutorial memo_knexjs}.
+cf. {@tutorial memo_knexjs} pour plus de détails sur la techno.
 
 Le knexfile.js et le knex_router.js sont dans `./db`. La localisation des dossiers [seeds](./db/seeds) et [migrations](./db/migrations), est spécifiée dans le knexfile.js, en l'occurrence également dans `./db`.
 
 ### Interagir directement avec la BDD sigma en *PostgreSQL*
-cf. {@tutorial memo_postgresql}.
+cf. {@tutorial memo_postgresql} pour plus de détails sur la techno.
 
 Pour accéder à la "vraie" BDD, sur roued (le serveur qui héberge sigma), il faut
 
@@ -115,15 +134,21 @@ Pour accéder à la "vraie" BDD, sur roued (le serveur qui héberge sigma), il f
 - faire les requêtes en SQL (version PostgreSQL) par l'interface ainsi `psql`
 
 ### Fonctions LDAP
-On peut facilement explorer le LDAP si on est sur le réseau de l'X, avec [JXplorer](http://jxplorer.org/) en entrant `frankiz` dans nouvelle connexion et en allant dans `net`.
+cf. {@tutorial memo_ldap} pour plus de détails sur la techno.
 
-### Ne pas se tromper de LDAP...
+L'idée est de fournir une API minimaliste pour le LDAP de façon à faciliter l'intégration de nouvelles écoles qui privilégierait un autre mode d'authentification - et ce qui permet aussi de leur laisser le contrôle sur leurs propres données.
+
+#### Ne pas se tromper de LDAP...
 Il y a deux LDAP à l'X : le LDAP de la DSI et le LDAP de Frankiz (du BR). 
 
 - Le premier, utilisé pour l'authentification sur les services de l'Ecole (mail polytechnique.edu, le Moodle, Synapses...) ne concerne pas du tout sigma.
 - C'est le second qu'on utilise, et "le LDAP" dans le contexte de sigma désignera, sauf indication contraire, le LDAP frankiz.
 
-## Authentification
+Une documentation vieillissante est disponible sur le [`wikix`](https://wikibr.binets.fr/Admin:LDAP) pour en savoir plus sur ce sujet.
+
+## Gestion des utilisateurs
+
+### Authentification
 
 On utilise [passportjs](https://www.npmjs.com/package/passport) pour l'authentification. La [stratégie "ldapauth"](https://www.npmjs.com/package/passport-ldapauth) de passport permet de s'authentifier contre le LDAP frankiz. 
 
@@ -131,6 +156,20 @@ Lorsqu'une authentification est réussie, on crée une session et on l'associe 
 
 La gestion des sessions et de la distribution de cookies est gérée par passport, et est décrite dans `app.ts`.
 
+![auth](../assets/auth.png "Processus d'authentification proposé")
+
+### Vérification des droits
+
+Il semble intéressant de proposer pour Sigma une structure plus souple que Frankiz, avec plusieurs niveaux dans un groupe :
+- Admin, qui gère le groupe
+- Speaker, qui parle au nom du groupe
+- Member, qui est notifié et qui apparait comme membre
+- Follower, qui est aussi notifié parfois
+
+L'idée est aussi d'explorer ce qu'on peut faire pour opérer une cascade de privilèges et éviter les super-admins de Frankiz. Dans cette logique, on peut définir un graphe évolutif qui définit les interactions entre groupes et établit des relations de visibilités, d'appartenance et d'administrations. Cela permettrait de définir de façon plus intelligente les droits d'un utilisateur de façon presque graphique, voir :
+
+![auth](../assets/graphDroits.png "Graphe de droits")
+
 ## Panneau d'administration ("adminview")
 
 D'habitude, toutes les requêtes arrivent en HTTP POST : les requêtes GraphQL, et les requêtes de connexion (à /login).
@@ -163,7 +202,7 @@ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/awai
 
 ## Outils de développement
 
-Le détail des outils les plus technique est dans {@tutorial memos}.
+Le détail des outils les plus techniques est dans {@tutorial memos}.
 
 ### ESLint
 
@@ -198,6 +237,10 @@ npm run start
 ```
 dans une autre pour avoir un environnement de développement agréable.
 
+### VM
+
+Le BR dispose de plusieurs Virtual Machines (VM) pour faire tourner les outils en développement. Pour l'instant, Sigma est sur roued (129.104.201.10).
+
 ## Contact
 
 Le BR 2016, plus particulièrement Wilson Jallet, Guillaume Wang, Quentin Chevalier et Anatole Romon
diff --git a/notes/memo_jsdoc.md b/notes/memo_jsdoc.md
index 20abef6fe924ccd6336fbec264e3f0a3f98e0351..547eadb3011566674f921674e1e9946a0033aab0 100644
--- a/notes/memo_jsdoc.md
+++ b/notes/memo_jsdoc.md
@@ -4,6 +4,14 @@ La doc de JSDoc, paradoxalement un peu aride : [`Use JSDoc`](http://usejsdoc.org
 
 ## Les bases
 
+### Générer la documentation
+
+Pour lancer jsdoc la commande est : `jsdoc --configure jsdoc_config.json`, ou plus simplement : `npm run doc` pour un [`package.json`](..\package.json) à jour.
+
+Nous avons fait le choix de ne pas mettre la documentation de sigma sur le git car les nombreux fichiers html alourdissaient inutilement le répertoire. Tout nouveau développeur du projet est donc invité à lanncer JSDoc pour régénérer la doc en local !
+
+### Ecrire la documentation
+
 JSDoc fonctionne sur la base de token de la forme @truc dans des commentaires avec seulement 2 *. C'est en lisant ces tokens qu'il génère sa documentation. JSDoc comprend le javascript, mais ne génère pas automatiquement les tags à partir du code. Ex :
 
 ```
@@ -13,17 +21,13 @@ JSDoc fonctionne sur la base de token de la forme @truc dans des commentaires av
  */
 function renv(a:number) { return a; }
 ```
-Là on lui donne uyne description d'une fonction et une documentation de son argument, mais pas le type de a, qu'il n'infère pas seul. Ca peut mener à des différences entre le vrai type et le type documenté, surtout quand le code évolue vite, mais ça peut aussi permettre de configurer complètement la doc à la fonction près, ce qui est pas mal non plus.
+Là on lui donne une description d'une fonction et une documentation de son argument, mais pas le type de a, qu'il n'infère pas seul. Ca peut mener à des différences entre le vrai type et le type documenté, surtout quand le code évolue vite, mais ça peut aussi permettre de configurer complètement la doc à la fonction près, ce qui est pas mal non plus.
 
-JSDoc est configuré via le fichier [`jsdoc_config.json`](..\jsdoc_config.json) à la racine du projet. Ce fichier précise à JSDoc quels fichiers traiter, où ranger ses résultats, quels extensions utiliser, etc...
-
-Pour lancer jsdoc la commande est : `jsdoc --configure jsdoc_config.json`
+## Les détails
 
-Ou plus simplement : `npm run doc` pour un [`package.json`](..\package.json) à jour.
+### Fichier de configuration
 
-Nous avons fait le choix de ne pas mettre la documentation de sigma sur le git car les nombreux fichiers html alourdissaient inutilement le répertoire. Tout nouveau développeur du projet est donc invité à lanncer JSDoc pour régénérer la doc en local !
-
-## Les détails
+JSDoc est configuré via le fichier [`jsdoc_config.json`](..\jsdoc_config.json) à la racine du projet. Ce fichier précise à JSDoc quels fichiers traiter, où ranger ses résultats, quels extensions utiliser, quels fichiers ignorer, etc...
 
 ### JSDoc et VSCode
 
diff --git a/notes/memo_knexjs.md b/notes/memo_knexjs.md
index ce2f105c05f91951fa929ed80d08527f8051f27e..d15ec00acf6ad5658382b9eb1c9f3c8a700d0d26 100644
--- a/notes/memo_knexjs.md
+++ b/notes/memo_knexjs.md
@@ -1,7 +1,3 @@
-```info
-Note : ce mémo a été rédigé à l'origine pour le CONTRIBUTING.md de shitpost-backend, donc fait parfois référence à des fichiers de ce projet. C'est indiqué à chaque fois lorsque c'est le cas.
-```
-
 > [Knex.js](https://knexjs.org/) is a "batteries included" SQL query builder for Postgres, MSSQL, MySQL, MariaDB, SQLite3, Oracle, and Amazon Redshift designed to be flexible, portable, and fun to use.
 
 J'utilise Knex.js avec PostgreSQL (comme dans sigma).
diff --git a/notes/memo_ldap.json b/notes/memo_ldap.json
new file mode 100644
index 0000000000000000000000000000000000000000..e36839dfd17d86106cfb15eee97e1c1eb52c7e9e
--- /dev/null
+++ b/notes/memo_ldap.json
@@ -0,0 +1,4 @@
+{
+    "title": "Memo LDAP",
+    "children": []
+}
\ No newline at end of file
diff --git a/notes/memo_ldap.md b/notes/memo_ldap.md
new file mode 100644
index 0000000000000000000000000000000000000000..a91b3ae7eec309fa9c3d4d31e621435f3df7d0ba
--- /dev/null
+++ b/notes/memo_ldap.md
@@ -0,0 +1,13 @@
+## Qu'est ce qu'un LDAP ?
+
+LDAP signifie Lightweight Directory Access Protocol ; c'est donc un protocole, comme http, et pas une structure de données à proprement parler. Comme http, il fonctionne par chaîne de caractères appelés URI. La structure d'un LDAP est cependant forcément celle d'un arbre, avec une racine à la fin de l'URI et le noeud recherché à la fin. Par exemple "uid=louis.vaneau,ou=eleves,dc=frankiz,dc=net", qui permet d'accéder à la feuille associée à Louis Vaneau dans le LDAP de frankiz.
+
+Il s'agit d'une structure particulièrement rigide mais efficace en lecture. Chaque noeud contient un certain nombre de champs qui ne sont pas nécessairement tous rempli, et qui n'ont pas forcément une seule variable par champ.
+
+## Sur le LDAP Frankiz
+
+Une documentation vieillissante est disponible sur le [`wikix`](https://wikibr.binets.fr/Admin:LDAP).
+
+## Un wrapper sympathique
+
+On accède sur un LDAP¨par des requêtes LDAP, d'où l'intérêt d'une bibliothèque comme [`ldap.js`](http://ldapjs.org/) qui fait office de traducteur javascript/LDAP, un peu comme knex et SQL. On s'intéressera particulièrement à la partie [`client`](http://ldapjs.org/client.html) qui est celle qui permet d'agir sur le LDAP.
\ No newline at end of file
diff --git a/notes/memos.json b/notes/memos.json
index 0777b45ef011da5725eb9c572ae9045725064321..f3f6c53dc26df0dba9ce0e4aba2fafd2a5403eb2 100644
--- a/notes/memos.json
+++ b/notes/memos.json
@@ -3,6 +3,7 @@
     "children": [
         "memo_knexjs",
         "memo_postgresql",
-        "memo_jsdoc"
+        "memo_jsdoc",
+        "memo_ldap"
     ]
 }
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 287d1de097fc798bae729c21d4a8f2db4ffdfa62..9d91e80e21ccf75f15b93ecc5481635b6b762357 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7,7 +7,7 @@
     "@apollographql/apollo-tools": {
       "version": "0.2.9",
       "resolved": "https://registry.npmjs.org/@apollographql/apollo-tools/-/apollo-tools-0.2.9.tgz",
-      "integrity": "sha512-AEIQwPkS0QLbkpb6WyRhV4aOMxuErasp47ABv5niDKOasQH8mrD8JSGKJAHuQxVe4kB8DE9sLRoc5qeQ0KFCHA==",
+      "integrity": "sha1-HiCZnRFyjvR/j4EvK+BCa13eGlE=",
       "requires": {
         "apollo-env": "0.2.5"
       }
@@ -15,12 +15,12 @@
     "@apollographql/graphql-playground-html": {
       "version": "1.6.6",
       "resolved": "https://registry.npmjs.org/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.6.tgz",
-      "integrity": "sha512-lqK94b+caNtmKFs5oUVXlSpN3sm5IXZ+KfhMxOtr0LR2SqErzkoJilitjDvJ1WbjHlxLI7WtCjRmOLdOGJqtMQ=="
+      "integrity": "sha1-AiIJ4oorVH3N4VshnwxQ9HqlvrM="
     },
     "@babel/cli": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.2.0.tgz",
-      "integrity": "sha512-FLteTkEoony0DX8NbnT51CmwmLBzINdlXmiJCSqCLmqWCDA/xk8EITPWqwDnVLbuK0bsZONt/grqHnQzQ15j0Q==",
+      "integrity": "sha1-UF7Y01Ha7mqIkY2gLARsGMjFok8=",
       "dev": true,
       "requires": {
         "chokidar": "^2.0.3",
@@ -47,7 +47,7 @@
     "@babel/core": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.2.0.tgz",
-      "integrity": "sha512-7pvAdC4B+iKjFFp9Ztj0QgBndJ++qaMeonT185wAqUnhipw8idm9Rv1UMyBuKtYjfl6ORNkgEgcsYLfHX/GpLw==",
+      "integrity": "sha1-pN04FJAZmOkzQPAIbphn/voWOto=",
       "dev": true,
       "requires": {
         "@babel/code-frame": "^7.0.0",
@@ -221,7 +221,7 @@
     "@babel/helper-annotate-as-pure": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz",
-      "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==",
+      "integrity": "sha1-Mj053QtQ4Qx8Bsp9djjmhk2MXDI=",
       "dev": true,
       "requires": {
         "@babel/types": "^7.0.0"
@@ -243,7 +243,7 @@
     "@babel/helper-builder-binary-assignment-operator-visitor": {
       "version": "7.1.0",
       "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz",
-      "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==",
+      "integrity": "sha1-a2lijf5Ah3mODE7Zjj1Kay+9L18=",
       "dev": true,
       "requires": {
         "@babel/helper-explode-assignable-expression": "^7.1.0",
@@ -266,7 +266,7 @@
     "@babel/helper-call-delegate": {
       "version": "7.1.0",
       "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz",
-      "integrity": "sha512-YEtYZrw3GUK6emQHKthltKNZwszBcHK58Ygcis+gVUrF4/FmTVr5CCqQNSfmvg2y+YDEANyYoaLz/SHsnusCwQ==",
+      "integrity": "sha1-apV/EF83dV6GRTQ9MDiiLhRJzEo=",
       "dev": true,
       "requires": {
         "@babel/helper-hoist-variables": "^7.0.0",
@@ -401,7 +401,7 @@
     "@babel/helper-create-class-features-plugin": {
       "version": "7.2.1",
       "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.2.1.tgz",
-      "integrity": "sha512-EsEP7XLFmcJHjcuFYBxYD1FkP0irC8C9fsrt2tX/jrAi/eTnFI6DOPgVFb+WREeg1GboF+Ib+nCHbGBodyAXSg==",
+      "integrity": "sha1-9ugCcpFmnvZEMyINyDJ1MSM/EWE=",
       "dev": true,
       "requires": {
         "@babel/helper-function-name": "^7.1.0",
@@ -484,7 +484,7 @@
     "@babel/helper-define-map": {
       "version": "7.1.0",
       "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz",
-      "integrity": "sha512-yPPcW8dc3gZLN+U1mhYV91QU3n5uTbx7DUdf8NnPbjS0RMwBuHi9Xt2MUgppmNz7CJxTBWsGczTiEp1CSOTPRg==",
+      "integrity": "sha1-O3TK7DKbPIDBFikIh8DdmuRowgw=",
       "dev": true,
       "requires": {
         "@babel/helper-function-name": "^7.1.0",
@@ -565,7 +565,7 @@
     "@babel/helper-explode-assignable-expression": {
       "version": "7.1.0",
       "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz",
-      "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==",
+      "integrity": "sha1-U3+hP28WdN90WwwA7I/k6ZaByPY=",
       "dev": true,
       "requires": {
         "@babel/traverse": "^7.1.0",
@@ -719,7 +719,7 @@
     "@babel/helper-hoist-variables": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz",
-      "integrity": "sha512-Ggv5sldXUeSKsuzLkddtyhyHe2YantsxWKNi7A+7LeD12ExRDWTRk29JCXpaHPAbMaIPZSil7n+lq78WY2VY7w==",
+      "integrity": "sha1-Rq3ExedYZFrnpF3rkrqwkYwju4g=",
       "dev": true,
       "requires": {
         "@babel/types": "^7.0.0"
@@ -741,7 +741,7 @@
     "@babel/helper-member-expression-to-functions": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz",
-      "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==",
+      "integrity": "sha1-jNFLCg33/wDwCefXpDaUX0fHoW8=",
       "dev": true,
       "requires": {
         "@babel/types": "^7.0.0"
@@ -763,7 +763,7 @@
     "@babel/helper-module-imports": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz",
-      "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==",
+      "integrity": "sha1-lggbcRHkhtpNLNlxrRpP4hbMLj0=",
       "dev": true,
       "requires": {
         "@babel/types": "^7.0.0"
@@ -785,7 +785,7 @@
     "@babel/helper-module-transforms": {
       "version": "7.1.0",
       "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.1.0.tgz",
-      "integrity": "sha512-0JZRd2yhawo79Rcm4w0LwSMILFmFXjugG3yqf+P/UsKsRS1mJCmMwwlHDlMg7Avr9LrvSpp4ZSULO9r8jpCzcw==",
+      "integrity": "sha1-Rw1PlnbZ+tULMkzczl+6u8PaV4c=",
       "dev": true,
       "requires": {
         "@babel/helper-module-imports": "^7.0.0",
@@ -858,7 +858,7 @@
     "@babel/helper-optimise-call-expression": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz",
-      "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==",
+      "integrity": "sha1-opIMVwKwc8Fd5REGIAqoytIEl9U=",
       "dev": true,
       "requires": {
         "@babel/types": "^7.0.0"
@@ -880,13 +880,13 @@
     "@babel/helper-plugin-utils": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz",
-      "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==",
+      "integrity": "sha1-u7P77phmHFaQNCN8wDlnupm08lA=",
       "dev": true
     },
     "@babel/helper-regex": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.0.0.tgz",
-      "integrity": "sha512-TR0/N0NDCcUIUEbqV6dCO+LptmmSQFQ7q70lfcEB4URsjD0E1HzicrwUH+ap6BAQ2jhCX9Q4UqZy4wilujWlkg==",
+      "integrity": "sha1-LBcYkjtX+bvmRwX/5WQKxk2b2yc=",
       "dev": true,
       "requires": {
         "lodash": "^4.17.10"
@@ -895,7 +895,7 @@
     "@babel/helper-remap-async-to-generator": {
       "version": "7.1.0",
       "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz",
-      "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==",
+      "integrity": "sha1-Nh2AghtvONp1vT8HheziCojF/n8=",
       "dev": true,
       "requires": {
         "@babel/helper-annotate-as-pure": "^7.0.0",
@@ -1032,7 +1032,7 @@
     "@babel/helper-replace-supers": {
       "version": "7.1.0",
       "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.1.0.tgz",
-      "integrity": "sha512-BvcDWYZRWVuDeXTYZWxekQNO5D4kO55aArwZOTFXw6rlLQA8ZaDicJR1sO47h+HrnCiDFiww0fSPV0d713KBGQ==",
+      "integrity": "sha1-X8Md5SLsDvCJncmz589qXdZV82I=",
       "dev": true,
       "requires": {
         "@babel/helper-member-expression-to-functions": "^7.0.0",
@@ -1168,7 +1168,7 @@
     "@babel/helper-simple-access": {
       "version": "7.1.0",
       "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz",
-      "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==",
+      "integrity": "sha1-Ze65VMjCRb6qToWdphiPOdceWFw=",
       "dev": true,
       "requires": {
         "@babel/template": "^7.1.0",
@@ -1237,7 +1237,7 @@
     "@babel/helper-wrap-function": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz",
-      "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==",
+      "integrity": "sha1-xOABJEV2nigVtVKW6tQ6lYVJ9vo=",
       "dev": true,
       "requires": {
         "@babel/helper-function-name": "^7.1.0",
@@ -1373,7 +1373,7 @@
     "@babel/helpers": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.2.0.tgz",
-      "integrity": "sha512-Fr07N+ea0dMcMN8nFpuK6dUIT7/ivt9yKQdEEnjVS83tG2pHwPi03gYmk/tyuwONnZ+sY+GFFPlWGgCtW1hF9A==",
+      "integrity": "sha1-gzXzFA8xRCcNxjxHMqT4sKULeiE=",
       "dev": true,
       "requires": {
         "@babel/template": "^7.1.2",
@@ -1406,7 +1406,7 @@
         "@babel/helper-function-name": {
           "version": "7.1.0",
           "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz",
-          "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
+          "integrity": "sha1-oM6wFoX3M1XUNgwSR/WCv6/I/1M=",
           "dev": true,
           "requires": {
             "@babel/helper-get-function-arity": "^7.0.0",
@@ -1417,7 +1417,7 @@
         "@babel/helper-get-function-arity": {
           "version": "7.0.0",
           "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz",
-          "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==",
+          "integrity": "sha1-g1ctQyDipGVyY3NBE8QoaLZOScM=",
           "dev": true,
           "requires": {
             "@babel/types": "^7.0.0"
@@ -1426,7 +1426,7 @@
         "@babel/helper-split-export-declaration": {
           "version": "7.0.0",
           "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz",
-          "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==",
+          "integrity": "sha1-Oq4oXAMRwqsJXZl7jJqUytVH2BM=",
           "dev": true,
           "requires": {
             "@babel/types": "^7.0.0"
@@ -1500,7 +1500,7 @@
         "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==",
+          "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=",
           "dev": true
         }
       }
@@ -1519,13 +1519,13 @@
     "@babel/parser": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.2.0.tgz",
-      "integrity": "sha512-M74+GvK4hn1eejD9lZ7967qAwvqTZayQa3g10ag4s9uewgR7TKjeaT0YMyoq+gVfKYABiWZ4MQD701/t5e1Jhg==",
+      "integrity": "sha1-AtAdvDMLbL82t2rJPFB1LGkCcGU=",
       "dev": true
     },
     "@babel/plugin-proposal-async-generator-functions": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz",
-      "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==",
+      "integrity": "sha1-somzBmadzkrSCwJSiJoVdoydQX4=",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0",
@@ -1536,7 +1536,7 @@
     "@babel/plugin-proposal-class-properties": {
       "version": "7.2.1",
       "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.2.1.tgz",
-      "integrity": "sha512-/4FKFChkQ2Jgb8lBDsvFX496YTi7UWTetVgS8oJUpX1e/DlaoeEK57At27ug8Hu2zI2g8bzkJ+8k9qrHZRPGPA==",
+      "integrity": "sha1-xzSlPgoexA/lwi7lBp0m2jsYfQU=",
       "dev": true,
       "requires": {
         "@babel/helper-create-class-features-plugin": "^7.2.1",
@@ -1546,7 +1546,7 @@
     "@babel/plugin-proposal-json-strings": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz",
-      "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==",
+      "integrity": "sha1-Vo7MRGxhSK5rJn8CVREwiR4p8xc=",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0",
@@ -1556,7 +1556,7 @@
     "@babel/plugin-proposal-object-rest-spread": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.2.0.tgz",
-      "integrity": "sha512-1L5mWLSvR76XYUQJXkd/EEQgjq8HHRP6lQuZTTg0VA4tTGPpGemmCdAfQIz1rzEuWAm+ecP8PyyEm30jC1eQCg==",
+      "integrity": "sha1-iPX+w+etAZAUyX9+48mS8K2/f7g=",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0",
@@ -1566,7 +1566,7 @@
     "@babel/plugin-proposal-optional-catch-binding": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz",
-      "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==",
+      "integrity": "sha1-E12B7baKCB5V5W7EhUHs6AZcOPU=",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0",
@@ -1576,7 +1576,7 @@
     "@babel/plugin-proposal-unicode-property-regex": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz",
-      "integrity": "sha512-LvRVYb7kikuOtIoUeWTkOxQEV1kYvL5B6U3iWEGCzPNRus1MzJweFqORTj+0jkxozkTSYNJozPOddxmqdqsRpw==",
+      "integrity": "sha1-q+coH+Rsld3BQ6ZeU1hkd5IDlSA=",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0",
@@ -1587,7 +1587,7 @@
     "@babel/plugin-syntax-async-generators": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz",
-      "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==",
+      "integrity": "sha1-aeHw2zTG9aDPfiszI78VmnbIy38=",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0"
@@ -1596,7 +1596,7 @@
     "@babel/plugin-syntax-json-strings": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz",
-      "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==",
+      "integrity": "sha1-cr0T9v/h0lk4Ep0qGGsR/WKVFHA=",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0"
@@ -1605,7 +1605,7 @@
     "@babel/plugin-syntax-object-rest-spread": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz",
-      "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==",
+      "integrity": "sha1-O3o+czUQxX6CC5FCpleayLDfrS4=",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0"
@@ -1614,7 +1614,7 @@
     "@babel/plugin-syntax-optional-catch-binding": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz",
-      "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==",
+      "integrity": "sha1-qUAT1u2okI3+akd+f57ahWVuz1w=",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0"
@@ -1632,7 +1632,7 @@
     "@babel/plugin-transform-arrow-functions": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz",
-      "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==",
+      "integrity": "sha1-mur75Nb/xlY7+Pg3IJFijwB3lVA=",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0"
@@ -1641,7 +1641,7 @@
     "@babel/plugin-transform-async-to-generator": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.2.0.tgz",
-      "integrity": "sha512-CEHzg4g5UraReozI9D4fblBYABs7IM6UerAVG7EJVrTLC5keh00aEuLUT+O40+mJCEzaXkYfTCUKIyeDfMOFFQ==",
+      "integrity": "sha1-aLikOGY+iFGeZbd2+JOPNEWxov8=",
       "dev": true,
       "requires": {
         "@babel/helper-module-imports": "^7.0.0",
@@ -1652,7 +1652,7 @@
     "@babel/plugin-transform-block-scoped-functions": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz",
-      "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==",
+      "integrity": "sha1-XTzBHo1d3XUqpkyRSNDbbLef0ZA=",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0"
@@ -1661,7 +1661,7 @@
     "@babel/plugin-transform-block-scoping": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.2.0.tgz",
-      "integrity": "sha512-vDTgf19ZEV6mx35yiPJe4fS02mPQUUcBNwWQSZFXSzTSbsJFQvHt7DqyS3LK8oOWALFOsJ+8bbqBgkirZteD5Q==",
+      "integrity": "sha1-8XxJ2R7tvN9d1QWX0W9fL3cBMtQ=",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0",
@@ -1671,7 +1671,7 @@
     "@babel/plugin-transform-classes": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.0.tgz",
-      "integrity": "sha512-aPCEkrhJYebDXcGTAP+cdUENkH7zqOlgbKwLbghjjHpJRJBWM/FSlCjMoPGA8oUdiMfOrk3+8EFPLLb5r7zj2w==",
+      "integrity": "sha1-N0+IdgddfSH+pVrrXFNWElkWP5Y=",
       "dev": true,
       "requires": {
         "@babel/helper-annotate-as-pure": "^7.0.0",
@@ -1766,7 +1766,7 @@
     "@babel/plugin-transform-computed-properties": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz",
-      "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==",
+      "integrity": "sha1-g6ffamWIZbHI9kHVEMbzryICFto=",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0"
@@ -1775,7 +1775,7 @@
     "@babel/plugin-transform-destructuring": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.2.0.tgz",
-      "integrity": "sha512-coVO2Ayv7g0qdDbrNiadE4bU7lvCd9H539m2gMknyVjjMdwF/iCOM7R+E8PkntoqLkltO0rk+3axhpp/0v68VQ==",
+      "integrity": "sha1-51JptLeInsOjMs0NDIz/j+0NxvM=",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0"
@@ -1784,7 +1784,7 @@
     "@babel/plugin-transform-dotall-regex": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz",
-      "integrity": "sha512-sKxnyHfizweTgKZf7XsXu/CNupKhzijptfTM+bozonIuyVrLWVUvYjE2bhuSBML8VQeMxq4Mm63Q9qvcvUcciQ==",
+      "integrity": "sha1-8Kq7k9EgqKxh6SXqC6RAgS2+Dkk=",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0",
@@ -1795,7 +1795,7 @@
     "@babel/plugin-transform-duplicate-keys": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz",
-      "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==",
+      "integrity": "sha1-2VLEkw8xKk2//xjwspFOYMNVMLM=",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0"
@@ -1804,7 +1804,7 @@
     "@babel/plugin-transform-exponentiation-operator": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz",
-      "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==",
+      "integrity": "sha1-pjhoKJ5bQAf3BU1GSRr1FDV2YAg=",
       "dev": true,
       "requires": {
         "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0",
@@ -1814,7 +1814,7 @@
     "@babel/plugin-transform-for-of": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz",
-      "integrity": "sha512-Kz7Mt0SsV2tQk6jG5bBv5phVbkd0gd27SgYD4hH1aLMJRchM0dzHaXvrWhVZ+WxAlDoAKZ7Uy3jVTW2mKXQ1WQ==",
+      "integrity": "sha1-q3RovvqA92S7A9PLXu+MyZjhytk=",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0"
@@ -1823,7 +1823,7 @@
     "@babel/plugin-transform-function-name": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz",
-      "integrity": "sha512-kWgksow9lHdvBC2Z4mxTsvc7YdY7w/V6B2vy9cTIPtLEE9NhwoWivaxdNM/S37elu5bqlLP/qOY906LukO9lkQ==",
+      "integrity": "sha1-95MDYoKf+ZoxdMOfCvzAJO9Zcxo=",
       "dev": true,
       "requires": {
         "@babel/helper-function-name": "^7.1.0",
@@ -1903,7 +1903,7 @@
     "@babel/plugin-transform-literals": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz",
-      "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==",
+      "integrity": "sha1-aQNT6B+SZ9rU/Yz9d+r6hqulPqE=",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0"
@@ -1912,7 +1912,7 @@
     "@babel/plugin-transform-modules-amd": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz",
-      "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==",
+      "integrity": "sha1-gqm85FuVRB9heiQBHcidEtp/TuY=",
       "dev": true,
       "requires": {
         "@babel/helper-module-transforms": "^7.1.0",
@@ -1922,7 +1922,7 @@
     "@babel/plugin-transform-modules-commonjs": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz",
-      "integrity": "sha512-V6y0uaUQrQPXUrmj+hgnks8va2L0zcZymeU7TtWEgdRLNkceafKXEduv7QzgQAE4lT+suwooG9dC7LFhdRAbVQ==",
+      "integrity": "sha1-xPGTP1mR1RRenPrR39hI6hcn9AQ=",
       "dev": true,
       "requires": {
         "@babel/helper-module-transforms": "^7.1.0",
@@ -1933,7 +1933,7 @@
     "@babel/plugin-transform-modules-systemjs": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.2.0.tgz",
-      "integrity": "sha512-aYJwpAhoK9a+1+O625WIjvMY11wkB/ok0WClVwmeo3mCjcNRjt+/8gHWrB5i+00mUju0gWsBkQnPpdvQ7PImmQ==",
+      "integrity": "sha1-kSv+nl/5gpJMgdCTfJLSSZS7kGg=",
       "dev": true,
       "requires": {
         "@babel/helper-hoist-variables": "^7.0.0",
@@ -1943,7 +1943,7 @@
     "@babel/plugin-transform-modules-umd": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz",
-      "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==",
+      "integrity": "sha1-dnjOdRafCHe46yI1U4wHQmjdAa4=",
       "dev": true,
       "requires": {
         "@babel/helper-module-transforms": "^7.1.0",
@@ -1953,7 +1953,7 @@
     "@babel/plugin-transform-new-target": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz",
-      "integrity": "sha512-yin069FYjah+LbqfGeTfzIBODex/e++Yfa0rH0fpfam9uTbuEeEOx5GLGr210ggOV77mVRNoeqSYqeuaqSzVSw==",
+      "integrity": "sha1-ro+9iVF/p4ktIOZWTmQeh3DDqko=",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0"
@@ -1962,7 +1962,7 @@
     "@babel/plugin-transform-object-super": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz",
-      "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==",
+      "integrity": "sha1-s11MEPVrq11lAEfa0PHY6IFLZZg=",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0",
@@ -1972,7 +1972,7 @@
     "@babel/plugin-transform-parameters": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.2.0.tgz",
-      "integrity": "sha512-kB9+hhUidIgUoBQ0MsxMewhzr8i60nMa2KgeJKQWYrqQpqcBYtnpR+JgkadZVZoaEZ/eKu9mclFaVwhRpLNSzA==",
+      "integrity": "sha1-DVrRXcgF4uqGbfTdZoK/520UCMI=",
       "dev": true,
       "requires": {
         "@babel/helper-call-delegate": "^7.1.0",
@@ -2005,7 +2005,7 @@
     "@babel/plugin-transform-regenerator": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz",
-      "integrity": "sha512-sj2qzsEx8KDVv1QuJc/dEfilkg3RRPvPYx/VnKLtItVQRWt1Wqf5eVCOLZm29CiGFfYYsA3VPjfizTCV0S0Dlw==",
+      "integrity": "sha1-W0Foa07UC++HTX7WqEvdhJwT4ME=",
       "dev": true,
       "requires": {
         "regenerator-transform": "^0.13.3"
@@ -2014,7 +2014,7 @@
     "@babel/plugin-transform-shorthand-properties": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz",
-      "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==",
+      "integrity": "sha1-YzOu4vjW7n4oYVRXKYk0o7RhmPA=",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0"
@@ -2023,7 +2023,7 @@
     "@babel/plugin-transform-spread": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.0.tgz",
-      "integrity": "sha512-7TtPIdwjS/i5ZBlNiQePQCovDh9pAhVbp/nGVRBZuUdBiVRThyyLend3OHobc0G+RLCPPAN70+z/MAMhsgJd/A==",
+      "integrity": "sha1-DHbBKjtYJhMAeO6OyEp6jkr9ecQ=",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0"
@@ -2032,7 +2032,7 @@
     "@babel/plugin-transform-sticky-regex": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz",
-      "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==",
+      "integrity": "sha1-oeRUtZlVYKnB4NU338FQYf0mh+E=",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0",
@@ -2042,7 +2042,7 @@
     "@babel/plugin-transform-template-literals": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.2.0.tgz",
-      "integrity": "sha512-FkPix00J9A/XWXv4VoKJBMeSkyY9x/TqIh76wzcdfl57RJJcf8CehQ08uwfhCDNtRQYtHQKBTwKZDEyjE13Lwg==",
+      "integrity": "sha1-2H7QG46qx6kkc/YIyXwIneK6Hls=",
       "dev": true,
       "requires": {
         "@babel/helper-annotate-as-pure": "^7.0.0",
@@ -2052,7 +2052,7 @@
     "@babel/plugin-transform-typeof-symbol": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz",
-      "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==",
+      "integrity": "sha1-EX0rzsL79ktLWdH5gZiUaC0p8rI=",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0"
@@ -2071,7 +2071,7 @@
     "@babel/plugin-transform-unicode-regex": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.2.0.tgz",
-      "integrity": "sha512-m48Y0lMhrbXEJnVUaYly29jRXbQ3ksxPrS1Tg8t+MHqzXhtBYAvI51euOBaoAlZLPHsieY9XPVMf80a5x0cPcA==",
+      "integrity": "sha1-TrjbFvly+Ku1BiwWG4sRVUat4Is=",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0",
@@ -2082,7 +2082,7 @@
     "@babel/preset-env": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.2.0.tgz",
-      "integrity": "sha512-haGR38j5vOGVeBatrQPr3l0xHbs14505DcM57cbJy48kgMFvvHHoYEhHuRV+7vi559yyAUAVbTWzbK/B/pzJng==",
+      "integrity": "sha1-pQMOfkMGr1opXdXXx43FRkrz/uI=",
       "dev": true,
       "requires": {
         "@babel/helper-module-imports": "^7.0.0",
@@ -2131,7 +2131,7 @@
     "@babel/preset-typescript": {
       "version": "7.1.0",
       "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.1.0.tgz",
-      "integrity": "sha512-LYveByuF9AOM8WrsNne5+N79k1YxjNB6gmpCQsnuSBAcV8QUeB+ZUxQzL7Rz7HksPbahymKkq2qBR+o36ggFZA==",
+      "integrity": "sha1-Sa1uIIT/C/tfH3+ztedsQ01ELH8=",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0",
@@ -2277,12 +2277,12 @@
     "@protobufjs/base64": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
-      "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
+      "integrity": "sha1-TIVzDlm5ofHzSQR9vyQpYDS7JzU="
     },
     "@protobufjs/codegen": {
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
-      "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
+      "integrity": "sha1-fvN/DQEPsCitGtWXIuUG2SYoFcs="
     },
     "@protobufjs/eventemitter": {
       "version": "1.1.0",
@@ -2362,7 +2362,7 @@
     "@types/connect": {
       "version": "3.4.32",
       "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz",
-      "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==",
+      "integrity": "sha1-qg6WFrlDXMrQK8UrW0VP/Cxwuig=",
       "requires": {
         "@types/node": "*"
       }
@@ -2388,7 +2388,7 @@
     "@types/cors": {
       "version": "2.8.4",
       "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.4.tgz",
-      "integrity": "sha512-ipZjBVsm2tF/n8qFGOuGBkUij9X9ZswVi9G3bx/6dz7POpVa6gVHcj1wsX/LVEn9MMF41fxK/PnZPPoTD1UFPw==",
+      "integrity": "sha1-UJkadZopwLiUknUQCMavenyCZ7A=",
       "requires": {
         "@types/express": "*"
       }
@@ -2396,7 +2396,7 @@
     "@types/events": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz",
-      "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA=="
+      "integrity": "sha1-gaZzHOTfQ2GeXIyUU4Oz5iqJ6oY="
     },
     "@types/express": {
       "version": "4.11.1",
@@ -2444,7 +2444,7 @@
     },
     "@types/ldapjs": {
       "version": "1.0.3",
-      "resolved": "http://registry.npmjs.org/@types/ldapjs/-/ldapjs-1.0.3.tgz",
+      "resolved": "https://registry.npmjs.org/@types/ldapjs/-/ldapjs-1.0.3.tgz",
       "integrity": "sha512-FSj24s1WsFEfOy8taIKp2DokSZfFkjWYZb88AS5eDj3WTocZ+4DnHjhzrXEs048WQ5mfOLJXMOAnc0kSnHh5Lw==",
       "requires": {
         "@types/events": "*",
@@ -2454,12 +2454,12 @@
     "@types/long": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz",
-      "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q=="
+      "integrity": "sha1-cZVR0jUtMBrIuB23Mqy2vcKNve8="
     },
     "@types/mime": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.0.tgz",
-      "integrity": "sha512-A2TAGbTFdBw9azHbpVd+/FkdW2T6msN1uct1O9bH3vTerEHKZhTXJUQXy+hNq1B0RagfU8U+KBdqiZpxjhOUQA=="
+      "integrity": "sha1-WnMG42fFObn2VDSZ3o3VGfrDeos="
     },
     "@types/node": {
       "version": "10.12.14",
@@ -2469,7 +2469,7 @@
     "@types/passport": {
       "version": "0.4.7",
       "resolved": "https://registry.npmjs.org/@types/passport/-/passport-0.4.7.tgz",
-      "integrity": "sha512-EePlxNYx5tf3n0yjdPXX0/zDOv0UCwjMyQo4UkWGlhHteNDItAj7TfDdLttSThVMKQz3uCW7lsGzMuml0f8g9Q==",
+      "integrity": "sha1-K38pv2Hfkc93Ajs3d+lAthPUtNg=",
       "requires": {
         "@types/express": "*"
       }
@@ -2508,7 +2508,7 @@
     "@types/ws": {
       "version": "6.0.1",
       "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.1.tgz",
-      "integrity": "sha512-EzH8k1gyZ4xih/MaZTXwT2xOkPiIMSrhQ9b8wrlX88L0T02eYsddatQlwVFlEPyEqV0ChpdpNnE51QPH6NVT4Q==",
+      "integrity": "sha1-yno/N1aqEvYqCmIUXtFMbbJdWig=",
       "requires": {
         "@types/events": "*",
         "@types/node": "*"
@@ -2540,7 +2540,7 @@
     "@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==",
+      "integrity": "sha1-MSLUjcxslFbtmC3r4WyPNxAd85s=",
       "dev": true
     },
     "@webassemblyjs/helper-code-frame": {
@@ -2573,7 +2573,7 @@
     "@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==",
+      "integrity": "sha1-nJrEHs+fvP/8lvbSZ14t4zgR5oo=",
       "dev": true,
       "requires": {
         "@webassemblyjs/ast": "1.7.11",
@@ -2585,7 +2585,7 @@
     "@webassemblyjs/ieee754": {
       "version": "1.7.11",
       "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz",
-      "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==",
+      "integrity": "sha1-yVg562N1ejGICq7HtlEtQZGsZAs=",
       "dev": true,
       "requires": {
         "@xtuc/ieee754": "^1.2.0"
@@ -2594,7 +2594,7 @@
     "@webassemblyjs/leb128": {
       "version": "1.7.11",
       "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz",
-      "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==",
+      "integrity": "sha1-1yZ6HunEWU/T9+NymIGOxlaH22M=",
       "dev": true,
       "requires": {
         "@xtuc/long": "4.2.1"
@@ -2603,13 +2603,13 @@
     "@webassemblyjs/utf8": {
       "version": "1.7.11",
       "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz",
-      "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==",
+      "integrity": "sha1-Btchjqn9yUpnk6qSIIFg2z0m7oI=",
       "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==",
+      "integrity": "sha1-jHTKR01PlR0B266b1wgU7iKoIAU=",
       "dev": true,
       "requires": {
         "@webassemblyjs/ast": "1.7.11",
@@ -2625,7 +2625,7 @@
     "@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==",
+      "integrity": "sha1-m7upQvIjdWhqb7dZr816ycRdoag=",
       "dev": true,
       "requires": {
         "@webassemblyjs/ast": "1.7.11",
@@ -2638,7 +2638,7 @@
     "@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==",
+      "integrity": "sha1-szHo5874+OLwB9QsOjagWAp9bKc=",
       "dev": true,
       "requires": {
         "@webassemblyjs/ast": "1.7.11",
@@ -2650,7 +2650,7 @@
     "@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==",
+      "integrity": "sha1-bj0g+mo1GfawhO+Tka1YIR77Cho=",
       "dev": true,
       "requires": {
         "@webassemblyjs/ast": "1.7.11",
@@ -2689,7 +2689,7 @@
     "@xtuc/ieee754": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
-      "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+      "integrity": "sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A=",
       "dev": true
     },
     "@xtuc/long": {
@@ -2701,7 +2701,7 @@
     "abbrev": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
-      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+      "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=",
       "dev": true
     },
     "accepts": {
@@ -2722,7 +2722,7 @@
     "acorn-dynamic-import": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz",
-      "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==",
+      "integrity": "sha1-kBzu5Mf6rvfgetKkfokGddpQong=",
       "dev": true,
       "requires": {
         "acorn": "^5.0.0"
@@ -2773,7 +2773,7 @@
     "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==",
+      "integrity": "sha1-81mGrOuRr63sQQL72FAUlQzvpk0=",
       "dev": true
     },
     "ajv-keywords": {
@@ -2842,7 +2842,7 @@
     "anymatch": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
-      "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+      "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=",
       "dev": true,
       "requires": {
         "micromatch": "^3.1.4",
@@ -3032,7 +3032,7 @@
     "apollo-datasource": {
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/apollo-datasource/-/apollo-datasource-0.2.1.tgz",
-      "integrity": "sha512-r185+JTa5KuF1INeTAk7AEP76zwMN6c8Ph1lmpzJMNwBUEzTGnLClrccCskCBx4SxfnkdKbuQdwn9JwCJUWrdg==",
+      "integrity": "sha1-Ps707+ZPegSkOGLzICfTisCeFCw=",
       "requires": {
         "apollo-server-caching": "0.2.1",
         "apollo-server-env": "2.2.0"
@@ -3071,7 +3071,7 @@
     "apollo-env": {
       "version": "0.2.5",
       "resolved": "https://registry.npmjs.org/apollo-env/-/apollo-env-0.2.5.tgz",
-      "integrity": "sha512-Gc7TEbwCl7jJVutnn8TWfzNSkrrqyoo0DP92BQJFU9pZbJhpidoXf2Sw1YwOJl82rRKH3ujM3C8vdZLOgpFcFA==",
+      "integrity": "sha1-Fix4W8zSrqaTUKdgD6tLcUf8naU=",
       "requires": {
         "core-js": "^3.0.0-beta.3",
         "node-fetch": "^2.2.0"
@@ -3109,7 +3109,7 @@
     "apollo-server-caching": {
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/apollo-server-caching/-/apollo-server-caching-0.2.1.tgz",
-      "integrity": "sha512-+U9F3X297LL8Gqy6ypfDNEv/DfV/tDht9Dr2z3AMaEkNW1bwO6rmdDL01zYxDuVDVq6Z3qSiNCSO2pXE2F0zmA==",
+      "integrity": "sha1-fmf4yMrIKeYis5Tw+4JXnKu+rf0=",
       "requires": {
         "lru-cache": "^5.0.0"
       },
@@ -3117,7 +3117,7 @@
         "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==",
+          "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=",
           "requires": {
             "yallist": "^3.0.2"
           }
@@ -3159,7 +3159,7 @@
         "apollo-link": {
           "version": "1.2.4",
           "resolved": "https://registry.npmjs.org/apollo-link/-/apollo-link-1.2.4.tgz",
-          "integrity": "sha512-B1z+9H2nTyWEhMXRFSnoZ1vSuAYP+V/EdUJvRx9uZ8yuIBZMm6reyVtr1n0BWlKeSFyPieKJy2RLzmITAAQAMQ==",
+          "integrity": "sha1-q00h0uQo24SOiLXo9K3HF7GclUs=",
           "requires": {
             "apollo-utilities": "^1.0.0",
             "zen-observable-ts": "^0.8.11"
@@ -3180,7 +3180,7 @@
         "zen-observable-ts": {
           "version": "0.8.11",
           "resolved": "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.11.tgz",
-          "integrity": "sha512-8bs7rgGV4kz5iTb9isudkuQjtWwPnQ8lXq6/T76vrepYZVMsDEv6BXaEA+DHdJSK3KVLduagi9jSpSAJ5NgKHw==",
+          "integrity": "sha1-1UonzRfcS0u2vQCOXAlq9/ywaKk=",
           "requires": {
             "zen-observable": "^0.8.0"
           }
@@ -3190,7 +3190,7 @@
     "apollo-server-env": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/apollo-server-env/-/apollo-server-env-2.2.0.tgz",
-      "integrity": "sha512-wjJiI5nQWPBpNmpiLP389Ezpstp71szS6DHAeTgYLb/ulCw3CTuuA+0/E1bsThVWiQaDeHZE0sE3yI8q2zrYiA==",
+      "integrity": "sha1-Xuxdv0ZYH2Y/1mkrLgXH6K5tYDQ=",
       "requires": {
         "node-fetch": "^2.1.2",
         "util.promisify": "^1.0.0"
@@ -3206,7 +3206,7 @@
     "apollo-server-errors": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/apollo-server-errors/-/apollo-server-errors-2.2.0.tgz",
-      "integrity": "sha512-gV9EZG2tovFtT1cLuCTavnJu2DaKxnXPRNGSTo+SDI6IAk6cdzyW0Gje5N2+3LybI0Wq5KAbW6VLei31S4MWmg=="
+      "integrity": "sha1-W0UqHW/3ZEDrDxJ1EdxYAxqPPLU="
     },
     "apollo-server-express": {
       "version": "2.3.1",
@@ -3230,7 +3230,7 @@
         "@types/body-parser": {
           "version": "1.17.0",
           "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.0.tgz",
-          "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==",
+          "integrity": "sha1-n1ydm9BLtUvjLV65/A2Ml05s9Yw=",
           "requires": {
             "@types/connect": "*",
             "@types/node": "*"
@@ -3239,7 +3239,7 @@
         "@types/express": {
           "version": "4.16.0",
           "resolved": "https://registry.npmjs.org/@types/express/-/express-4.16.0.tgz",
-          "integrity": "sha512-TtPEYumsmSTtTetAPXlJVf3kEqb6wZK0bZojpJQrnD/djV4q1oB6QQ8aKvKqwNPACoe02GNiy5zDzcYivR5Z2w==",
+          "integrity": "sha1-bYvELMqm81zymit8MzPLR7WjKhk=",
           "requires": {
             "@types/body-parser": "*",
             "@types/express-serve-static-core": "*",
@@ -3258,7 +3258,7 @@
         "graphql-tools": {
           "version": "4.0.3",
           "resolved": "https://registry.npmjs.org/graphql-tools/-/graphql-tools-4.0.3.tgz",
-          "integrity": "sha512-NNZM0WSnVLX1zIMUxu7SjzLZ4prCp15N5L2T2ro02OVyydZ0fuCnZYRnx/yK9xjGWbZA0Q58yEO//Bv/psJWrg==",
+          "integrity": "sha1-I7XLUsUZISsbLkYwo2FGQ5atJks=",
           "requires": {
             "apollo-link": "^1.2.3",
             "apollo-utilities": "^1.0.1",
@@ -3312,7 +3312,7 @@
     "aproba": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
-      "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
+      "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo="
     },
     "argparse": {
       "version": "1.0.10",
@@ -3408,7 +3408,7 @@
     "asn1.js": {
       "version": "4.10.1",
       "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
-      "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+      "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=",
       "dev": true,
       "requires": {
         "bn.js": "^4.0.0",
@@ -3450,7 +3450,7 @@
     "assertion-error": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
-      "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
+      "integrity": "sha1-5gtrDo8wG9l+U3UhW9pAbIURjAs=",
       "dev": true
     },
     "assign-symbols": {
@@ -3472,12 +3472,12 @@
     "async-limiter": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
-      "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
+      "integrity": "sha1-ePrtjD0HSrgfIrTphdeehzj3IPg="
     },
     "async-retry": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.2.3.tgz",
-      "integrity": "sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==",
+      "integrity": "sha1-plIfM4NY0yKxoAEreQMMb0EdHOA=",
       "requires": {
         "retry": "0.12.0"
       }
@@ -3657,7 +3657,7 @@
     "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==",
+      "integrity": "sha1-yrHmEY8FEJXli1KBrqjBzSK/wOM=",
       "dev": true
     },
     "basic-auth": {
@@ -3688,7 +3688,7 @@
     "binary-extensions": {
       "version": "1.12.0",
       "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz",
-      "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==",
+      "integrity": "sha1-wteA9T1Fu6gxeokC1M7q86Y4WxQ=",
       "dev": true
     },
     "bluebird": {
@@ -3699,7 +3699,7 @@
     "bn.js": {
       "version": "4.11.8",
       "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
-      "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+      "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=",
       "dev": true
     },
     "body-parser": {
@@ -3772,7 +3772,7 @@
     "boxen": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
-      "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==",
+      "integrity": "sha1-VcbDmouljZxhrSLNh3Uy3rZlogs=",
       "dev": true,
       "requires": {
         "ansi-align": "^2.0.0",
@@ -3834,7 +3834,7 @@
     "browser-stdout": {
       "version": "1.3.1",
       "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
-      "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
+      "integrity": "sha1-uqVZ7hTO1zRSIputcyZGfGH6vWA=",
       "dev": true
     },
     "browserify-aes": {
@@ -3854,7 +3854,7 @@
     "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==",
+      "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=",
       "dev": true,
       "requires": {
         "browserify-aes": "^1.0.4",
@@ -3865,7 +3865,7 @@
     "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==",
+      "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=",
       "dev": true,
       "requires": {
         "cipher-base": "^1.0.1",
@@ -3910,7 +3910,7 @@
     "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==",
+      "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=",
       "dev": true,
       "requires": {
         "pako": "~1.0.5"
@@ -3919,7 +3919,7 @@
     "browserslist": {
       "version": "4.3.5",
       "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.3.5.tgz",
-      "integrity": "sha512-z9ZhGc3d9e/sJ9dIx5NFXkKoaiQTnrvrMsN3R1fGb1tkWWNSz12UewJn9TNxGo1l7J23h0MRaPmk7jfeTZYs1w==",
+      "integrity": "sha1-GpF2eKzAe1VgZ0jqGt+YRuqJIPc=",
       "dev": true,
       "requires": {
         "caniuse-lite": "^1.0.30000912",
@@ -3952,7 +3952,7 @@
     "buffer-writer": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz",
-      "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw=="
+      "integrity": "sha1-zn64Gjj3gp2wnIc/L7t5LAyY7AQ="
     },
     "buffer-xor": {
       "version": "1.0.3",
@@ -4101,13 +4101,13 @@
     "caniuse-lite": {
       "version": "1.0.30000918",
       "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000918.tgz",
-      "integrity": "sha512-CAZ9QXGViBvhHnmIHhsTPSWFBujDaelKnUj7wwImbyQRxmXynYqKGi3UaZTSz9MoVh+1EVxOS/DFIkrJYgR3aw==",
+      "integrity": "sha1-Yoj3naPFyLReUC9HrY8+uR8Teak=",
       "dev": true
     },
     "capture-stack-trace": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz",
-      "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==",
+      "integrity": "sha1-psC74fOPOqC5Ijjstv9Cw0TUE10=",
       "dev": true
     },
     "catharsis": {
@@ -4131,7 +4131,7 @@
     "chai": {
       "version": "4.2.0",
       "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz",
-      "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==",
+      "integrity": "sha1-dgqnLPION5XoSxKHfODoNzeqKeU=",
       "dev": true,
       "requires": {
         "assertion-error": "^1.1.0",
@@ -4207,7 +4207,7 @@
     "chokidar": {
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
-      "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==",
+      "integrity": "sha1-NW/04rDo5D4yLRijckYLvPOszSY=",
       "dev": true,
       "requires": {
         "anymatch": "^2.0.0",
@@ -4233,7 +4233,7 @@
     "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==",
+      "integrity": "sha1-Rakb0sIMlBHwljtarrmhuV4JzEg=",
       "dev": true,
       "requires": {
         "tslib": "^1.9.0"
@@ -4242,13 +4242,13 @@
     "ci-info": {
       "version": "1.6.0",
       "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
-      "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==",
+      "integrity": "sha1-LKINu5zrMtRSSmgzAzE/AwSx5Jc=",
       "dev": true
     },
     "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==",
+      "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=",
       "dev": true,
       "requires": {
         "inherits": "^2.0.1",
@@ -4389,7 +4389,7 @@
     "colors": {
       "version": "1.3.3",
       "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz",
-      "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg=="
+      "integrity": "sha1-OeAF1Uav4B4B+cTKj6UPaGoBIF0="
     },
     "command-line-args": {
       "version": "5.0.2",
@@ -4509,7 +4509,7 @@
     "configstore": {
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz",
-      "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==",
+      "integrity": "sha1-xvJd767vJt8S3TNBSwAf6BpUP48=",
       "dev": true,
       "requires": {
         "dot-prop": "^4.1.0",
@@ -4620,7 +4620,7 @@
     "copy-concurrently": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
-      "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+      "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=",
       "requires": {
         "aproba": "^1.1.1",
         "fs-write-stream-atomic": "^1.0.8",
@@ -4638,7 +4638,7 @@
     "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==",
+      "integrity": "sha1-5/QN2KaEd9QF3Rt6hUquMksVi64=",
       "requires": {
         "cacache": "^10.0.4",
         "find-cache-dir": "^1.0.0",
@@ -4663,7 +4663,7 @@
     "cors": {
       "version": "2.8.5",
       "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
-      "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
+      "integrity": "sha1-6sEdpRWS3Ya58G9uesKTs9+HXSk=",
       "requires": {
         "object-assign": "^4",
         "vary": "^1"
@@ -4677,7 +4677,7 @@
     "create-ecdh": {
       "version": "4.0.3",
       "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
-      "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
+      "integrity": "sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8=",
       "dev": true,
       "requires": {
         "bn.js": "^4.1.0",
@@ -4752,7 +4752,7 @@
     "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==",
+      "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=",
       "dev": true,
       "requires": {
         "browserify-cipher": "^1.0.0",
@@ -4832,7 +4832,7 @@
     "deep-eql": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
-      "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
+      "integrity": "sha1-38lARACtHI/gI+faHfHBR8S0RN8=",
       "dev": true,
       "requires": {
         "type-detect": "^4.0.0"
@@ -4858,7 +4858,7 @@
     "define-properties": {
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
-      "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+      "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=",
       "requires": {
         "object-keys": "^1.0.12"
       }
@@ -5007,7 +5007,7 @@
     "diff": {
       "version": "3.5.0",
       "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
-      "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
+      "integrity": "sha1-gAwN0eCov7yVg1wgKtIg/jF+WhI=",
       "dev": true
     },
     "diffie-hellman": {
@@ -5024,7 +5024,7 @@
     "dir-glob": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz",
-      "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==",
+      "integrity": "sha1-CyBdK2rvmCOMooZZioIE0p0KADQ=",
       "requires": {
         "arrify": "^1.0.1",
         "path-type": "^3.0.0"
@@ -5072,7 +5072,7 @@
     "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==",
+      "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=",
       "dev": true
     },
     "dot-case": {
@@ -5087,7 +5087,7 @@
     "dot-prop": {
       "version": "4.2.0",
       "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
-      "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
+      "integrity": "sha1-HxngwuGqDjJ5fEl5nyg3rGr2nFc=",
       "dev": true,
       "requires": {
         "is-obj": "^1.0.0"
@@ -5096,7 +5096,7 @@
     "dotenv": {
       "version": "6.2.0",
       "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz",
-      "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w=="
+      "integrity": "sha1-lBwEEFNdlCyL7PKNPzV9vZ1HYGQ="
     },
     "dtrace-provider": {
       "version": "0.8.6",
@@ -5140,13 +5140,13 @@
     "electron-to-chromium": {
       "version": "1.3.90",
       "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.90.tgz",
-      "integrity": "sha512-IjJZKRhFbWSOX1w0sdIXgp4CMRguu6UYcTckyFF/Gjtemsu/25eZ+RXwFlV+UWcIueHyQA1UnRJxocTpH5NdGA==",
+      "integrity": "sha1-tMUbgwO+/xjyt0gXQCv0iY4JVYo=",
       "dev": true
     },
     "elliptic": {
       "version": "6.4.1",
       "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
-      "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==",
+      "integrity": "sha1-wtC3d2kRuGcixjLDwGxg8vgZk5o=",
       "dev": true,
       "requires": {
         "bn.js": "^4.4.0",
@@ -5179,7 +5179,7 @@
     "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==",
+      "integrity": "sha1-7SljTRm6ukY7bOa4CjchPqtx7EM=",
       "requires": {
         "once": "^1.4.0"
       }
@@ -5221,7 +5221,7 @@
     "es-abstract": {
       "version": "1.12.0",
       "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz",
-      "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==",
+      "integrity": "sha1-nbvdJ8aFbwABQhyhh4LXhr+KYWU=",
       "requires": {
         "es-to-primitive": "^1.1.1",
         "function-bind": "^1.1.1",
@@ -5233,7 +5233,7 @@
     "es-to-primitive": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
-      "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
+      "integrity": "sha1-7fckeAM0VujdqO8J4ArZZQcH83c=",
       "requires": {
         "is-callable": "^1.1.4",
         "is-date-object": "^1.0.1",
@@ -5529,7 +5529,7 @@
     "esrecurse": {
       "version": "4.2.1",
       "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
-      "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+      "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=",
       "dev": true,
       "requires": {
         "estraverse": "^4.1.0"
@@ -5554,7 +5554,7 @@
     "eventemitter3": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz",
-      "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA=="
+      "integrity": "sha1-CQtNbNvWRe0Qv3UNS1QHlC17oWM="
     },
     "events": {
       "version": "1.1.1",
@@ -5565,7 +5565,7 @@
     "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==",
+      "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=",
       "dev": true,
       "requires": {
         "md5.js": "^1.3.4",
@@ -5675,7 +5675,7 @@
         "debug": {
           "version": "2.6.9",
           "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
           "requires": {
             "ms": "2.0.0"
           }
@@ -5868,7 +5868,7 @@
     "figgy-pudding": {
       "version": "3.5.1",
       "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz",
-      "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==",
+      "integrity": "sha1-hiRwESkBxyeg5JWoB0S9W6odZ5A=",
       "dev": true
     },
     "figures": {
@@ -5949,7 +5949,7 @@
     "finalhandler": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
-      "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
+      "integrity": "sha1-7r9O2EAHnIP0JJA4ydcDAIMBsQU=",
       "requires": {
         "debug": "2.6.9",
         "encodeurl": "~1.0.2",
@@ -6051,7 +6051,7 @@
     "flush-write-stream": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz",
-      "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==",
+      "integrity": "sha1-xdWG7zivYJdlC0m8QbVfq7GfNb0=",
       "requires": {
         "inherits": "^2.0.1",
         "readable-stream": "^2.0.4"
@@ -6686,7 +6686,7 @@
     "fuse.js": {
       "version": "3.3.0",
       "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-3.3.0.tgz",
-      "integrity": "sha512-ESBRkGLWMuVkapqYCcNO1uqMg5qbCKkgb+VS6wsy17Rix0/cMS9kSOZoYkjH8Ko//pgJ/EEGu0GTjk2mjX2LGQ=="
+      "integrity": "sha1-Hk/hcqYGhyMPtUpcskfrluLn6IU="
     },
     "get-caller-file": {
       "version": "1.0.3",
@@ -6868,7 +6868,7 @@
     "graphql-request": {
       "version": "1.8.2",
       "resolved": "https://registry.npmjs.org/graphql-request/-/graphql-request-1.8.2.tgz",
-      "integrity": "sha512-dDX2M+VMsxXFCmUX0Vo0TopIZIX4ggzOtiCsThgtrKR4niiaagsGTDIHj3fsOMFETpa064vzovI+4YV4QnMbcg==",
+      "integrity": "sha1-OY0QrhXFhWdnQb3j/AHVypSPj74=",
       "dev": true,
       "requires": {
         "cross-fetch": "2.2.2"
@@ -6877,7 +6877,7 @@
     "graphql-subscriptions": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/graphql-subscriptions/-/graphql-subscriptions-1.0.0.tgz",
-      "integrity": "sha512-+ytmryoHF1LVf58NKEaNPRUzYyXplm120ntxfPcgOBC7TnK7Tv/4VRHeh4FAR9iL+O1bqhZs4nkibxQ+OA5cDQ==",
+      "integrity": "sha1-R1JnaUs71GWvZHfbq0Jjo/YnArg=",
       "requires": {
         "iterall": "^1.2.1"
       }
@@ -6885,7 +6885,7 @@
     "graphql-tag": {
       "version": "2.10.0",
       "resolved": "https://registry.npmjs.org/graphql-tag/-/graphql-tag-2.10.0.tgz",
-      "integrity": "sha512-9FD6cw976TLLf9WYIUPCaaTpniawIjHWZSwIRZSjrfufJamcXbVVYfN2TWvJYbw0Xf2JjYbl1/f2+wDnBVw3/w=="
+      "integrity": "sha1-h9oCS+hj41dVGyuHAOSW7i1DU64="
     },
     "graphql-tools": {
       "version": "3.1.1",
@@ -6951,7 +6951,7 @@
     "growl": {
       "version": "1.10.5",
       "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
-      "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
+      "integrity": "sha1-8nNdwig2dPpnR4sQGBBZNVw2nl4=",
       "dev": true
     },
     "handlebars": {
@@ -7063,7 +7063,7 @@
     "hash.js": {
       "version": "1.1.7",
       "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
-      "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+      "integrity": "sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I=",
       "dev": true,
       "requires": {
         "inherits": "^2.0.3",
@@ -7146,7 +7146,7 @@
     "ieee754": {
       "version": "1.1.12",
       "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz",
-      "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==",
+      "integrity": "sha1-UL8k5bnIu5ivSWTJQc2wkY2ntgs=",
       "dev": true
     },
     "iferr": {
@@ -7391,12 +7391,12 @@
     "is-callable": {
       "version": "1.1.4",
       "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
-      "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA=="
+      "integrity": "sha1-HhrfIZ4e62hNaR+dagX/DTCiTXU="
     },
     "is-ci": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
-      "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==",
+      "integrity": "sha1-43ecjuF/zPQoSI9uKBGH8uYyhBw=",
       "dev": true,
       "requires": {
         "ci-info": "^1.5.0"
@@ -7641,7 +7641,7 @@
     "is-symbol": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
-      "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
+      "integrity": "sha1-oFX2rlcZLK7jKeeoYBGLSXqVDzg=",
       "requires": {
         "has-symbols": "^1.0.0"
       }
@@ -7711,7 +7711,7 @@
     "js-levenshtein": {
       "version": "1.1.4",
       "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.4.tgz",
-      "integrity": "sha512-PxfGzSs0ztShKrUYPIn5r0MtyAhYcCwmndozzpz8YObbPnD1jFxzlBGbRnX2mIu6Z13xN6+PTu05TQFnZFlzow==",
+      "integrity": "sha1-Olbjy/WJygCB6yLNm6CxKQoW0m4=",
       "dev": true
     },
     "js-stringify": {
@@ -7791,7 +7791,7 @@
     "jsdoc-babel": {
       "version": "0.5.0",
       "resolved": "https://registry.npmjs.org/jsdoc-babel/-/jsdoc-babel-0.5.0.tgz",
-      "integrity": "sha512-PYfTbc3LNTeR8TpZs2M94NLDWqARq0r9gx3SvuziJfmJS7/AeMKvtj0xjzOX0R/4MOVA7/FqQQK7d6U0iEoztQ==",
+      "integrity": "sha1-che4ggRp/mANzP3uiVZIxqDdSi4=",
       "dev": true,
       "requires": {
         "jsdoc-regex": "^1.0.1",
@@ -7842,7 +7842,7 @@
     "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==",
+      "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=",
       "dev": true
     },
     "json-schema-traverse": {
@@ -7877,7 +7877,7 @@
     "jsonwebtoken": {
       "version": "8.4.0",
       "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.4.0.tgz",
-      "integrity": "sha512-coyXjRTCy0pw5WYBpMvWOMN+Kjaik2MwTUIq9cna/W7NpO9E+iYbumZONAz3hcr+tXFJECoQVrtmIoC3Oz0gvg==",
+      "integrity": "sha1-h1f3tMt0QNhtXi877O+nBTbI5Go=",
       "requires": {
         "jws": "^3.1.5",
         "lodash.includes": "^4.3.0",
@@ -8054,7 +8054,7 @@
     "jwa": {
       "version": "1.1.6",
       "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.1.6.tgz",
-      "integrity": "sha512-tBO/cf++BUsJkYql/kBbJroKOgHWEigTKBAjjBEmrMGYd1QMBC74Hr4Wo2zCZw6ZrVhlJPvoMrkcOnlWR/DJfw==",
+      "integrity": "sha1-hyQOdsmAjb3hh4PPImTvSSnuUOY=",
       "requires": {
         "buffer-equal-constant-time": "1.0.1",
         "ecdsa-sig-formatter": "1.0.10",
@@ -8064,7 +8064,7 @@
     "jws": {
       "version": "3.1.5",
       "resolved": "https://registry.npmjs.org/jws/-/jws-3.1.5.tgz",
-      "integrity": "sha512-GsCSexFADNQUr8T5HPJvayTjvPIfoyJPtLQBwn5a4WZQchcrPMPMAWcC1AzJVRDKyD6ZPROPAxgv6rfHViO4uQ==",
+      "integrity": "sha1-gNEtBbKT0ehB58uLTmnlYa3Pg08=",
       "requires": {
         "jwa": "^1.1.5",
         "safe-buffer": "^5.0.1"
@@ -8184,7 +8184,7 @@
     "ldapauth-fork": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/ldapauth-fork/-/ldapauth-fork-4.1.0.tgz",
-      "integrity": "sha512-OFz3aJDqYGpgo96gVBKhaIFIO/mc9OFpn9IdINHo22eUmF0leU836HgksIQQ3Ga0Mz48xwEhSZ/rJlWOzaUXJQ==",
+      "integrity": "sha1-WdpiYC417bOuPYoU7LE+ipOJk9I=",
       "requires": {
         "@types/ldapjs": "^1.0.0",
         "@types/node": "^10.12.12",
@@ -8330,7 +8330,7 @@
     "loader-runner": {
       "version": "2.3.1",
       "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.1.tgz",
-      "integrity": "sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw==",
+      "integrity": "sha1-Am8S/nwxFZkolqwCugIrqSlxuXk=",
       "dev": true
     },
     "loader-utils": {
@@ -8435,7 +8435,7 @@
     "long": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
-      "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
+      "integrity": "sha1-mntxz7fTYaGU6lVSQckvdGjVvyg="
     },
     "longest": {
       "version": "1.0.1",
@@ -8468,7 +8468,7 @@
     "lowercase-keys": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
-      "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
+      "integrity": "sha1-b54wtHCE2XGnyCD/FabFFnt0wm8=",
       "dev": true
     },
     "lru-cache": {
@@ -8483,7 +8483,7 @@
     "make-dir": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
-      "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+      "integrity": "sha1-ecEDO4BRW9bSTsmTPoYMp17ifww=",
       "requires": {
         "pify": "^3.0.0"
       }
@@ -8527,7 +8527,7 @@
     "md5.js": {
       "version": "1.3.5",
       "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
-      "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+      "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=",
       "dev": true,
       "requires": {
         "hash-base": "^3.0.0",
@@ -8538,7 +8538,7 @@
         "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==",
+          "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=",
           "dev": true
         }
       }
@@ -8605,7 +8605,7 @@
     "miller-rabin": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
-      "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+      "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=",
       "dev": true,
       "requires": {
         "bn.js": "^4.0.0",
@@ -8639,7 +8639,7 @@
     "minimalistic-assert": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
-      "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
+      "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=",
       "dev": true
     },
     "minimalistic-crypto-utils": {
@@ -8664,7 +8664,7 @@
     "mississippi": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz",
-      "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==",
+      "integrity": "sha1-NEKlCPr8KFAEhv7qmUCWduTuWm8=",
       "requires": {
         "concat-stream": "^1.5.0",
         "duplexify": "^3.4.2",
@@ -8714,7 +8714,7 @@
     "mocha": {
       "version": "5.2.0",
       "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz",
-      "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==",
+      "integrity": "sha1-bYrlCPWRZ/lA8rWzxKYSrlDJCuY=",
       "dev": true,
       "requires": {
         "browser-stdout": "1.3.1",
@@ -8897,7 +8897,7 @@
     "node-libs-browser": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz",
-      "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==",
+      "integrity": "sha1-X5QmPUBPbkR2fXJpAf/wVHjWAN8=",
       "dev": true,
       "requires": {
         "assert": "^1.1.1",
@@ -8928,7 +8928,7 @@
     "node-releases": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.1.tgz",
-      "integrity": "sha512-2UXrBr6gvaebo5TNF84C66qyJJ6r0kxBObgZIDX3D3/mt1ADKiHux3NJPWisq0wxvJJdkjECH+9IIKYViKj71Q==",
+      "integrity": "sha1-j/+K6hz8rR+0IF+AUUkFT79zyv0=",
       "dev": true,
       "requires": {
         "semver": "^5.3.0"
@@ -8937,7 +8937,7 @@
     "nodemon": {
       "version": "1.18.8",
       "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.18.8.tgz",
-      "integrity": "sha512-CgC/JdCf+CT7Z+K6wWaV30t8GU1DPtXpr/6PuXC1/LboXCmUQNKOaz0AEMjoWDTt2AdHOBFxgv41dyC0i79SbA==",
+      "integrity": "sha1-60wAUtyBOVvcUD88iuPLqGynFGo=",
       "dev": true,
       "requires": {
         "chokidar": "^2.0.4",
@@ -9050,7 +9050,7 @@
     "object-keys": {
       "version": "1.0.12",
       "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
-      "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag=="
+      "integrity": "sha1-CcU4VTd1dTEMymL1W7M0q/97PtI="
     },
     "object-path": {
       "version": "0.11.4",
@@ -9201,7 +9201,7 @@
     "output-file-sync": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-2.0.1.tgz",
-      "integrity": "sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ==",
+      "integrity": "sha1-9TEYKC9fVTwnmVQXkrcjpMcUMMA=",
       "dev": true,
       "requires": {
         "graceful-fs": "^4.1.11",
@@ -9280,7 +9280,7 @@
     "pako": {
       "version": "1.0.7",
       "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.7.tgz",
-      "integrity": "sha512-3HNK5tW4x8o5mO8RuHZp3Ydw9icZXx0RANAOMzlMzx7LVXhMJ4mo3MOBpzyd7r/+RUu8BmndP47LXT+vzjtWcQ==",
+      "integrity": "sha1-JHNDkCG1fxUWyC9YvnJ1rY7xuyc=",
       "dev": true
     },
     "parallel-transform": {
@@ -9371,7 +9371,7 @@
     "passport-ldapauth": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/passport-ldapauth/-/passport-ldapauth-2.1.1.tgz",
-      "integrity": "sha512-DiK9nwZthdCeZE+TRx2AzRk9mg8OeAz4+tZdXC8EPVAVmeW7YSWyK4XCJ8/B7ySWpEZtrN1OcrKtWjpLXFy0/A==",
+      "integrity": "sha1-S0R4zSg8gt6JYGmj5CfvjPopX+E=",
       "requires": {
         "@types/node": "^10.12.12",
         "@types/passport": "^0.4.7",
@@ -9462,7 +9462,7 @@
     "path-type": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
-      "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+      "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=",
       "requires": {
         "pify": "^3.0.0"
       }
@@ -9481,7 +9481,7 @@
     "pbkdf2": {
       "version": "3.0.17",
       "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
-      "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
+      "integrity": "sha1-l2wgZTBhexTrsyEUI597CTNuk6Y=",
       "dev": true,
       "requires": {
         "create-hash": "^1.1.2",
@@ -9494,7 +9494,7 @@
     "pg": {
       "version": "7.7.1",
       "resolved": "https://registry.npmjs.org/pg/-/pg-7.7.1.tgz",
-      "integrity": "sha512-p3I0mXOmUvCoVlCMFW6iYSrnguPol6q8He15NGgSIdM3sPGjFc+8JGCeKclw8ZR4ETd+Jxy2KNiaPUcocHZeMw==",
+      "integrity": "sha1-VGsZL/SEMitpaJOR+IXeO6kaMNQ=",
       "requires": {
         "buffer-writer": "2.0.0",
         "packet-reader": "0.3.1",
@@ -9525,7 +9525,7 @@
     "pg-pool": {
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-2.0.4.tgz",
-      "integrity": "sha512-Mi2AsmlFkVMpI28NreaDkz5DkfxLOG16C/HNwi091LDlOiDiQACtAroLxSd1vIS2imBqxdjjO9cQZg2CwsOPbw=="
+      "integrity": "sha1-Ba0PLZQ32JyUzMT00KRKxlrehls="
     },
     "pg-types": {
       "version": "1.12.1",
@@ -9593,7 +9593,7 @@
     "postgres-array": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-1.0.3.tgz",
-      "integrity": "sha512-5wClXrAP0+78mcsNX3/ithQ5exKvCyK5lr5NEEEeGwwM6NJdQgzIJBVxLvRW+huFpX92F2QnZ5CcokH0VhK2qQ=="
+      "integrity": "sha1-xWH8OyZrIUUfxlVThPSYbXjsgPU="
     },
     "postgres-bytea": {
       "version": "1.0.0",
@@ -9608,7 +9608,7 @@
     "postgres-interval": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.1.2.tgz",
-      "integrity": "sha512-fC3xNHeTskCxL1dC8KOtxXt7YeFmlbTYtn7ul8MkVERuTmf7pI4DrkAxcw3kh1fQ9uz4wQmd03a1mRiXUZChfQ==",
+      "integrity": "sha1-v3H/kCY18hyyQaAT/EIdgdHbFak=",
       "requires": {
         "xtend": "^4.0.0"
       }
@@ -9644,7 +9644,7 @@
     "process-nextick-args": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
-      "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
+      "integrity": "sha1-o31zL0JxtKsa0HDTVQjoKQeI/6o="
     },
     "progress": {
       "version": "2.0.0",
@@ -9677,7 +9677,7 @@
     "protobufjs": {
       "version": "6.8.8",
       "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz",
-      "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==",
+      "integrity": "sha1-yLTxKC/XqQ5vWxCe0RyEr4KQjnw=",
       "requires": {
         "@protobufjs/aspromise": "^1.1.2",
         "@protobufjs/base64": "^1.1.2",
@@ -9717,13 +9717,13 @@
     "pstree.remy": {
       "version": "1.1.4",
       "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.4.tgz",
-      "integrity": "sha512-3kSyTN/iTJMxtL87idnFgTyOp2vQ6B/49QcHUO26kh2M2qahlUivFI1zWJ9FRFPoB+KgcP820JMOuIhkBJAP3Q==",
+      "integrity": "sha1-oD1dvAa6Y5+23Uh0ZExLrZiC7CE=",
       "dev": true
     },
     "public-encrypt": {
       "version": "4.0.3",
       "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
-      "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+      "integrity": "sha1-T8ydd6B+SLp1J+fL4N4z0HATMeA=",
       "dev": true,
       "requires": {
         "bn.js": "^4.1.0",
@@ -9859,7 +9859,7 @@
     "pump": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
-      "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+      "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=",
       "requires": {
         "end-of-stream": "^1.1.0",
         "once": "^1.3.1"
@@ -9868,7 +9868,7 @@
     "pumpify": {
       "version": "1.5.1",
       "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
-      "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+      "integrity": "sha1-NlE74karJ1cLGjdKXOJ4v9dDcM4=",
       "requires": {
         "duplexify": "^3.6.0",
         "inherits": "^2.0.3",
@@ -9906,7 +9906,7 @@
     "randombytes": {
       "version": "2.0.6",
       "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz",
-      "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==",
+      "integrity": "sha1-0wLFIpSFiISKjTAMkytEwkIx2oA=",
       "dev": true,
       "requires": {
         "safe-buffer": "^5.1.0"
@@ -9915,7 +9915,7 @@
     "randomfill": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
-      "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+      "integrity": "sha1-ySGW/IarQr6YPxvzF3giSTHWFFg=",
       "dev": true,
       "requires": {
         "randombytes": "^2.0.5",
@@ -9930,7 +9930,7 @@
     "rc": {
       "version": "1.2.8",
       "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
-      "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+      "integrity": "sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0=",
       "dev": true,
       "requires": {
         "deep-extend": "^0.6.0",
@@ -9950,7 +9950,7 @@
     "react": {
       "version": "16.6.3",
       "resolved": "https://registry.npmjs.org/react/-/react-16.6.3.tgz",
-      "integrity": "sha512-zCvmH2vbEolgKxtqXL2wmGCUxUyNheYn/C+PD1YAjfxHC54+MhdruyhO7QieQrYsYeTxrn93PM2y0jRH1zEExw==",
+      "integrity": "sha1-Jdd8kZEda73SPbQecPsJTMHghxw=",
       "requires": {
         "loose-envify": "^1.1.0",
         "object-assign": "^4.1.1",
@@ -9961,7 +9961,7 @@
     "react-dom": {
       "version": "16.6.3",
       "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.6.3.tgz",
-      "integrity": "sha512-8ugJWRCWLGXy+7PmNh8WJz3g1TaTUt1XyoIcFN+x0Zbkoz+KKdUyx1AQLYJdbFXjuF41Nmjn5+j//rxvhFjgSQ==",
+      "integrity": "sha1-j6e6aIPIUhG42i0O/v/J04JczMA=",
       "requires": {
         "loose-envify": "^1.1.0",
         "object-assign": "^4.1.1",
@@ -10075,7 +10075,7 @@
     "readdirp": {
       "version": "2.2.1",
       "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
-      "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+      "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=",
       "dev": true,
       "requires": {
         "graceful-fs": "^4.1.11",
@@ -10188,13 +10188,13 @@
     "regenerate": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
-      "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
+      "integrity": "sha1-SoVuxLVuQHfFV1icroXnpMiGmhE=",
       "dev": true
     },
     "regenerate-unicode-properties": {
       "version": "7.0.0",
       "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz",
-      "integrity": "sha512-s5NGghCE4itSlUS+0WUj88G6cfMVMmH8boTPNvABf8od+2dhT9WDlWu8n01raQAJZMOK8Ch6jSexaRO7swd6aw==",
+      "integrity": "sha1-EHQFr8xKGQ7F7UUOyqAO0Mr6ekw=",
       "dev": true,
       "requires": {
         "regenerate": "^1.4.0"
@@ -10208,7 +10208,7 @@
     "regenerator-transform": {
       "version": "0.13.3",
       "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.13.3.tgz",
-      "integrity": "sha512-5ipTrZFSq5vU2YoGoww4uaRVAK4wyYC4TSICibbfEPOruUu8FFP7ErV0BjmbIOEpn3O/k9na9UEdYR/3m7N6uA==",
+      "integrity": "sha1-JkvZ/zioziSwbgY2SWsshWtXvLs=",
       "dev": true,
       "requires": {
         "private": "^0.1.6"
@@ -10232,7 +10232,7 @@
     "regexpu-core": {
       "version": "4.4.0",
       "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.4.0.tgz",
-      "integrity": "sha512-eDDWElbwwI3K0Lo6CqbQbA6FwgtCz4kYTarrri1okfkRLZAqstU+B3voZBCjg8Fl6iq0gXrJG6MvRgLthfvgOA==",
+      "integrity": "sha1-jUPg0SZog5aXIDRecMJ17grsDTI=",
       "dev": true,
       "requires": {
         "regenerate": "^1.4.0",
@@ -10246,7 +10246,7 @@
     "registry-auth-token": {
       "version": "3.3.2",
       "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
-      "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
+      "integrity": "sha1-hR/UkDjuy1hpERFa+EUmDuyYPyA=",
       "dev": true,
       "requires": {
         "rc": "^1.1.6",
@@ -10265,13 +10265,13 @@
     "regjsgen": {
       "version": "0.5.0",
       "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz",
-      "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==",
+      "integrity": "sha1-p2NNwI+JIJwgSa3aNSVxH7lyZd0=",
       "dev": true
     },
     "regjsparser": {
       "version": "0.6.0",
       "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz",
-      "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==",
+      "integrity": "sha1-8eaui32iuulsmTmbhozWyTOiupw=",
       "dev": true,
       "requires": {
         "jsesc": "~0.5.0"
@@ -10429,7 +10429,7 @@
     "ripemd160": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
-      "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+      "integrity": "sha1-ocGm9iR1FXe6XQeRTLyShQWFiQw=",
       "dev": true,
       "requires": {
         "hash-base": "^3.0.0",
@@ -10533,7 +10533,7 @@
     "send": {
       "version": "0.16.2",
       "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
-      "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
+      "integrity": "sha1-bsyh4PjBVtFBWXVZhI32RzCmu8E=",
       "requires": {
         "debug": "2.6.9",
         "depd": "~1.1.2",
@@ -10573,7 +10573,7 @@
     "serialize-javascript": {
       "version": "1.5.0",
       "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz",
-      "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ=="
+      "integrity": "sha1-GqM2FiyIqJDdrVOEuuvJOmVRYf4="
     },
     "serve-favicon": {
       "version": "2.5.0",
@@ -10597,7 +10597,7 @@
     "serve-static": {
       "version": "1.13.2",
       "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
-      "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
+      "integrity": "sha1-CV6Ecv1bRiN9tQzkhqQ/S4bGzsE=",
       "requires": {
         "encodeurl": "~1.0.2",
         "escape-html": "~1.0.3",
@@ -10905,7 +10905,7 @@
     "split": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
-      "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
+      "integrity": "sha1-YFvZvjA6pZ+zX5Ip++oN3snqB9k=",
       "requires": {
         "through": "2"
       }
@@ -10927,7 +10927,7 @@
     "ssri": {
       "version": "5.3.0",
       "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz",
-      "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==",
+      "integrity": "sha1-ujhyycbTOgcEp9cf8EXl7EiZnQY=",
       "requires": {
         "safe-buffer": "^5.1.1"
       }
@@ -10998,7 +10998,7 @@
     "stream-http": {
       "version": "2.8.3",
       "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
-      "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
+      "integrity": "sha1-stJCRpKIpaJ+xP6JM6z2I95lFPw=",
       "dev": true,
       "requires": {
         "builtin-status-codes": "^3.0.0",
@@ -11111,7 +11111,7 @@
     "subscriptions-transport-ws": {
       "version": "0.9.15",
       "resolved": "https://registry.npmjs.org/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.15.tgz",
-      "integrity": "sha512-f9eBfWdHsePQV67QIX+VRhf++dn1adyC/PZHP6XI5AfKnZ4n0FW+v5omxwdHVpd4xq2ZijaHEcmlQrhBY79ZWQ==",
+      "integrity": "sha1-aKi3ugA32MSJ+y9aEC0UlNspfQ0=",
       "requires": {
         "backo2": "^1.0.2",
         "eventemitter3": "^3.1.0",
@@ -11123,7 +11123,7 @@
         "ws": {
           "version": "5.2.2",
           "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
-          "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
+          "integrity": "sha1-3/7xSGa46NyRM1glFNG++vlumA8=",
           "requires": {
             "async-limiter": "~1.0.0"
           }
@@ -11240,7 +11240,7 @@
     "terser": {
       "version": "3.11.0",
       "resolved": "https://registry.npmjs.org/terser/-/terser-3.11.0.tgz",
-      "integrity": "sha512-5iLMdhEPIq3zFWskpmbzmKwMQixKmTYwY3Ox9pjtSklBLnHiuQ0GKJLhL1HSYtyffHM3/lDIFBnb82m9D7ewwQ==",
+      "integrity": "sha1-YHgok+H01niKzGljUfQGNtDjevA=",
       "dev": true,
       "requires": {
         "commander": "~2.17.1",
@@ -11259,7 +11259,7 @@
     "terser-webpack-plugin": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.1.0.tgz",
-      "integrity": "sha512-61lV0DSxMAZ8AyZG7/A4a3UPlrbOBo8NIQ4tJzLPAdGOQ+yoNC7l5ijEow27lBAL2humer01KLS6bGIMYQxKoA==",
+      "integrity": "sha1-z3wloe7iW/Eh9KWHu54ATj+A5Sg=",
       "dev": true,
       "requires": {
         "cacache": "^11.0.2",
@@ -11275,7 +11275,7 @@
         "cacache": {
           "version": "11.3.1",
           "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.1.tgz",
-          "integrity": "sha512-2PEw4cRRDu+iQvBTTuttQifacYjLPhET+SYO/gEFMy8uhi+jlJREDAjSF5FWSdV/Aw5h18caHA7vMTw2c+wDzA==",
+          "integrity": "sha1-0J0l9sSsp6bTBdFBrjMmE6odUV8=",
           "dev": true,
           "requires": {
             "bluebird": "^3.5.1",
@@ -11297,7 +11297,7 @@
         "find-cache-dir": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz",
-          "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==",
+          "integrity": "sha1-TB+u1Z9FGEUw+51/oSOk0EqYRy0=",
           "dev": true,
           "requires": {
             "commondir": "^1.0.1",
@@ -11308,7 +11308,7 @@
         "find-up": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
-          "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+          "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
           "dev": true,
           "requires": {
             "locate-path": "^3.0.0"
@@ -11317,7 +11317,7 @@
         "locate-path": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
-          "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+          "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=",
           "dev": true,
           "requires": {
             "p-locate": "^3.0.0",
@@ -11327,7 +11327,7 @@
         "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==",
+          "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=",
           "dev": true,
           "requires": {
             "pseudomap": "^1.0.2",
@@ -11337,7 +11337,7 @@
         "mississippi": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
-          "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
+          "integrity": "sha1-6goykfl+C16HdrNj1fChLZTGcCI=",
           "dev": true,
           "requires": {
             "concat-stream": "^1.5.0",
@@ -11355,7 +11355,7 @@
         "p-limit": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz",
-          "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==",
+          "integrity": "sha1-5iTtVO6MRgp3izyfNnBJb/ileuw=",
           "dev": true,
           "requires": {
             "p-try": "^2.0.0"
@@ -11364,7 +11364,7 @@
         "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==",
+          "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=",
           "dev": true,
           "requires": {
             "p-limit": "^2.0.0"
@@ -11373,13 +11373,13 @@
         "p-try": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
-          "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
+          "integrity": "sha1-hQgLuHxkaI+keZb+j3376CEXYLE=",
           "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==",
+          "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=",
           "dev": true,
           "requires": {
             "find-up": "^3.0.0"
@@ -11388,7 +11388,7 @@
         "pump": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
-          "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+          "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=",
           "dev": true,
           "requires": {
             "end-of-stream": "^1.1.0",
@@ -11398,7 +11398,7 @@
         "schema-utils": {
           "version": "1.0.0",
           "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
-          "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+          "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
           "dev": true,
           "requires": {
             "ajv": "^6.1.0",
@@ -11409,13 +11409,13 @@
         "source-map": {
           "version": "0.6.1",
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
           "dev": true
         },
         "ssri": {
           "version": "6.0.1",
           "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
-          "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
+          "integrity": "sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg=",
           "dev": true,
           "requires": {
             "figgy-pudding": "^3.5.1"
@@ -11458,7 +11458,7 @@
     "through2": {
       "version": "2.0.5",
       "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
-      "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+      "integrity": "sha1-AcHjnrMdB8t9A6lqcIIyYLIxMs0=",
       "requires": {
         "readable-stream": "~2.3.6",
         "xtend": "~4.0.1"
@@ -11481,7 +11481,7 @@
         "string_decoder": {
           "version": "1.1.1",
           "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
-          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+          "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=",
           "requires": {
             "safe-buffer": "~5.1.0"
           }
@@ -11505,7 +11505,7 @@
     "timers-browserify": {
       "version": "2.0.10",
       "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz",
-      "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==",
+      "integrity": "sha1-HSjj0qrfHVpZlsTp+VYBzQU0gK4=",
       "dev": true,
       "requires": {
         "setimmediate": "^1.0.4"
@@ -11598,7 +11598,7 @@
     "touch": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
-      "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
+      "integrity": "sha1-/jZfX3XsntTlaCXgu3bSSrdK+Ds=",
       "dev": true,
       "requires": {
         "nopt": "~1.0.10"
@@ -11618,7 +11618,7 @@
     "ts-loader": {
       "version": "5.3.1",
       "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-5.3.1.tgz",
-      "integrity": "sha512-fDDgpBH3SR8xlt2MasLdz3Yy611PQ/UY/KGyo7TgXhTRU/6sS8uGG0nJYnU1OdFBNKcoYbId1UTNaAOUn+i41g==",
+      "integrity": "sha1-cGFMjsQ1SpyLicn5eyvst6mKOYA=",
       "dev": true,
       "requires": {
         "chalk": "^2.3.0",
@@ -11631,7 +11631,7 @@
     "tslib": {
       "version": "1.9.3",
       "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
-      "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==",
+      "integrity": "sha1-1+TdeSRdhUKMTX5IIqeZF5VMooY=",
       "dev": true
     },
     "tty-browserify": {
@@ -11652,7 +11652,7 @@
     "type-detect": {
       "version": "4.0.8",
       "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
-      "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+      "integrity": "sha1-dkb7XxiHHPu3dJ5pvTmmOI63RQw=",
       "dev": true
     },
     "type-is": {
@@ -11672,7 +11672,7 @@
     "typescript": {
       "version": "3.2.2",
       "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.2.tgz",
-      "integrity": "sha512-VCj5UiSyHBjwfYacmDuc/NOk4QQixbE+Wn7MFJuS0nRuPQbof132Pw4u53dm264O8LPc2MVsc7RJNml5szurkg==",
+      "integrity": "sha1-/oEBxGqhI/g1NSPr3PVzDCrkk+U=",
       "dev": true
     },
     "typical": {
@@ -11727,7 +11727,7 @@
         "debug": {
           "version": "2.6.9",
           "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
-          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
           "dev": true,
           "requires": {
             "ms": "2.0.0"
@@ -11761,13 +11761,13 @@
     "unicode-canonical-property-names-ecmascript": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
-      "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
+      "integrity": "sha1-JhmADEyCWADv3YNDr33Zkzy+KBg=",
       "dev": true
     },
     "unicode-match-property-ecmascript": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
-      "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
+      "integrity": "sha1-jtKjJWmWG86SJ9Cc0/+7j+1fAgw=",
       "dev": true,
       "requires": {
         "unicode-canonical-property-names-ecmascript": "^1.0.4",
@@ -11777,13 +11777,13 @@
     "unicode-match-property-value-ecmascript": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz",
-      "integrity": "sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ==",
+      "integrity": "sha1-nx3HaSbWzPRSMQVk/YNKzgWWY9Q=",
       "dev": true
     },
     "unicode-property-aliases-ecmascript": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz",
-      "integrity": "sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg==",
+      "integrity": "sha1-WlM/MbQxfqdvF9gH+g0RZUYRHdA=",
       "dev": true
     },
     "union-value": {
@@ -11893,13 +11893,13 @@
     "upath": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz",
-      "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==",
+      "integrity": "sha1-NSVll+RqWB20eT0M5H+prr/J+r0=",
       "dev": true
     },
     "update-notifier": {
       "version": "2.5.0",
       "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz",
-      "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==",
+      "integrity": "sha1-0HRFk+E/Fh5AassdlAi3LK0Ir/Y=",
       "dev": true,
       "requires": {
         "boxen": "^1.2.1",
@@ -12016,7 +12016,7 @@
     "util.promisify": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
-      "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
+      "integrity": "sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=",
       "requires": {
         "define-properties": "^1.1.2",
         "object.getownpropertydescriptors": "^2.0.3"
@@ -12125,7 +12125,7 @@
     "watchpack": {
       "version": "1.6.0",
       "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
-      "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==",
+      "integrity": "sha1-S8EsLr6KonenHx0/FNaFx7RGzQA=",
       "dev": true,
       "requires": {
         "chokidar": "^2.0.2",
@@ -12136,7 +12136,7 @@
     "webpack": {
       "version": "4.27.1",
       "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.27.1.tgz",
-      "integrity": "sha512-WArHiLvHrlfyRM8i7f+2SFbr/XbQ0bXqTkPF8JpHOzub5482Y3wx7rEO8stuLGOKOgZJcqcisLhD7LrM/+fVMw==",
+      "integrity": "sha1-Xy4ttEbSJmN2+hXX0id6GpwuErs=",
       "dev": true,
       "requires": {
         "@webassemblyjs/ast": "1.7.11",
@@ -12386,7 +12386,7 @@
     "webpack-sources": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz",
-      "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==",
+      "integrity": "sha1-KijcufH0X+lg2PFJMlK17mUw+oU=",
       "dev": true,
       "requires": {
         "source-list-map": "^2.0.0",
@@ -12423,7 +12423,7 @@
     "widest-line": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz",
-      "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==",
+      "integrity": "sha1-dDh2RzDsfvQ4HOTfgvuYpTFCo/w=",
       "dev": true,
       "requires": {
         "string-width": "^2.1.1"
@@ -12469,7 +12469,7 @@
     "worker-farm": {
       "version": "1.6.0",
       "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz",
-      "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==",
+      "integrity": "sha1-rsxAWXb6talVJhgIRvDboojzpKA=",
       "dev": true,
       "requires": {
         "errno": "~0.1.7"
@@ -12533,7 +12533,7 @@
     "write-file-atomic": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz",
-      "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==",
+      "integrity": "sha1-H/YVdcLipOjlENb6TiQ8zhg5mas=",
       "dev": true,
       "requires": {
         "graceful-fs": "^4.1.11",
@@ -12544,7 +12544,7 @@
     "ws": {
       "version": "6.1.2",
       "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.2.tgz",
-      "integrity": "sha512-rfUqzvz0WxmSXtJpPMX2EeASXabOrSMk1ruMOV3JBTBjo4ac2lDjGGsbQSyxj8Odhw5fBib8ZKEjDNvgouNKYw==",
+      "integrity": "sha1-PMdGLph5LwrGeUJBSJA97TucOtg=",
       "requires": {
         "async-limiter": "~1.0.0"
       }
diff --git a/src/ldap/internal/config.ts b/src/ldap/internal/config.ts
index 0bf07a73926b0f64852382a4037dadc493eaa012..6cbfcf71d208fed827e1843b251a75c2d1670bc3 100644
--- a/src/ldap/internal/config.ts
+++ b/src/ldap/internal/config.ts
@@ -6,7 +6,7 @@
 /**
  * @file Importe la configuration du LDAP au sein de l'application, et remplace certaines valeurs en fonction des variables d'environnement.
  * @memberof LDAP
- * @author manifold
+ * @author manifold, hawkspar
  */
 
 import fs from 'fs';