Merge branch 'dev'

Change-Id: I4ed82742a4493ced065f691539868a9ea762253d
diff --git a/.gitignore b/.gitignore
index ffd6c50..7b943bd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,3 +19,4 @@
 
 # node
 **/node_modules
+**/coverage
diff --git a/NOTICE.txt b/NOTICE.txt
index f9f6219..5de48b2 100644
--- a/NOTICE.txt
+++ b/NOTICE.txt
@@ -75,7 +75,7 @@
 
 Google Guava Version: 25.0-jre  (25.0)
     * License: Apache License, 2.0
-    
+
 Gradle Wrapper (4.10.2)
     * License: Apache License, 2.0
 
@@ -142,12 +142,18 @@
 jersey-server-2.23.2.jar (2.23.2)
     * License: Apache-2.0
 
+log4j-over-slf4j-1.7.25.jar (1.7.25)
+    * License: Apache-2.0
+
 logback-classic-1.2.3.jar(1.2.3)
     * License: Eclipse Public License 1.0
 
 logback-core-1.2.3.jar(1.2.3)
     * License: Eclipse Public License 1.0
 
+openatfx-0.7.4.jar (0.7.4)
+    * License: Apache-2.0
+
 osgi-resource-locator-1.0.1.jar(1.0.1)
     * License: CDDL
 
@@ -164,70 +170,86 @@
     * Source URL:  https://github.com/qos-ch/slf4j/releases/tag/v_1.7.25
 
 validation-api-1.1.0.Final.jar (1.1.0.Final)
-* License: Apache License, 2.0
+  * License: Apache License, 2.0
 
 vavr-0.9.1-sources.jar (0.9.1)
-* License: Apache License, 2.0
+  * License: Apache License, 2.0
 
-@angular/common@2.4.8
+woodstox-core-asl-4.4.1.jar (4.4.1)
+  * License: Apache License, 2.0
+
+
+FFAMFAMFAM Silk Icon, Version 1.3
+    * License: Creative Commons Attribution 3.0 License
+    * Licence Path: https://creativecommons.org/licenses/by/3.0/
+    * Project: http://www.famfamfam.com/lab/icons/silk/
+    * Source:  http://www.famfamfam.com/lab/icons/silk/
+
+@angular/animations:7.2.4
     * License: MIT
     * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
-    * Project: https://github.com/angular/angular
-    * Source:  https://github.com/angular/angular
+    * Project: https://angular.io/api/animations
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
 
-@angular/compiler@2.4.8
+@angular/cdk:7.1.1
     * License: MIT
     * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
-    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
-    * Project: https://github.com/angular/angular
-    * Source:  https://github.com/angular/angular
+    * Project: https://angular.io/api
+    * Source:  https://github.com/angular/angular/releases/tag/7.1.1
 
-@angular/core@2.4.8
+
+@angular/common@7.2.4
     * License: MIT
     * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
-    * Project: https://github.com/angular/angular
-    * Source:  https://github.com/angular/angular
+    * Project: https://angular.io/api/common
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4r
 
-@angular/forms@2.4.8
+@angular/compiler@7.2.4
     * License: MIT
     * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
-    * Project: https://github.com/angular/angular
-    * Source:  https://github.com/angular/angular
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
 
-@angular/http@2.4.8
+@angular/core@7.2.4
     * License: MIT
     * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
-    * Project: https://github.com/angular/angular
-    * Source:  https://github.com/angular/angular
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
 
-@angular/platform-browser-dynamic@2.4.8
+@angular/forms@7.2.4
     * License: MIT
     * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
-    * Project: https://github.com/angular/angular
-    * Source:  https://github.com/angular/angular
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
 
-@angular/platform-browser@2.4.8
+@angular/http@7.2.4
     * License: MIT
     * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
-    * Project: https://github.com/angular/angular
-    * Source:  https://github.com/angular/angular
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
 
-@angular/router@3.4.8
+@angular/platform-browser-dynamic@7.2.4
     * License: MIT
     * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
-    * Project: https://github.com/angular/angular
-    * Source:  https://github.com/angular/angular
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
 
-@types/file-saver@0.0.0
+@angular/platform-browser@7.2.4
     * License: MIT
-    * Licence Path: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/LICENSE
-    * Project: https://github.com/DefinitelyTyped/DefinitelyTyped
-    * Source:  https://github.com/DefinitelyTyped/DefinitelyTyped
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
 
-bootstrap@3.3.7
+@angular/router@7.2.4
+    * License: MIT
+    * Licence Path: https://github.com/angular/angular/blob/master/LICENSE
+    * Project: https://angular.io
+    * Source:  https://github.com/angular/angular/releases/tag/7.2.4
+
+bootstrap@4.1.3
     * License: MIT
     * Licence Path: https://github.com/twbs/bootstrap/raw/master/LICENSE
-    * Project: https://github.com/twbs/bootstrap
+    * Project: https://getbootstrap.com/
     * Source:  https://github.com/twbs/bootstrap
 
 class-transformer@0.1.6
@@ -236,11 +258,11 @@
     * Project: https://github.com/pleerock/class-transformer
     * Source:  https://github.com/pleerock/class-transformer
 
-core-js@2.4.1
+core-js@2.6.0
     * License: MIT
     * Licence Path: https://github.com/zloirock/core-js/raw/master/LICENSE
     * Project: https://github.com/zloirock/core-js
-    * Source:  https://github.com/zloirock/core-js
+    * Source:  https://github.com/zloirock/core-js/releases/tag/v2.6.0
 
 file-saver@1.3.3
     * License: MIT
@@ -254,63 +276,58 @@
     * Project: https://fontawesome.com/
     * Source:  https://github.com/FortAwesome/Font-Awesome
 
-moment@2.17.1
-    * License: MIT
-    * Licence Path: https://github.com/moment/moment/raw/master/LICENSE
-    * Project: https://github.com/moment/moment
-    * Source:  https://github.com/moment/moment
-
-ngx-bootstrap@1.9.1
-    * License: MIT
-    * Licence Path: https://github.com/valor-software/ngx-bootstrap/blob/development/LICENSE
-    * Project: https://valor-software.com/ngx-bootstrap
-    * Source:  https://github.com/valor-software/ngx-bootstrap
-
 ng2-split-pane@1.3.1
     * License: MIT
     * Licence Path: https://github.com/wannabegeek/ng2-split-pane/raw/master/LICENSE
     * Project: https://github.com/wannabegeek/ng2-split-pane
     * Source:  https://github.com/wannabegeek/ng2-split-pane
 
-primeng@2.0.5
+ngx-bootstrap@3.1.2
     * License: MIT
-    * Licence Path: https://github.com/primefaces/primeng/raw/master/LICENSE.md
-    * Project: https://github.com/primefaces/primeng
-    * Source:  https://github.com/primefaces/primeng
+    * Licence Path: https://github.com/valor-software/ngx-bootstrap/blob/v3.1.2/LICENSE
+    * Project: https://valor-software.com/ngx-bootstrap
+    * Source:  https://github.com/valor-software/ngx-bootstrap/tree/v3.1.2
 
-reflect-metadata@0.1.3
-    * License: Apache-2.0
-    * Project: https://github.com/rbuckton/ReflectDecorators
-    * Source:  https://github.com/rbuckton/ReflectDecorators
+primeicons:1.0.0
+    * License: MIT
+    * Licence Path: https://github.com/primefaces/primeicons/blob/1.0.0/LICENSE
+    * Project: https://www.primefaces.org/primeng
+    * Source:  https://github.com/primefaces/primeicons/tree/1.0.0
+
+primeng@7.0.1
+    * License: MIT
+    * Licence Path: https://github.com/primefaces/primeng/blob/7.0.1/LICENSE.md
+    * Project: https://www.primefaces.org/primeng
+    * Source:  https://github.com/primefaces/primeng/tree/7.0.1
 
 rxjs@5.1.0
     * License: Apache-2.0
-    * Project: https://github.com/ReactiveX/RxJS
-    * Source:  https://github.com/ReactiveX/RxJS
+    * Project: https://rxjs-dev.firebaseapp.com/
+    * Source:  https://github.com/ReactiveX/rxjs/tree/6.3.3
 
-symbol-observable@1.2.0
-    * License: MIT
-    * Licence Path: https://github.com/blesh/symbol-observable/raw/master/license
-    * Project: https://github.com/blesh/symbol-observable
-    * Source:  https://github.com/blesh/symbol-observable
+rxjs-compat:6.3.3
+    * License: Apache-2.0
+    * Project: https://rxjs-dev.firebaseapp.com/
+    * Source:  https://github.com/ReactiveX/rxjs/tree/6.3.3/compat
 
-ts-helpers@1.1.1
-    * License: MIT
-    * Licence Path: https://github.com/ngParty/ts-helpers/raw/master/LICENSE
-    * Project: https://github.com/ngParty/ts-helpers
-    * Source:  https://github.com/ngParty/ts-helpers
 
-zone.js@0.7.6
+zone.js@0.8.26
     * License: MIT
     * Licence Path: https://github.com/angular/zone.js/raw/master/LICENSE
     * Project: https://github.com/angular
-    * Source:  https://github.com/angular/zone.js
-    
-FFAMFAMFAM Silk Icon, Version 1.3
-    * License: Creative Commons Attribution 3.0 License 
-    * Licence Path: https://creativecommons.org/licenses/by/3.0/
-    * Project: http://www.famfamfam.com/lab/icons/silk/
-    * Source:  http://www.famfamfam.com/lab/icons/silk/
+    * Source:  https://github.com/angular/zone.js/releases/tag/v0.8.26
+
+OMG Event Service Specification (1.2)
+
+* License: LicenseRef - Object-Management-Group-License
+* Project: https://www.omg.org/spec/EVNT/1.2/
+* Source: https://www.omg.org/spec/EVNT/1.2/pdf
+
+OMG Notification Service Specification (1.1)
+
+* License: LicenseRef - Object-Management-Group-License
+* Project: https://www.omg.org/spec/NOT/
+* Source: https://www.omg.org/spec/NOT/1.1/PDF
 
 ods530.idl
 Permission of use:
@@ -331,15 +348,6 @@
 Under the Eclipse Public License (EPL). This agreement does not include the „AvalonEvent.idl“ and
 „CorbaFileServer.idl“ itself, which remain protected property of HighQSoft. "
 
-OMG Notification Service Specification Version: 1.1
-The terms of use are defined in section "Freely Available And Available
-Free" see: http://www.omg.org/gettingstarted/overview.htm
-
-OMG Event Service Specification Version: 1.2
-The terms of use are defined in section "Freely Available And Available
-Free" see: http://www.omg.org/gettingstarted/overview.htm
-
-
 ## Cryptography
 
 Content may contain encryption software. The country in which you are currently
diff --git a/README.md b/README.md
index 13a7c87..19f6b41 100644
--- a/README.md
+++ b/README.md
@@ -121,7 +121,7 @@
 * SOURCENAME is the source name the underlying data source
 * CONTEXTTYPE is one of [unitundertest, testsequence, testequipment]
 * DATATYPE is one of [STRING, STRING_SEQUENCE, DATE, DATE_SEQUENCE, BOOLEAN, BOOLEAN_SEQUENCE, BYTE, BYTE_SEQUENCE, SHORT, SHORT_SEQUENCE, INTEGER, INTEGER_SEQUENCE, LONG, LONG_SEQUENCE, FLOAT, FLOAT_SEQUENCE, DOUBLE, DOUBLE_SEQUENCE, BYTE_STREAM, BYTE_STREAM_SEQUENCE, FLOAT_COMPLEX, FLOAT_COMPLEX_SEQUENCE, DOUBLE_COMPLEX, DOUBLE_COMPLEX_SEQUENCE, FILE_LINK, FILE_LINK_SEQUENCE] 
-* FILTERSTRING is a String defining a filter. For example `Test.Name eq 't*'` filters for all tests which names begin with `t`.
+* FILTERSTRING is a String defining a filter. For example `Test.Name eq "t*"` filters for all tests which names begin with `t`. Strings should be quoted with `"`. `"` characters within strings have to be escaped with a backslash. For backward compatibility `'` is also allowed to quote strings, but may be blocked in URLs in some environments, thus `"` should be preferred.
 
 
 **Business Object: Test**
diff --git a/build.gradle b/build.gradle
index dc06559..2bec27a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,19 +1,19 @@
-/********************************************************************************

- * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation

- *

- * See the NOTICE file(s) distributed with this work for additional

- * information regarding copyright ownership.

- *

- * This program and the accompanying materials are made available under the

- * terms of the Eclipse Public License v. 2.0 which is available at

- * http://www.eclipse.org/legal/epl-2.0.

- *

- * SPDX-License-Identifier: EPL-2.0

- *

- ********************************************************************************/

+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
  
 group = 'org.eclipse.mdm'
-version = '5.1.0M2'
+version = '5.1.0M3-SNAPSHOT'
 
 description = 'mdm nucleus'
 apply plugin: 'war'
@@ -29,12 +29,12 @@
 	mavenCentral()
 }
 
-subprojects {

-	configurations.all {

-		resolutionStrategy.dependencySubstitution {

-			substitute module("de.rechner:openatfx") with project(":org.eclipse.mdm.openatfx")

-		}

-	}

+subprojects {
+	configurations.all {
+		resolutionStrategy.dependencySubstitution {
+			substitute module("de.rechner:openatfx") with project(":org.eclipse.mdm.openatfx")
+		}
+	}
 	
 	group = rootProject.group
 	version = rootProject.version
@@ -60,15 +60,15 @@
 		testCompile 'org.assertj:assertj-core:3.6.2'
 		testCompile 'org.mockito:mockito-core:2.13.0'
 		testCompile 'javax:javaee-api:7.0'
-	}

-	

-	task sourcesJar(type: Jar, dependsOn: classes) {

-		classifier = 'sources'

-		from sourceSets.main.allSource

-	}

-	

-	artifacts {

-		archives sourcesJar

+	}
+	
+	task sourcesJar(type: Jar, dependsOn: classes) {
+		classifier = 'sources'
+		from sourceSets.main.allSource
+	}
+	
+	artifacts {
+		archives sourcesJar
 	}
 }
 
@@ -76,9 +76,9 @@
 	dependsOn gradle.includedBuilds*.task(':clean')
 }
 
-configurations.all {

-	resolutionStrategy.dependencySubstitution {

-		substitute module("de.rechner:openatfx") with project(":org.eclipse.mdm.openatfx")

+configurations.all {
+	resolutionStrategy.dependencySubstitution {
+		substitute module("de.rechner:openatfx") with project(":org.eclipse.mdm.openatfx")
 	}
 	exclude group: 'com.sun.mail', module: 'javax.mail'
 	exclude group: 'javax.ws.rs', module: 'javax.ws.rs-api'
@@ -95,9 +95,13 @@
 	exclude group: 'org.checkerframework', module: 'checker-compat-qual'
 }
 
-dependencies {

-	compile project(':org.eclipse.mdm.application')

-	compile project(':org.eclipse.mdm.apicopy')

+dependencies {
+	runtime project(':org.eclipse.mdm.application')
+	runtime project(':org.eclipse.mdm.apicopy')
+
+	// adapters
+	runtime project(':org.eclipse.mdm.api.atfxadapter')
+	runtime "org.eclipse.mdm:org.eclipse.mdm.api.odsadapter:${version}"
 }
 
 
@@ -122,26 +126,25 @@
 }
 
 task distribute(type: Zip) {
-	archiveName = "openMDM_application-${version}.zip"

-	

-	from "${project.projectDir}/LICENSE.txt"

-	from "${project.projectDir}/NOTICE.txt"

-	from "${project.projectDir}/readme.md"

-	from "${project.projectDir}/release_notes.md"

-	

-	from "${project.projectDir}/doc/GettingStarted_mdmbl.pdf"

-	from "${project.projectDir}/doc/Installation Guide for the openMDM5 Application.pdf"

+	archiveName = "openMDM_application-${version}.zip"
+	
+	from "${project.projectDir}/LICENSE.txt"
+	from "${project.projectDir}/NOTICE.txt"
+	from "${project.projectDir}/readme.md"
+	from "${project.projectDir}/release_notes.md"
+	
+	from "${project.projectDir}/doc/GettingStarted_mdmbl.pdf"
+	from "${project.projectDir}/doc/Installation Guide for the openMDM5 Application.pdf"
 	
 	from "${project.projectDir}/build/tmp/openmdm_application"
 	from "${project.projectDir}/build/libs/"
 }
-distribute.dependsOn(collectConfiguration)

-distribute.dependsOn(copySchema)

+distribute.dependsOn(collectConfiguration)
+distribute.dependsOn(copySchema)
 
 war {
 	from ('org.eclipse.mdm.application/build/node/dist') {
-		include('assets/*')
-		include('*')
+		include('**/*')
 	}
 
 	webXml = file('org.eclipse.mdm.application/src/main/webconfig/web.xml')
@@ -151,7 +154,7 @@
 	metaInf { from 'LICENSE.txt' }
 }
 
-war.finalizedBy(distribute)

+war.finalizedBy(distribute)
 
 jacoco {
 	toolVersion = "0.7.6.201602180812"
diff --git a/doc/GettingStarted_mdmbl.pdf b/doc/GettingStarted_mdmbl.pdf
index ea7f6dc..99373f3 100644
--- a/doc/GettingStarted_mdmbl.pdf
+++ b/doc/GettingStarted_mdmbl.pdf
Binary files differ
diff --git a/doc/Installation Guide for the openMDM5 Application.pdf b/doc/Installation Guide for the openMDM5 Application.pdf
index c95b1d4..d8772a9 100644
--- a/doc/Installation Guide for the openMDM5 Application.pdf
+++ b/doc/Installation Guide for the openMDM5 Application.pdf
Binary files differ
diff --git a/eclipse_formatter.xml b/eclipse_formatter.xml
new file mode 100644
index 0000000..eb0b582
--- /dev/null
+++ b/eclipse_formatter.xml
@@ -0,0 +1,347 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>

+<profiles version="16">

+<profile kind="CodeFormatterProfile" name="openMDM 5 Formatter (Eclipse built-in 2019-3)" version="16">

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment" value="common_lines"/>

+<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_logical_operator" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation" value="common_lines"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement" value="common_lines"/>

+<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration" value="common_lines"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.align_with_spaces" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>

+<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="16"/>

+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>

+<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement" value="common_lines"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references" value="0"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_logical_operator" value="16"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line" value="one_line_never"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="80"/>

+<setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.keep_method_body_on_one_line" value="one_line_never"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line" value="one_line_never"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>

+<setting id="org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line" value="one_line_never"/>

+<setting id="org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="16"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line" value="one_line_never"/>

+<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause" value="common_lines"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_additive_operator" value="16"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_relational_operator" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator" value="16"/>

+<setting id="org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line" value="one_line_never"/>

+<setting id="org.eclipse.jdt.core.formatter.wrap_before_shift_operator" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>

+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line"/>

+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_lambda_body" value="end_of_line"/>

+<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_parameters" value="0"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_loops" value="16"/>

+<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_relational_operator" value="0"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>

+<setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>

+<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation" value="common_lines"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_additive_operator" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_module_statements" value="16"/>

+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>

+<setting id="org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line" value="one_line_never"/>

+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>

+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_additive_operator" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/>

+<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.wrap_before_conditional_operator" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_shift_operator" value="0"/>

+<setting id="org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines" value="2147483647"/>

+<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator" value="16"/>

+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="80"/>

+<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause" value="common_lines"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>

+<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.keep_code_block_on_one_line" value="one_line_never"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.wrap_before_assignment_operator" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration" value="common_lines"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>

+<setting id="org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line" value="one_line_never"/>

+<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_arguments" value="0"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="0"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_logical_operator" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.wrap_before_relational_operator" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.comment.indent_tag_description" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_string_concatenation" value="16"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>

+<setting id="org.eclipse.jdt.core.formatter.wrap_before_logical_operator" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_shift_operator" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration" value="common_lines"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_shift_operator" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line" value="one_line_never"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/>

+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header" value="0"/>

+<setting id="org.eclipse.jdt.core.formatter.wrap_before_additive_operator" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="false"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="tab"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_relational_operator" value="insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.wrap_before_string_concatenation" value="true"/>

+<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>

+<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="120"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>

+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>

+</profile>

+</profiles>

diff --git a/org.eclipse.mdm.api.atfxadapter/build.gradle b/org.eclipse.mdm.api.atfxadapter/build.gradle
index 90cf48d..95dbed0 100644
--- a/org.eclipse.mdm.api.atfxadapter/build.gradle
+++ b/org.eclipse.mdm.api.atfxadapter/build.gradle
@@ -24,7 +24,7 @@
 
 dependencies {
 	compile 'org.slf4j:slf4j-api:1.7.25'
-	compile 'de.rechner:openatfx:0.7.4'
+	compile project(':org.eclipse.mdm.openatfx')
 
 	// MDM5 API
 	compile "org.eclipse.mdm:org.eclipse.mdm.api.odsadapter:${version}"
diff --git a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXContext.java b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXContext.java
index fea0e36..115bcdd 100644
--- a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXContext.java
+++ b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXContext.java
@@ -48,7 +48,8 @@
 
 	/**
 	 * Creates a new ATFX application context.
-	 * @param orb the CORBA ORB used to connect to the ODS API
+	 * 
+	 * @param orb        the CORBA ORB used to connect to the ODS API
 	 * @param aoSession
 	 * @param parameters
 	 * @throws AoException
@@ -62,7 +63,6 @@
 		LOGGER.debug("ATFXContext initialized.");
 	}
 
-
 	/**
 	 * {@inheritDoc}
 	 */
@@ -96,7 +96,6 @@
 		return Optional.of(new ODSQueryService(modelManager));
 	}
 
-
 	/**
 	 * {@inheritDoc}
 	 */
@@ -113,7 +112,6 @@
 		return "atfx";
 	}
 
-
 	/**
 	 * {@inheritDoc}
 	 */
@@ -128,6 +126,7 @@
 
 	/**
 	 * Returns the {@link ATFXModelManager} used for this context.
+	 * 
 	 * @return the {@link ATFXModelManager}
 	 */
 	public ODSModelManager getODSModelManager() {
@@ -136,6 +135,7 @@
 
 	/**
 	 * Returns the {@link AoSession} used for this context.
+	 * 
 	 * @return {@link AoSession} used for this context.
 	 */
 	public AoSession getAoSession() {
@@ -144,6 +144,7 @@
 
 	/**
 	 * Returns the ORB used for this context
+	 * 
 	 * @return ORB used for this context
 	 */
 	public ORB getORB() {
@@ -154,11 +155,10 @@
 	 * Returns a new {@link ATFXContext} with a new ODS co-session.
 	 *
 	 * @return The created {@code ODSContext} is returned.
-	 * @throws AoException
-	 *             Thrown on errors.
+	 * @throws AoException Thrown on errors.
 	 */
 	public ATFXContext newContext() throws AoException {
 		throw new AoException(ErrorCode.AO_NOT_IMPLEMENTED, SeverityFlag.ERROR, 0,
-                "Method 'createCoSession' not implemented in openATFX");
+				"Method 'createCoSession' not implemented in openATFX");
 	}
 }
diff --git a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXContextFactory.java b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXContextFactory.java
index c7ced3f..45462f4 100644
--- a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXContextFactory.java
+++ b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXContextFactory.java
@@ -1,53 +1,53 @@
-/********************************************************************************

- * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation

- *

- * See the NOTICE file(s) distributed with this work for additional

- * information regarding copyright ownership.

- *

- * This program and the accompanying materials are made available under the

- * terms of the Eclipse Public License v. 2.0 which is available at

- * http://www.eclipse.org/legal/epl-2.0.

- *

- * SPDX-License-Identifier: EPL-2.0

- *

- ********************************************************************************/

-package org.eclipse.mdm.api.atfxadapter;

-

-import java.io.File;

-import java.io.IOException;

-import java.nio.file.Files;

-import java.util.Map;

-

-import org.asam.ods.AoException;

-import org.asam.ods.AoSession;

-import org.eclipse.mdm.api.base.ConnectionException;

-import org.eclipse.mdm.api.dflt.ApplicationContext;

-import org.eclipse.mdm.api.dflt.ApplicationContextFactory;

-import org.omg.CORBA.ORB;

-

-import de.rechner.openatfx.AoServiceFactory;

-

-public class ATFXContextFactory implements ApplicationContextFactory {

-

-

-	private final ORB orb = ORB.init(new String[] {}, System.getProperties());

-

-	@Override

-	public ApplicationContext connect(Map<String, String> parameters) throws ConnectionException {

-		File atfxFile = new File(parameters.get("atfxfile"));

-

-		try {

-			AoSession aoSession;

-			if (atfxFile.exists() && Files.size(atfxFile.toPath()) > 0L) {

-				aoSession = AoServiceFactory.getInstance().newAoSession(orb, atfxFile);

-			} else {

-				throw new ConnectionException("Cannot open session on a not existing or empty ATFX file: " + atfxFile.getAbsolutePath());

-			}

-			return new ATFXContext(orb, aoSession, parameters);

-		} catch (AoException e) {

-			throw new ConnectionException("Error " + e.reason, e);

-		} catch (IOException e) {

-			throw new ConnectionException("Error reading ATFX file " + atfxFile.getAbsolutePath(), e);

-		}

-	}

-}

+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.api.atfxadapter;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.util.Map;
+
+import org.asam.ods.AoException;
+import org.asam.ods.AoSession;
+import org.eclipse.mdm.api.base.ConnectionException;
+import org.eclipse.mdm.api.dflt.ApplicationContext;
+import org.eclipse.mdm.api.dflt.ApplicationContextFactory;
+import org.omg.CORBA.ORB;
+
+import de.rechner.openatfx.AoServiceFactory;
+
+public class ATFXContextFactory implements ApplicationContextFactory {
+
+	private final ORB orb = ORB.init(new String[] {}, System.getProperties());
+
+	@Override
+	public ApplicationContext connect(Map<String, String> parameters) throws ConnectionException {
+		File atfxFile = new File(parameters.get("atfxfile"));
+
+		try {
+			AoSession aoSession;
+			if (atfxFile.exists() && Files.size(atfxFile.toPath()) > 0L) {
+				aoSession = AoServiceFactory.getInstance().newAoSession(orb, atfxFile);
+			} else {
+				throw new ConnectionException(
+						"Cannot open session on a not existing or empty ATFX file: " + atfxFile.getAbsolutePath());
+			}
+			return new ATFXContext(orb, aoSession, parameters);
+		} catch (AoException e) {
+			throw new ConnectionException("Error " + e.reason, e);
+		} catch (IOException e) {
+			throw new ConnectionException("Error reading ATFX file " + atfxFile.getAbsolutePath(), e);
+		}
+	}
+}
diff --git a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXEntityConfigRepositoryLoader.java b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXEntityConfigRepositoryLoader.java
index b1be4f2..11f3ffc 100644
--- a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXEntityConfigRepositoryLoader.java
+++ b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXEntityConfigRepositoryLoader.java
@@ -1,190 +1,187 @@
-/********************************************************************************

- * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation

- *

- * See the NOTICE file(s) distributed with this work for additional

- * information regarding copyright ownership.

- *

- * This program and the accompanying materials are made available under the

- * terms of the Eclipse Public License v. 2.0 which is available at

- * http://www.eclipse.org/legal/epl-2.0.

- *

- * SPDX-License-Identifier: EPL-2.0

- *

- ********************************************************************************/

-package org.eclipse.mdm.api.atfxadapter;

-

-import java.util.Locale;

-

-import org.eclipse.mdm.api.base.adapter.EntityType;

-import org.eclipse.mdm.api.base.adapter.Relation;

-import org.eclipse.mdm.api.base.model.Channel;

-import org.eclipse.mdm.api.base.model.ChannelGroup;

-import org.eclipse.mdm.api.base.model.ContextComponent;

-import org.eclipse.mdm.api.base.model.ContextRoot;

-import org.eclipse.mdm.api.base.model.ContextSensor;

-import org.eclipse.mdm.api.base.model.ContextType;

-import org.eclipse.mdm.api.base.model.Entity;

-import org.eclipse.mdm.api.base.model.Environment;

-import org.eclipse.mdm.api.base.model.Measurement;

-import org.eclipse.mdm.api.base.model.Parameter;

-import org.eclipse.mdm.api.base.model.ParameterSet;

-import org.eclipse.mdm.api.base.model.PhysicalDimension;

-import org.eclipse.mdm.api.base.model.Quantity;

-import org.eclipse.mdm.api.base.model.Sortable;

-import org.eclipse.mdm.api.base.model.Test;

-import org.eclipse.mdm.api.base.model.TestStep;

-import org.eclipse.mdm.api.base.model.Unit;

-import org.eclipse.mdm.api.base.model.User;

-import org.eclipse.mdm.api.dflt.model.Pool;

-import org.eclipse.mdm.api.dflt.model.Project;

-import org.eclipse.mdm.api.odsadapter.lookup.config.DefaultEntityConfigRepositoryLoader;

-import org.eclipse.mdm.api.odsadapter.lookup.config.EntityConfig;

-import org.eclipse.mdm.api.odsadapter.lookup.config.EntityConfig.Key;

-import org.eclipse.mdm.api.odsadapter.lookup.config.EntityConfigRepository;

-import org.eclipse.mdm.api.odsadapter.lookup.config.EntityConfigRepositoryLoader;

-import org.eclipse.mdm.api.odsadapter.query.ODSEntityType;

-import org.eclipse.mdm.api.odsadapter.query.ODSModelManager;

-import org.eclipse.mdm.api.odsadapter.utils.ODSUtils;

-import org.slf4j.Logger;

-import org.slf4j.LoggerFactory;

-

-public class ATFXEntityConfigRepositoryLoader implements EntityConfigRepositoryLoader {

-

-	private static final Logger LOGGER = LoggerFactory.getLogger(DefaultEntityConfigRepositoryLoader.class);

-

-	EntityConfigRepository entityConfigRepository;

-

-	public ATFXEntityConfigRepositoryLoader() {

-	}

-

-	/**

-	 * Loads the {@link EntityConfig}s.

-	 * @return

-	 */

-	@Override

-	public EntityConfigRepository loadEntityConfigurations(ODSModelManager modelManager) {

-		LOGGER.debug("Loading entity configurations...");

-		long start = System.currentTimeMillis();

-

-		entityConfigRepository = new EntityConfigRepository();

-

-		// Environment | Project | Pool | PhysicalDimension | User | Measurement

-		// | ChannelGroup

-		entityConfigRepository.register(create(modelManager, new Key<>(Environment.class), "Environment", false));

-		entityConfigRepository.register(create(modelManager, new Key<>(Project.class), "Project", false));

-		entityConfigRepository.register(create(modelManager, new Key<>(Pool.class), "StructureLevel", true));

-		entityConfigRepository.register(create(modelManager, new Key<>(PhysicalDimension.class), "PhysDimension", false));

-		entityConfigRepository.register(create(modelManager, new Key<>(Measurement.class), "MeaResult", false));

-		entityConfigRepository.register(create(modelManager, new Key<>(ChannelGroup.class), "SubMatrix", false));

-

-		// Unit

-		EntityConfig<Unit> unitConfig = create(modelManager, new Key<>(Unit.class), "Unit", false);

-		unitConfig.addMandatory(entityConfigRepository.findRoot(new Key<>(PhysicalDimension.class)));

-		entityConfigRepository.register(unitConfig);

-

-		// Quantity

-		EntityConfig<Quantity> quantityConfig = create(modelManager, new Key<>(Quantity.class), "Quantity", false);

-		quantityConfig.addMandatory(entityConfigRepository.findRoot(new Key<>(Unit.class)));

-		entityConfigRepository.register(quantityConfig);

-

-		// Channel

-		EntityConfig<Channel> channelConfig = create(modelManager, new Key<>(Channel.class), "MeaQuantity", false);

-		channelConfig.addMandatory(entityConfigRepository.findRoot(new Key<>(Unit.class)));

-		channelConfig.addMandatory(entityConfigRepository.findRoot(new Key<>(Quantity.class)));

-		entityConfigRepository.register(channelConfig);

-

-		// ParameterSet

-		EntityConfig<Parameter> parameterConfig = create(modelManager, new Key<>(Parameter.class), "ResultParameter", true);

-		parameterConfig.addOptional(entityConfigRepository.findRoot(new Key<>(Unit.class)));

-		EntityConfig<ParameterSet> parameterSetConfig = create(modelManager, new Key<>(ParameterSet.class), "ResultParameterSet", true);

-		parameterSetConfig.addChild(parameterConfig);

-		entityConfigRepository.register(parameterSetConfig);

-

-		// TestStep

-		EntityConfig<TestStep> testStepConfig = create(modelManager, new Key<>(TestStep.class), "TestStep", true);

-		testStepConfig.setComparator(Sortable.COMPARATOR);

-		entityConfigRepository.register(testStepConfig);

-

-		// Test

-		EntityConfig<Test> testConfig = create(modelManager, new Key<>(Test.class), "Test", true);

-		entityConfigRepository.register(testConfig);

-

-		// ContextRoots

-		registerContextRoot(modelManager, ContextType.UNITUNDERTEST);

-		registerContextRoot(modelManager, ContextType.TESTSEQUENCE);

-		registerContextRoot(modelManager, ContextType.TESTEQUIPMENT);

-

-		LOGGER.debug("Entity configurations loaded in {} ms.", System.currentTimeMillis() - start);

-

-		return entityConfigRepository;

-	}

-

-	/**

-	 * Loads the {@link EntityConfig}s required for {@link ContextRoot} with

-	 * given {@link ContextType}.

-	 *

-	 * @param contextType

-	 *            The {@code ContextType}.

-	 */

-	private void registerContextRoot(ODSModelManager modelManager, ContextType contextType) {

-		EntityConfig<ContextRoot> contextRootConfig = create(modelManager, new Key<>(ContextRoot.class, contextType),

-				ODSUtils.CONTEXTTYPES.get(contextType), true);

-		for (Relation contextComponentRelation : contextRootConfig.getEntityType().getChildRelations()) {

-			EntityType contextComponentEntityType = contextComponentRelation.getTarget();

-			EntityConfig<ContextComponent> contextComponentConfig = create(modelManager,

-					new Key<>(ContextComponent.class, contextType), contextComponentEntityType.getName(), true);

-			contextRootConfig.addChild(contextComponentConfig);

-			if (contextType.isTestEquipment()) {

-				for (Relation contextSensorRelation : contextComponentEntityType.getChildRelations()) {

-					EntityType contextSensorEntityType = contextSensorRelation.getTarget();

-					EntityConfig<ContextSensor> contextSensorConfig = create(modelManager, new Key<>(ContextSensor.class),

-							contextSensorEntityType.getName(), true);

-					contextComponentConfig.addChild(contextSensorConfig);

-				}

-			}

-		}

-		entityConfigRepository.register(contextRootConfig);

-	}

-

-	/**

-	 * Creates a new {@link EntityConfig}.

-	 *

-	 * @param <T>

-	 *            The entity type.

-	 * @param key

-	 *            Used as identifier.

-	 * @param typeName

-	 *            Name of the associated {@link EntityType}.

-	 * @param appendName

-	 *            Flag indicates whether to append the entity types base name to

-	 *            the MIME type.

-	 * @return The created {@code EntityConfig} is returned.

-	 */

-	private <T extends Entity> EntityConfig<T> create(ODSModelManager modelManager, Key<T> key, String typeName, boolean appendName) {

-		EntityConfig<T> entityConfig = new EntityConfig<>(key);

-		ODSEntityType entityType = (ODSEntityType) modelManager.getEntityType(typeName);

-		entityConfig.setEntityType(entityType);

-		entityConfig.setMimeType(buildDefaultMimeType(entityType, appendName));

-		return entityConfig;

-	}

-

-	/**

-	 * Creates a default MIME type for given {@link EntityType}.

-	 *

-	 * @param entityType

-	 *            The {@code EntityType}.

-	 * @param appendName

-	 *            Flag indicates whether to append the entity types base name to

-	 *            the MIME type.

-	 * @return The created MIME type {@code String} is returned.

-	 */

-	private String buildDefaultMimeType(ODSEntityType entityType, boolean appendName) {

-		StringBuilder sb = new StringBuilder();

-		sb.append("application/x-asam.");

-		sb.append(entityType.getBaseName().toLowerCase(Locale.ROOT));

-		if (appendName) {

-			sb.append('.').append(entityType.getName().toLowerCase(Locale.ROOT));

-		}

-		return sb.toString();

-	}

-}

+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
+package org.eclipse.mdm.api.atfxadapter;
+
+import java.util.Locale;
+
+import org.eclipse.mdm.api.base.adapter.EntityType;
+import org.eclipse.mdm.api.base.adapter.Relation;
+import org.eclipse.mdm.api.base.model.Channel;
+import org.eclipse.mdm.api.base.model.ChannelGroup;
+import org.eclipse.mdm.api.base.model.ContextComponent;
+import org.eclipse.mdm.api.base.model.ContextRoot;
+import org.eclipse.mdm.api.base.model.ContextSensor;
+import org.eclipse.mdm.api.base.model.ContextType;
+import org.eclipse.mdm.api.base.model.Entity;
+import org.eclipse.mdm.api.base.model.Environment;
+import org.eclipse.mdm.api.base.model.Measurement;
+import org.eclipse.mdm.api.base.model.Parameter;
+import org.eclipse.mdm.api.base.model.ParameterSet;
+import org.eclipse.mdm.api.base.model.PhysicalDimension;
+import org.eclipse.mdm.api.base.model.Quantity;
+import org.eclipse.mdm.api.base.model.Sortable;
+import org.eclipse.mdm.api.base.model.Test;
+import org.eclipse.mdm.api.base.model.TestStep;
+import org.eclipse.mdm.api.base.model.Unit;
+import org.eclipse.mdm.api.dflt.model.Pool;
+import org.eclipse.mdm.api.dflt.model.Project;
+import org.eclipse.mdm.api.odsadapter.lookup.config.DefaultEntityConfigRepositoryLoader;
+import org.eclipse.mdm.api.odsadapter.lookup.config.EntityConfig;
+import org.eclipse.mdm.api.odsadapter.lookup.config.EntityConfig.Key;
+import org.eclipse.mdm.api.odsadapter.lookup.config.EntityConfigRepository;
+import org.eclipse.mdm.api.odsadapter.lookup.config.EntityConfigRepositoryLoader;
+import org.eclipse.mdm.api.odsadapter.query.ODSEntityType;
+import org.eclipse.mdm.api.odsadapter.query.ODSModelManager;
+import org.eclipse.mdm.api.odsadapter.utils.ODSUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ATFXEntityConfigRepositoryLoader implements EntityConfigRepositoryLoader {
+
+	private static final Logger LOGGER = LoggerFactory.getLogger(DefaultEntityConfigRepositoryLoader.class);
+
+	EntityConfigRepository entityConfigRepository;
+
+	public ATFXEntityConfigRepositoryLoader() {
+	}
+
+	/**
+	 * Loads the {@link EntityConfig}s.
+	 * 
+	 * @return
+	 */
+	@Override
+	public EntityConfigRepository loadEntityConfigurations(ODSModelManager modelManager) {
+		LOGGER.debug("Loading entity configurations...");
+		long start = System.currentTimeMillis();
+
+		entityConfigRepository = new EntityConfigRepository();
+
+		// Environment | Project | Pool | PhysicalDimension | User | Measurement
+		// | ChannelGroup
+		entityConfigRepository.register(create(modelManager, new Key<>(Environment.class), "Environment", false));
+		entityConfigRepository.register(create(modelManager, new Key<>(Project.class), "Project", false));
+		entityConfigRepository.register(create(modelManager, new Key<>(Pool.class), "StructureLevel", true));
+		entityConfigRepository
+				.register(create(modelManager, new Key<>(PhysicalDimension.class), "PhysDimension", false));
+		entityConfigRepository.register(create(modelManager, new Key<>(Measurement.class), "MeaResult", false));
+		entityConfigRepository.register(create(modelManager, new Key<>(ChannelGroup.class), "SubMatrix", false));
+
+		// Unit
+		EntityConfig<Unit> unitConfig = create(modelManager, new Key<>(Unit.class), "Unit", false);
+		unitConfig.addMandatory(entityConfigRepository.findRoot(new Key<>(PhysicalDimension.class)));
+		entityConfigRepository.register(unitConfig);
+
+		// Quantity
+		EntityConfig<Quantity> quantityConfig = create(modelManager, new Key<>(Quantity.class), "Quantity", false);
+		quantityConfig.addMandatory(entityConfigRepository.findRoot(new Key<>(Unit.class)));
+		entityConfigRepository.register(quantityConfig);
+
+		// Channel
+		EntityConfig<Channel> channelConfig = create(modelManager, new Key<>(Channel.class), "MeaQuantity", false);
+		channelConfig.addMandatory(entityConfigRepository.findRoot(new Key<>(Unit.class)));
+		channelConfig.addMandatory(entityConfigRepository.findRoot(new Key<>(Quantity.class)));
+		entityConfigRepository.register(channelConfig);
+
+		// ParameterSet
+		EntityConfig<Parameter> parameterConfig = create(modelManager, new Key<>(Parameter.class), "ResultParameter",
+				true);
+		parameterConfig.addOptional(entityConfigRepository.findRoot(new Key<>(Unit.class)));
+		EntityConfig<ParameterSet> parameterSetConfig = create(modelManager, new Key<>(ParameterSet.class),
+				"ResultParameterSet", true);
+		parameterSetConfig.addChild(parameterConfig);
+		entityConfigRepository.register(parameterSetConfig);
+
+		// TestStep
+		EntityConfig<TestStep> testStepConfig = create(modelManager, new Key<>(TestStep.class), "TestStep", true);
+		testStepConfig.setComparator(Sortable.COMPARATOR);
+		entityConfigRepository.register(testStepConfig);
+
+		// Test
+		EntityConfig<Test> testConfig = create(modelManager, new Key<>(Test.class), "Test", true);
+		entityConfigRepository.register(testConfig);
+
+		// ContextRoots
+		registerContextRoot(modelManager, ContextType.UNITUNDERTEST);
+		registerContextRoot(modelManager, ContextType.TESTSEQUENCE);
+		registerContextRoot(modelManager, ContextType.TESTEQUIPMENT);
+
+		LOGGER.debug("Entity configurations loaded in {} ms.", System.currentTimeMillis() - start);
+
+		return entityConfigRepository;
+	}
+
+	/**
+	 * Loads the {@link EntityConfig}s required for {@link ContextRoot} with given
+	 * {@link ContextType}.
+	 *
+	 * @param contextType The {@code ContextType}.
+	 */
+	private void registerContextRoot(ODSModelManager modelManager, ContextType contextType) {
+		EntityConfig<ContextRoot> contextRootConfig = create(modelManager, new Key<>(ContextRoot.class, contextType),
+				ODSUtils.CONTEXTTYPES.get(contextType), true);
+		for (Relation contextComponentRelation : contextRootConfig.getEntityType().getChildRelations()) {
+			EntityType contextComponentEntityType = contextComponentRelation.getTarget();
+			EntityConfig<ContextComponent> contextComponentConfig = create(modelManager,
+					new Key<>(ContextComponent.class, contextType), contextComponentEntityType.getName(), true);
+			contextRootConfig.addChild(contextComponentConfig);
+			if (contextType.isTestEquipment()) {
+				for (Relation contextSensorRelation : contextComponentEntityType.getChildRelations()) {
+					EntityType contextSensorEntityType = contextSensorRelation.getTarget();
+					EntityConfig<ContextSensor> contextSensorConfig = create(modelManager,
+							new Key<>(ContextSensor.class), contextSensorEntityType.getName(), true);
+					contextComponentConfig.addChild(contextSensorConfig);
+				}
+			}
+		}
+		entityConfigRepository.register(contextRootConfig);
+	}
+
+	/**
+	 * Creates a new {@link EntityConfig}.
+	 *
+	 * @param <T>        The entity type.
+	 * @param key        Used as identifier.
+	 * @param typeName   Name of the associated {@link EntityType}.
+	 * @param appendName Flag indicates whether to append the entity types base name
+	 *                   to the MIME type.
+	 * @return The created {@code EntityConfig} is returned.
+	 */
+	private <T extends Entity> EntityConfig<T> create(ODSModelManager modelManager, Key<T> key, String typeName,
+			boolean appendName) {
+		EntityConfig<T> entityConfig = new EntityConfig<>(key);
+		ODSEntityType entityType = (ODSEntityType) modelManager.getEntityType(typeName);
+		entityConfig.setEntityType(entityType);
+		entityConfig.setMimeType(buildDefaultMimeType(entityType, appendName));
+		return entityConfig;
+	}
+
+	/**
+	 * Creates a default MIME type for given {@link EntityType}.
+	 *
+	 * @param entityType The {@code EntityType}.
+	 * @param appendName Flag indicates whether to append the entity types base name
+	 *                   to the MIME type.
+	 * @return The created MIME type {@code String} is returned.
+	 */
+	private String buildDefaultMimeType(ODSEntityType entityType, boolean appendName) {
+		StringBuilder sb = new StringBuilder();
+		sb.append("application/x-asam.");
+		sb.append(entityType.getBaseName().toLowerCase(Locale.ROOT));
+		if (appendName) {
+			sb.append('.').append(entityType.getName().toLowerCase(Locale.ROOT));
+		}
+		return sb.toString();
+	}
+}
diff --git a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXEntityManager.java b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXEntityManager.java
index d51665a..c42c71f 100644
--- a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXEntityManager.java
+++ b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/ATFXEntityManager.java
@@ -86,8 +86,7 @@
 	/**
 	 * Constructor.
 	 *
-	 * @param context
-	 *            The {@link ODSContext}.
+	 * @param context The {@link ODSContext}.
 	 */
 	public ATFXEntityManager(ATFXContext context) {
 		this.context = context;
@@ -122,7 +121,8 @@
 	 * {@inheritDoc}
 	 */
 	@Override
-	public <T extends Entity> List<T> load(Class<T> entityClass, Collection<String> instanceIDs) throws DataAccessException {
+	public <T extends Entity> List<T> load(Class<T> entityClass, Collection<String> instanceIDs)
+			throws DataAccessException {
 		return entityLoader.loadAll(new Key<>(entityClass), instanceIDs);
 	}
 
@@ -130,8 +130,8 @@
 	 * {@inheritDoc}
 	 */
 	@Override
-	public <T extends Entity> List<T> load(Class<T> entityClass, ContextType contextType, Collection<String> instanceIDs)
-			throws DataAccessException {
+	public <T extends Entity> List<T> load(Class<T> entityClass, ContextType contextType,
+			Collection<String> instanceIDs) throws DataAccessException {
 		return entityLoader.loadAll(new Key<>(entityClass, contextType), instanceIDs);
 	}
 
@@ -143,7 +143,7 @@
 		EntityType parentEntityType = odsModelManager.getEntityType(entityClass);
 		EntityType childEntityType = odsModelManager.getEntityType(child);
 
-		Optional<String> instanceID = Optional.empty();;
+		Optional<String> instanceID = Optional.empty();
 
 		if (child instanceof Channel && ChannelGroup.class.equals(entityClass)) {
 			// this covers the gap between channel and channel group via local column
@@ -152,15 +152,12 @@
 			Relation relLocalColumnToChannel = localColumnEntityType.getRelation(childEntityType);
 			Relation relLocalColumnToChannelGroup = localColumnEntityType.getRelation(parentEntityType);
 
-			Optional<String> localColumnID = queryService.createQuery()
-					.select(localColumnEntityType.getIDAttribute())
+			Optional<String> localColumnID = queryService.createQuery().select(localColumnEntityType.getIDAttribute())
 					.fetchSingleton(Filter.idOnly(relLocalColumnToChannel, child.getID()))
-					.map(r -> r.getRecord(localColumnEntityType))
-					.map(r -> r.getID());
+					.map(r -> r.getRecord(localColumnEntityType)).map(r -> r.getID());
 
 			if (localColumnID.isPresent()) {
-				instanceID = queryService.createQuery()
-						.select(relLocalColumnToChannelGroup.getAttribute())
+				instanceID = queryService.createQuery().select(relLocalColumnToChannelGroup.getAttribute())
 						.fetchSingleton(Filter.idOnly(localColumnEntityType, localColumnID.get()))
 						.map(r -> r.getRecord(localColumnEntityType))
 						.map(r -> r.getID(relLocalColumnToChannelGroup).get());
@@ -170,7 +167,7 @@
 
 			Query query = queryService.createQuery().select(relationToParent.getAttribute());
 			instanceID = query.fetchSingleton(Filter.idOnly(childEntityType, child.getID()))
-					.map(r -> r.getRecord(childEntityType)).map(r -> r.getID(relationToParent).get());			
+					.map(r -> r.getRecord(childEntityType)).map(r -> r.getID(relationToParent).get());
 		}
 
 		if (instanceID.isPresent()) {
@@ -196,18 +193,12 @@
 			throws DataAccessException {
 		EntityType entityType = odsModelManager.getEntityType(entityClass);
 		EntityType classificationType = odsModelManager.getEntityType(Classification.class);
-		EntityType statusEntityType =
-				odsModelManager.getEntityType(status.getTypeName());
+		EntityType statusEntityType = odsModelManager.getEntityType(status.getTypeName());
 
-		List<String> instanceIDs = queryService.createQuery()
-				.join(entityType, classificationType)
-				.join(classificationType, statusEntityType)
-				.selectID(entityType)
-				.fetch(Filter.and()
-						.id(statusEntityType, status.getID())
-						.name(entityType, pattern))
-				.stream().map(r ->
-				r.getRecord(entityType)).map(Record::getID).collect(Collectors.toList());
+		List<String> instanceIDs = queryService.createQuery().join(entityType, classificationType)
+				.join(classificationType, statusEntityType).selectID(entityType)
+				.fetch(Filter.and().id(statusEntityType, status.getID()).name(entityType, pattern)).stream()
+				.map(r -> r.getRecord(entityType)).map(Record::getID).collect(Collectors.toList());
 
 		return entityLoader.loadAll(new Key<>(entityClass), instanceIDs);
 	}
@@ -242,26 +233,19 @@
 			Relation relLocalColumnToChannel = localColumnEntityType.getRelation(childEntityType);
 			Relation relLocalColumnToChannelGroup = localColumnEntityType.getRelation(parentEntityType);
 
-			instanceIDs = queryService.createQuery()
-					.select(relLocalColumnToChannel.getAttribute())
-					.fetch(Filter.and().id(relLocalColumnToChannelGroup, parent.getID()).name(localColumnEntityType, pattern))
-					.stream()
-					.map(r -> r.getRecord(localColumnEntityType))
-					.map(r -> r.getID(relLocalColumnToChannel).get())
-					.collect(Collectors.toList());
+			instanceIDs = queryService.createQuery().select(relLocalColumnToChannel.getAttribute())
+					.fetch(Filter.and().id(relLocalColumnToChannelGroup, parent.getID()).name(localColumnEntityType,
+							pattern))
+					.stream().map(r -> r.getRecord(localColumnEntityType))
+					.map(r -> r.getID(relLocalColumnToChannel).get()).collect(Collectors.toList());
 
 			return entityLoader.loadAll(new Key<>(entityClass), instanceIDs);
-		}  else {
+		} else {
 			Relation relationToParent = childEntityType.getRelation(parentEntityType);
 
-			instanceIDs = queryService.createQuery()
-					.selectID(childEntityType)
-					.select(relationToParent.getAttribute())
-					.fetch(Filter.and().id(relationToParent, parent.getID()).name(childEntityType, pattern))
-					.stream()
-					.map(r -> r.getRecord(childEntityType))
-					.map(Record::getID)
-					.collect(Collectors.toList());
+			instanceIDs = queryService.createQuery().selectID(childEntityType).select(relationToParent.getAttribute())
+					.fetch(Filter.and().id(relationToParent, parent.getID()).name(childEntityType, pattern)).stream()
+					.map(r -> r.getRecord(childEntityType)).map(Record::getID).collect(Collectors.toList());
 		}
 
 		return entityLoader.loadAll(new Key<>(entityClass), instanceIDs);
@@ -314,23 +298,25 @@
 			EntityType entityType = odsModelManager.getEntityType(ContextRoot.class, contextType);
 			contextRootEntityTypes.put(contextType, entityType);
 
-			// openATFX does not support joins in queries, thus we have to retrive the ContextRoots one by one by ID
-			ElemId elemId = new ElemId(((ODSEntityType) contextDescribableEntityType).getODSID(), ODSConverter.toODSID(contextDescribable.getID()));
+			// openATFX does not support joins in queries, thus we have to retrive the
+			// ContextRoots one by one by ID
+			ElemId elemId = new ElemId(((ODSEntityType) contextDescribableEntityType).getODSID(),
+					ODSConverter.toODSID(contextDescribable.getID()));
 			try {
-				T_LONGLONG[] contextRootIds = odsModelManager.getApplElemAccess().getRelInst(
-						elemId,
+				T_LONGLONG[] contextRootIds = odsModelManager.getApplElemAccess().getRelInst(elemId,
 						contextDescribableEntityType.getRelation(entityType).getName());
 
 				if (contextRootIds != null && contextRootIds.length > 0) {
-					// There can only be one result per ContextType, thus we take the first one and ignore the rest
+					// There can only be one result per ContextType, thus we take the first one and
+					// ignore the rest
 					String instanceID = Long.toString(ODSConverter.fromODSLong(contextRootIds[0]));
 
 					contextRoots.put(contextType,
 							entityLoader.load(new Key<>(ContextRoot.class, contextType), instanceID));
 				}
 			} catch (AoException e) {
-				throw new DataAccessException("Cannot load contextRoot '" + entityType.getName() 
-					+ "' for ID '" + contextDescribable.getID() + "': " + e.reason, e);
+				throw new DataAccessException("Cannot load contextRoot '" + entityType.getName() + "' for ID '"
+						+ contextDescribable.getID() + "': " + e.reason, e);
 			}
 		}
 		return contextRoots;
@@ -357,12 +343,17 @@
 	}
 
 	/**
-	 * Retrives the ASAM paths for the given entities. The ASAM paths are prefixed with a servicename, in the form
+	 * Retrives the ASAM paths for the given entities. The ASAM paths are prefixed
+	 * with a servicename, in the form
 	 * <code>corbaloc:[iop|ssliop]:1.2@HOSTNAME:PORT/NameService/MDM.ASAM-ODS/</code>
-	 * @returns returns a map with the ASAM paths to the given entities. If a entity is not found in the ODS server
-	 * the entity is not included in the result map.
-	 * @throws DataAccessException if links could not be loaded for the given entities
-	 * @throws IllegalArgumentException if a the source or typeName of an entity is invalid
+	 * 
+	 * @returns returns a map with the ASAM paths to the given entities. If a entity
+	 *          is not found in the ODS server the entity is not included in the
+	 *          result map.
+	 * @throws DataAccessException      if links could not be loaded for the given
+	 *                                  entities
+	 * @throws IllegalArgumentException if a the source or typeName of an entity is
+	 *                                  invalid
 	 * @see org.eclipse.mdm.api.base.BaseEntityManager#getLinks(Collection)
 	 */
 	@Override
@@ -377,11 +368,10 @@
 			throw new DataAccessException("Could not load application structure! Reason: " + e.reason, e);
 		}
 
-		String serverRoot = context.getParameters().get(ODSContextFactory.PARAM_NAMESERVICE)
-				+ "/" + context.getParameters().get(ODSContextFactory.PARAM_SERVICENAME);
+		String serverRoot = context.getParameters().get(ODSContextFactory.PARAM_NAMESERVICE) + "/"
+				+ context.getParameters().get(ODSContextFactory.PARAM_SERVICENAME);
 
-		Map<String, List<Entity>> entitiesByTypeName = entities.stream()
-				.filter(e -> e.getTypeName() != null)
+		Map<String, List<Entity>> entitiesByTypeName = entities.stream().filter(e -> e.getTypeName() != null)
 				.collect(Collectors.groupingBy(Entity::getTypeName));
 
 		for (Map.Entry<String, List<Entity>> entry : entitiesByTypeName.entrySet()) {
@@ -397,9 +387,7 @@
 				for (InstanceElement ie : instances) {
 					String id = Long.toString(ODSConverter.fromODSLong(ie.getId()));
 					String asamPath = serverRoot + ie.getAsamPath();
-					entry.getValue().stream()
-							.filter(e -> e.getID().equals(id))
-							.findFirst()
+					entry.getValue().stream().filter(e -> e.getID().equals(id)).findFirst()
 							.ifPresent(e -> linkMap.put(e, asamPath));
 				}
 			} catch (AoException e) {
@@ -419,7 +407,8 @@
 
 		try {
 			T_LONGLONG[] instanceIds = context.getAoSession().getApplElemAccess().getRelInst(elemId, relationName);
-			List<String> instanceIDs = Stream.of(instanceIds).map(ODSConverter::fromODSLong).map(Object::toString).collect(Collectors.toList());
+			List<String> instanceIDs = Stream.of(instanceIds).map(ODSConverter::fromODSLong).map(Object::toString)
+					.collect(Collectors.toList());
 			return entityLoader.loadAll(new Key<>(relatedClass), instanceIDs);
 		} catch (AoException e) {
 			throw new DataAccessException("Cannot load related instances: " + e.reason, e);
diff --git a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/ATFXTransaction.java b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/ATFXTransaction.java
index 0b31960..5b878c9 100644
--- a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/ATFXTransaction.java
+++ b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/ATFXTransaction.java
@@ -85,14 +85,10 @@
 	/**
 	 * Constructor.
 	 *
-	 * @param parentModelManager
-	 *            Used to access the persistence.
-	 * @param entity
-	 *            Used for security checks
-	 * @param transfer
-	 *            The file transfer type.
-	 * @throws AoException
-	 *             Thrown if unable to start a co-session.
+	 * @param parentModelManager Used to access the persistence.
+	 * @param entity             Used for security checks
+	 * @param transfer           The file transfer type.
+	 * @throws AoException Thrown if unable to start a co-session.
 	 */
 	public ATFXTransaction(ATFXContext context) throws AoException {
 		this.context = context;
@@ -148,8 +144,8 @@
 				// Use set here, since measurement siblings point to the same
 				// context roots. Only create those ContextRoots that haven't been created yet:
 				create(measurements.stream().map(ContextRoot::of)
-						.collect(HashSet<ContextRoot>::new, Set<ContextRoot>::addAll, Set<ContextRoot>::addAll)
-						.stream().filter(cr -> !ODSUtils.isValidID(cr.getID())).collect(Collectors.toSet()));
+						.collect(HashSet<ContextRoot>::new, Set<ContextRoot>::addAll, Set<ContextRoot>::addAll).stream()
+						.filter(cr -> !ODSUtils.isValidID(cr.getID())).collect(Collectors.toSet()));
 			}
 
 			executeStatements(et -> new InsertStatement(this, et), entities);
@@ -240,8 +236,8 @@
 			}
 
 			/*
-			 * TODO: for any template that has to be deleted it is required to
-			 * ensure there are no links to it...
+			 * TODO: for any template that has to be deleted it is required to ensure there
+			 * are no links to it...
 			 */
 
 			executeStatements(et -> new DeleteStatement(this, et, true), filteredEntities);
@@ -336,8 +332,7 @@
 	 * reset to {@code 0} which indicates a virtual {@link Entity}, not yet
 	 * persisted, entity.
 	 *
-	 * @param core
-	 *            The {@code Core} of a newly written {@code Entity}.
+	 * @param core The {@code Core} of a newly written {@code Entity}.
 	 */
 	void addCreated(Core core) {
 		created.add(core);
@@ -347,8 +342,7 @@
 	 * Once {@link #commit()} is {@link Core#apply()} will be called to apply
 	 * modified {@link Value} contents and removed related entities.
 	 *
-	 * @param core
-	 *            The {@code Core} of an updated {@code Entity}.
+	 * @param core The {@code Core} of an updated {@code Entity}.
 	 */
 	void addModified(Core core) {
 		modified.add(core);
@@ -388,18 +382,13 @@
 	/**
 	 * Executes statements for given entities by using given statement factory.
 	 *
-	 * @param <T>
-	 *            The entity type.
-	 * @param statementFactory
-	 *            Used to create a new statement for a given {@link EntityType}.
-	 * @param entities
-	 *            The processed {@code Entity}s.
-	 * @throws AoException
-	 *             Thrown if the execution fails.
-	 * @throws DataAccessException
-	 *             Thrown if the execution fails.
-	 * @throws IOException
-	 *             Thrown if a file transfer operation fails.
+	 * @param <T>              The entity type.
+	 * @param statementFactory Used to create a new statement for a given
+	 *                         {@link EntityType}.
+	 * @param entities         The processed {@code Entity}s.
+	 * @throws AoException         Thrown if the execution fails.
+	 * @throws DataAccessException Thrown if the execution fails.
+	 * @throws IOException         Thrown if a file transfer operation fails.
 	 */
 	private <T extends Entity> void executeStatements(Function<EntityType, BaseStatement> statementFactory,
 			Collection<T> entities) throws AoException, DataAccessException, IOException {
diff --git a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/BaseStatement.java b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/BaseStatement.java
index 9955581..6c2ecbe 100644
--- a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/BaseStatement.java
+++ b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/BaseStatement.java
@@ -40,10 +40,8 @@
 	/**
 	 * Constructor.
 	 *
-	 * @param transaction
-	 *            The owning {@link ATFXTransaction}.
-	 * @param entityType
-	 *            The associated {@link EntityType}.
+	 * @param transaction The owning {@link ATFXTransaction}.
+	 * @param entityType  The associated {@link EntityType}.
 	 */
 	protected BaseStatement(ATFXTransaction transaction, EntityType entityType) {
 		this.transaction = transaction;
@@ -53,14 +51,10 @@
 	/**
 	 * Executes this statement for given {@link Entity}s.
 	 *
-	 * @param entities
-	 *            The processed {@code Entity}s.
-	 * @throws AoException
-	 *             Thrown if the execution fails.
-	 * @throws DataAccessException
-	 *             Thrown if the execution fails.
-	 * @throws IOException
-	 *             Thrown if a file transfer operation fails.
+	 * @param entities The processed {@code Entity}s.
+	 * @throws AoException         Thrown if the execution fails.
+	 * @throws DataAccessException Thrown if the execution fails.
+	 * @throws IOException         Thrown if a file transfer operation fails.
 	 */
 	public abstract void execute(Collection<Entity> entities) throws AoException, DataAccessException, IOException;
 
@@ -96,8 +90,7 @@
 	 * Returns the {@link ApplElemAccess}.
 	 *
 	 * @return The {@code ApplElemAccess} is returned.
-	 * @throws AoException
-	 *             Thrown in case of errors.
+	 * @throws AoException Thrown in case of errors.
 	 */
 	protected ApplElemAccess getApplElemAccess() throws AoException {
 		return transaction.getContext().getODSModelManager().getApplElemAccess();
diff --git a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/CatalogManager.java b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/CatalogManager.java
index 18c5338..ff5f6e2 100644
--- a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/CatalogManager.java
+++ b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/CatalogManager.java
@@ -37,9 +37,9 @@
 import org.eclipse.mdm.api.base.model.ContextType;
 import org.eclipse.mdm.api.base.model.Entity;
 import org.eclipse.mdm.api.base.model.Unit;
+import org.eclipse.mdm.api.base.query.ComparisonOperator;
 import org.eclipse.mdm.api.base.query.DataAccessException;
 import org.eclipse.mdm.api.base.query.Filter;
-import org.eclipse.mdm.api.base.query.ComparisonOperator;
 import org.eclipse.mdm.api.base.query.Query;
 import org.eclipse.mdm.api.base.query.QueryService;
 import org.eclipse.mdm.api.base.query.Result;
@@ -67,21 +67,18 @@
 	/**
 	 * Constructor.
 	 *
-	 * @param transaction
-	 *            The {@link ATFXTransaction}.
+	 * @param transaction The {@link ATFXTransaction}.
 	 */
 	CatalogManager(ATFXTransaction transaction) {
 		this.transaction = transaction;
 	}
 
 	/**
-	 * Creates for each given {@link CatalogComponent} a corresponding
-	 * application element including all required application relations.
+	 * Creates for each given {@link CatalogComponent} a corresponding application
+	 * element including all required application relations.
 	 *
-	 * @param catalogComponents
-	 *            The {@code CatalogComponent}s.
-	 * @throws AoException
-	 *             Thrown in case of errors.
+	 * @param catalogComponents The {@code CatalogComponent}s.
+	 * @throws AoException Thrown in case of errors.
 	 */
 	public void createCatalogComponents(Collection<CatalogComponent> catalogComponents) throws AoException {
 		Map<ContextType, List<CatalogComponent>> catalogComponentsByContextType = catalogComponents.stream()
@@ -136,10 +133,8 @@
 	 * Creates for each given {@link CatalogSensor} a corresponding application
 	 * element including all required application relations.
 	 *
-	 * @param catalogSensors
-	 *            The {@code CatalogSensor}s.
-	 * @throws AoException
-	 *             Thrown in case of errors.
+	 * @param catalogSensors The {@code CatalogSensor}s.
+	 * @throws AoException Thrown in case of errors.
 	 */
 	public void createCatalogSensors(Collection<CatalogSensor> catalogSensors) throws AoException {
 		Map<String, List<CatalogSensor>> catalogSensorsByCatalogComponent = catalogSensors.stream()
@@ -205,13 +200,11 @@
 	}
 
 	/**
-	 * Creates for each given {@link CatalogAttribute} a corresponding
-	 * application attribute.
+	 * Creates for each given {@link CatalogAttribute} a corresponding application
+	 * attribute.
 	 *
-	 * @param catalogAttributes
-	 *            The {@code CatalogAttribute}s.
-	 * @throws AoException
-	 *             Thrown in case of errors.
+	 * @param catalogAttributes The {@code CatalogAttribute}s.
+	 * @throws AoException Thrown in case of errors.
 	 */
 	public void createCatalogAttributes(Collection<CatalogAttribute> catalogAttributes) throws AoException {
 		Map<String, List<CatalogAttribute>> catalogAttributesByCatalogComponent = catalogAttributes.stream()
@@ -245,13 +238,10 @@
 	}
 
 	/**
-	 * Updates the application attribute for each given
-	 * {@link CatalogAttribute}.
+	 * Updates the application attribute for each given {@link CatalogAttribute}.
 	 *
-	 * @param catalogAttributes
-	 *            The {@code CatalogAttribute}s.
-	 * @throws AoException
-	 *             Thrown in case of errors.
+	 * @param catalogAttributes The {@code CatalogAttribute}s.
+	 * @throws AoException Thrown in case of errors.
 	 */
 	public void updateCatalogAttributes(List<CatalogAttribute> catalogAttributes) throws AoException {
 		Map<String, List<CatalogAttribute>> catalogAttributesByCatalogComponent = catalogAttributes.stream()
@@ -281,20 +271,16 @@
 
 	/**
 	 * Deletes the corresponding application element for each given
-	 * {@link CatalogComponent}. Deleting a {@code CatalogComponent} is only
-	 * allowed if it is not used in templates and all of its children could be
-	 * deleted. So at first it is tried to delete its {@link CatalogAttribute}s
-	 * and {@link CatalogSensor}s. On success it is ensured none of the given
-	 * {@code
+	 * {@link CatalogComponent}. Deleting a {@code CatalogComponent} is only allowed
+	 * if it is not used in templates and all of its children could be deleted. So
+	 * at first it is tried to delete its {@link CatalogAttribute}s and
+	 * {@link CatalogSensor}s. On success it is ensured none of the given {@code
 	 * CatalogComponent}s is used in templates. Finally the corresponding
 	 * application elements are deleted.
 	 *
-	 * @param catalogComponents
-	 *            The {@code CatalogComponent}s.
-	 * @throws AoException
-	 *             Thrown in case of errors.
-	 * @throws DataAccessException
-	 *             Thrown in case of errors.
+	 * @param catalogComponents The {@code CatalogComponent}s.
+	 * @throws AoException         Thrown in case of errors.
+	 * @throws DataAccessException Thrown in case of errors.
 	 */
 	public void deleteCatalogComponents(Collection<CatalogComponent> catalogComponents)
 			throws AoException, DataAccessException {
@@ -330,18 +316,15 @@
 
 	/**
 	 * Deletes the corresponding application element for each given
-	 * {@link CatalogSensor}. Deleting a {@code CatalogSensor} is only allowed
-	 * if it is not used in templates and all of its children could be deleted.
-	 * So at first it is tried to delete its {@link CatalogAttribute}s. On
-	 * success it is ensured none of the given {@code CatalogSensor}s is used in
-	 * templates. Finally the corresponding application elements are deleted.
+	 * {@link CatalogSensor}. Deleting a {@code CatalogSensor} is only allowed if it
+	 * is not used in templates and all of its children could be deleted. So at
+	 * first it is tried to delete its {@link CatalogAttribute}s. On success it is
+	 * ensured none of the given {@code CatalogSensor}s is used in templates.
+	 * Finally the corresponding application elements are deleted.
 	 *
-	 * @param catalogSensors
-	 *            The {@code CatalogSensor}s.
-	 * @throws AoException
-	 *             Thrown in case of errors.
-	 * @throws DataAccessException
-	 *             Thrown in case of errors.
+	 * @param catalogSensors The {@code CatalogSensor}s.
+	 * @throws AoException         Thrown in case of errors.
+	 * @throws DataAccessException Thrown in case of errors.
 	 */
 	public void deleteCatalogSensors(Collection<CatalogSensor> catalogSensors) throws AoException, DataAccessException {
 		List<CatalogAttribute> attributes = new ArrayList<>();
@@ -373,17 +356,14 @@
 
 	/**
 	 * Deletes the corresponding application attributes for each given
-	 * {@link CatalogAttribute}. Deleting a {@code CatalogAttribute} is only
-	 * allowed if it is not used in templates. So at first it is ensured none of
-	 * the given {@code CatalogAttribute}s is used in templates and finally the
-	 * corresponding application attributes are deleted.
+	 * {@link CatalogAttribute}. Deleting a {@code CatalogAttribute} is only allowed
+	 * if it is not used in templates. So at first it is ensured none of the given
+	 * {@code CatalogAttribute}s is used in templates and finally the corresponding
+	 * application attributes are deleted.
 	 *
-	 * @param catalogAttributes
-	 *            The {@code CatalogAttribute}s.
-	 * @throws AoException
-	 *             Thrown in case of errors.
-	 * @throws DataAccessException
-	 *             Thrown in case of errors.
+	 * @param catalogAttributes The {@code CatalogAttribute}s.
+	 * @throws AoException         Thrown in case of errors.
+	 * @throws DataAccessException Thrown in case of errors.
 	 */
 	public void deleteCatalogAttributes(Collection<CatalogAttribute> catalogAttributes)
 			throws AoException, DataAccessException {
@@ -427,18 +407,15 @@
 
 	/**
 	 * Creates a new {@link ApplicationElement} with given name and
-	 * {@link BaseElement}. The returned {@code ApplicationElement} will be
-	 * created with the three mandatory {@link ApplicationAttribute}s for 'Id',
-	 * 'Name' and 'MimeType'.
+	 * {@link BaseElement}. The returned {@code ApplicationElement} will be created
+	 * with the three mandatory {@link ApplicationAttribute}s for 'Id', 'Name' and
+	 * 'MimeType'.
 	 *
-	 * @param name
-	 *            The name of the application element.
-	 * @param baseElement
-	 *            The {@code BaseElement} the created {@code
+	 * @param name        The name of the application element.
+	 * @param baseElement The {@code BaseElement} the created {@code
 	 * 		ApplicationElement} will be derived from.
 	 * @return The created {@code ApplicationElement} is returned.
-	 * @throws AoException
-	 *             Thrown in case of errors.
+	 * @throws AoException Thrown in case of errors.
 	 */
 	private ApplicationElement createApplicationElement(String name, BaseElement baseElement) throws AoException {
 		ApplicationElement applicationElement = getApplicationStructure().createElement(baseElement);
@@ -477,8 +454,7 @@
 	 * Returns the cached {@link ApplicationStructure}.
 	 *
 	 * @return The {@code ApplicationStructure} is returned.
-	 * @throws AoException
-	 *             Thrown if unable to access the {@code
+	 * @throws AoException Thrown if unable to access the {@code
 	 * 		ApplicationStructure}.
 	 */
 	private ApplicationStructure getApplicationStructure() throws AoException {
@@ -493,8 +469,7 @@
 	 * Returns the cached {@link BaseStructure}.
 	 *
 	 * @return The {@code BaseStructure} is returned.
-	 * @throws AoException
-	 *             Thrown if unable to access the {@code
+	 * @throws AoException Thrown if unable to access the {@code
 	 * 		BaseStructure}.
 	 */
 	private BaseStructure getBaseStructure() throws AoException {
@@ -508,15 +483,12 @@
 	/**
 	 * Checks whether given {@link Entity}s are referenced in templates.
 	 *
-	 * @param entities
-	 *            The checked entities ({@link CatalogComponent},
-	 *            {@link CatalogSensor} or {@link CatalogAttribute}).
+	 * @param entities The checked entities ({@link CatalogComponent},
+	 *                 {@link CatalogSensor} or {@link CatalogAttribute}).
 	 * @return Returns {@code true} if at least one entity is referenced in a
 	 *         template.
-	 * @throws AoException
-	 *             Thrown on errors.
-	 * @throws DataAccessException
-	 *             Thrown on errors.
+	 * @throws AoException         Thrown on errors.
+	 * @throws DataAccessException Thrown on errors.
 	 */
 	private boolean areReferencedInTemplates(Collection<? extends Entity> entities)
 			throws AoException, DataAccessException {
@@ -528,11 +500,11 @@
 			EntityType target = transaction.getModelManager().getEntityType(source.getName().replace("Cat", "Tpl"));
 
 			Query query = transaction.getContext().getQueryService()
-					.orElseThrow(() -> new ServiceNotProvidedException(QueryService.class))
-					.createQuery().selectID(target).join(source, target);
+					.orElseThrow(() -> new ServiceNotProvidedException(QueryService.class)).createQuery()
+					.selectID(target).join(source, target);
 
-			List<Result> results = query.fetch(Filter.and()
-					.add(ComparisonOperator.IN_SET.create(source.getIDAttribute(), collectInstanceIDs(entry.getValue()))));
+			List<Result> results = query.fetch(Filter.and().add(
+					ComparisonOperator.IN_SET.create(source.getIDAttribute(), collectInstanceIDs(entry.getValue()))));
 			if (results.size() > 0) {
 				return true;
 			}
@@ -544,8 +516,7 @@
 	/**
 	 * Collect the instance IDs of all given {@link Entity}s.
 	 *
-	 * @param entities
-	 *            The {@link Entity}s.
+	 * @param entities The {@link Entity}s.
 	 * @return The instance IDs a {@code String[]} are turned.
 	 */
 	private static String[] collectInstanceIDs(List<Entity> entities) {
@@ -561,8 +532,7 @@
 	/**
 	 * Returns the parent name for given {@link CatalogAttribute}.
 	 *
-	 * @param catalogAttribute
-	 *            The {@code CatalogAttribute}.
+	 * @param catalogAttribute The {@code CatalogAttribute}.
 	 * @return The parent name is returned.
 	 */
 	private static String getParentName(CatalogAttribute catalogAttribute) {
diff --git a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/DeleteStatement.java b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/DeleteStatement.java
index a03f137..ba3784d 100644
--- a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/DeleteStatement.java
+++ b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/DeleteStatement.java
@@ -65,13 +65,10 @@
 	/**
 	 * Constructor.
 	 *
-	 * @param transaction
-	 *            The owning {@link ATFXTransaction}.
-	 * @param entityType
-	 *            The associated {@link EntityType}.
-	 * @param useAutoDelete
-	 *            If {@code true} child relations of {@link Measurement}
-	 *            entities are not followed.
+	 * @param transaction   The owning {@link ATFXTransaction}.
+	 * @param entityType    The associated {@link EntityType}.
+	 * @param useAutoDelete If {@code true} child relations of {@link Measurement}
+	 *                      entities are not followed.
 	 */
 	DeleteStatement(ATFXTransaction transaction, EntityType entityType, boolean useAutoDelete) {
 		super(transaction, entityType);
@@ -93,21 +90,16 @@
 	}
 
 	/**
-	 * Recursively follows child relations of given entities and deletes all
-	 * child entities before deleting parent entities.
+	 * Recursively follows child relations of given entities and deletes all child
+	 * entities before deleting parent entities.
 	 *
-	 * @param entityType
-	 *            {@link EntityType} of the deleted entities.
-	 * @param instanceIDs
-	 *            Instance IDs of entities which have to be deleted.
-	 * @param ignoreSiblings
-	 *            Is it required to check whether {@link Measurement} siblings
-	 *            share a common {@link ContextRoot}s.
+	 * @param entityType     {@link EntityType} of the deleted entities.
+	 * @param instanceIDs    Instance IDs of entities which have to be deleted.
+	 * @param ignoreSiblings Is it required to check whether {@link Measurement}
+	 *                       siblings share a common {@link ContextRoot}s.
 	 * @return Returns the total number of deleted instances.
-	 * @throws AoException
-	 *             Thrown if unable to delete entities.
-	 * @throws DataAccessException
-	 *             Thrown if unable to query child entities.
+	 * @throws AoException         Thrown if unable to delete entities.
+	 * @throws DataAccessException Thrown if unable to query child entities.
 	 */
 	private int delete(EntityType entityType, Collection<String> instanceIDs, boolean ignoreSiblings)
 			throws AoException, DataAccessException {
@@ -222,11 +214,10 @@
 	}
 
 	/**
-	 * Converts given {@code Collection} of instance IDs to ODS a
-	 * {@link T_LONGLONG} array.
+	 * Converts given {@code Collection} of instance IDs to ODS a {@link T_LONGLONG}
+	 * array.
 	 *
-	 * @param instanceIDs
-	 *            The instance IDs.
+	 * @param instanceIDs The instance IDs.
 	 * @return The corresponding ODS {@code T_LONGLONG[]} is returned.
 	 */
 	private T_LONGLONG[] toODSIDs(Collection<String> instanceIDs) {
diff --git a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/InsertStatement.java b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/InsertStatement.java
index 5e49894..875e053 100644
--- a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/InsertStatement.java
+++ b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/InsertStatement.java
@@ -71,10 +71,8 @@
 	/**
 	 * Constructor.
 	 *
-	 * @param transaction
-	 *            The owning {@link ATFXTransaction}.
-	 * @param entityType
-	 *            The associated {@link EntityType}.
+	 * @param transaction The owning {@link ATFXTransaction}.
+	 * @param entityType  The associated {@link EntityType}.
 	 */
 	InsertStatement(ATFXTransaction transaction, EntityType entityType) {
 		super(transaction, entityType);
@@ -94,14 +92,10 @@
 	/**
 	 * Executes this statement for given {@link Core}s.
 	 *
-	 * @param cores
-	 *            The processed {@code Core}s.
-	 * @throws AoException
-	 *             Thrown if the execution fails.
-	 * @throws DataAccessException
-	 *             Thrown if the execution fails.
-	 * @throws IOException
-	 *             Thrown if a file transfer operation fails.
+	 * @param cores The processed {@code Core}s.
+	 * @throws AoException         Thrown if the execution fails.
+	 * @throws DataAccessException Thrown if the execution fails.
+	 * @throws IOException         Thrown if a file transfer operation fails.
 	 */
 	public void executeWithCores(Collection<Core> cores) throws AoException, DataAccessException, IOException {
 		cores.forEach(this::readEntityCore);
@@ -109,17 +103,14 @@
 	}
 
 	/**
-	 * Uploads new {@link FileLink}s, adjusts sort indices for new
-	 * {@link TestStep} entities and writes collected insertion data at once.
-	 * Once new entities are written their children are created by delegation to
-	 * the {@link ATFXTransaction}.
+	 * Uploads new {@link FileLink}s, adjusts sort indices for new {@link TestStep}
+	 * entities and writes collected insertion data at once. Once new entities are
+	 * written their children are created by delegation to the
+	 * {@link ATFXTransaction}.
 	 *
-	 * @throws AoException
-	 *             Thrown if the execution fails.
-	 * @throws DataAccessException
-	 *             Thrown if the execution fails.
-	 * @throws IOException
-	 *             Thrown if a file transfer operation fails.
+	 * @throws AoException         Thrown if the execution fails.
+	 * @throws DataAccessException Thrown if the execution fails.
+	 * @throws IOException         Thrown if a file transfer operation fails.
 	 */
 	private void execute() throws AoException, DataAccessException, IOException {
 		List<AIDNameValueSeqUnitId> anvsuList = new ArrayList<>();
@@ -167,8 +158,7 @@
 	 * <li>collect child entities for recursive creation</li>
 	 * </ul>
 	 *
-	 * @param core
-	 *            The {@code Core}.
+	 * @param core The {@code Core}.
 	 */
 	private void readEntityCore(Core core) {
 		if (!core.getTypeName().equals(getEntityType().getName())) {
@@ -219,8 +209,7 @@
 	/**
 	 * Overwrites empty foreign key {@link Value} containers.
 	 *
-	 * @param relatedEntities
-	 *            The related {@link Entity}s.
+	 * @param relatedEntities The related {@link Entity}s.
 	 */
 	private void setRelationIDs(Collection<Entity> relatedEntities) {
 		for (Entity relatedEntity : relatedEntities) {
@@ -239,11 +228,10 @@
 	}
 
 	/**
-	 * Adjusts missing sort indices for {@link TestStep}s by querying last used
-	 * max sort index.
+	 * Adjusts missing sort indices for {@link TestStep}s by querying last used max
+	 * sort index.
 	 *
-	 * @throws DataAccessException
-	 *             Thrown if unable to query used sort indices.
+	 * @throws DataAccessException Thrown if unable to query used sort indices.
 	 */
 	private void adjustMissingSortIndices() throws DataAccessException {
 		EntityType testStep = getEntityType();
@@ -252,13 +240,13 @@
 
 		Attribute attrSortIndex = testStep.getAttribute(Sortable.ATTR_SORT_INDEX);
 		Query query = getQueryService().createQuery().select(parentRelation.getAttribute())
-				.select(attrSortIndex, Aggregation.MAXIMUM)
-				.group(parentRelation.getAttribute());
+				.select(attrSortIndex, Aggregation.MAXIMUM).group(parentRelation.getAttribute());
 
 		Filter filter = Filter.idsOnly(parentRelation, sortIndexTestSteps.keySet());
 		for (Result result : query.fetch(filter)) {
 			Record record = result.getRecord(testStep);
-			int sortIndex = (Integer) record.getValues().get(ODSConverter.getColumnName(attrSortIndex, Aggregation.MAXIMUM)).extract();
+			int sortIndex = (Integer) record.getValues()
+					.get(ODSConverter.getColumnName(attrSortIndex, Aggregation.MAXIMUM)).extract();
 			sortIndexTestSteps.remove(record.getID(parentRelation).get()).setIndices(sortIndex + 1);
 		}
 
@@ -276,8 +264,7 @@
 		/**
 		 * Assigns sort indices to {@link Core}s starting at given index.
 		 *
-		 * @param startIndex
-		 *            The start index.
+		 * @param startIndex The start index.
 		 */
 		private void setIndices(int startIndex) {
 			int index = startIndex;
diff --git a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/UpdateStatement.java b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/UpdateStatement.java
index 173f4b6..9d8a006 100644
--- a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/UpdateStatement.java
+++ b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/UpdateStatement.java
@@ -63,12 +63,10 @@
 	/**
 	 * Constructor.
 	 *
-	 * @param transaction
-	 *            The owning {@link ATFXTransaction}.
-	 * @param entityType
-	 *            The associated {@link EntityType}.
-	 * @param ignoreChildren
-	 *            If {@code true}, then child entities won't be processed.
+	 * @param transaction    The owning {@link ATFXTransaction}.
+	 * @param entityType     The associated {@link EntityType}.
+	 * @param ignoreChildren If {@code true}, then child entities won't be
+	 *                       processed.
 	 */
 	UpdateStatement(ATFXTransaction transaction, EntityType entityType, boolean ignoreChildren) {
 		super(transaction, entityType);
@@ -135,10 +133,8 @@
 	 * <li>collect child entities for recursive create/update/delete</li>
 	 * </ul>
 	 *
-	 * @param core
-	 *            The {@code Core}.
-	 * @throws DataAccessException
-	 *             Thrown in case of errors.
+	 * @param core The {@code Core}.
+	 * @throws DataAccessException Thrown in case of errors.
 	 */
 	private void readEntityCore(Core core) throws DataAccessException {
 		if (!core.getTypeName().equals(getEntityType().getName())) {
@@ -175,8 +171,7 @@
 	/**
 	 * Collects child entities for recursive processing.
 	 *
-	 * @param core
-	 *            The {@link Core}.
+	 * @param core The {@link Core}.
 	 */
 	private void collectChildEntities(Core core) {
 		if (ignoreChildren) {
@@ -185,8 +180,7 @@
 
 		for (Entry<Class<? extends Deletable>, List<? extends Deletable>> entry : core.getChildrenStore().getCurrent()
 				.entrySet()) {
-			Map<Boolean, List<Entity>> partition = entry.getValue()
-					.stream()
+			Map<Boolean, List<Entity>> partition = entry.getValue().stream()
 					.collect(Collectors.partitioningBy(e -> ODSUtils.isValidID(e.getID())));
 			List<Entity> virtualEntities = partition.get(Boolean.FALSE);
 			if (virtualEntities != null && !virtualEntities.isEmpty()) {
@@ -209,8 +203,7 @@
 	/**
 	 * Overwrites empty foreign key {@link Value} containers.
 	 *
-	 * @param relatedEntities
-	 *            The related {@link Entity}s.
+	 * @param relatedEntities The related {@link Entity}s.
 	 */
 	private void setRelationIDs(Collection<Entity> relatedEntities) {
 		for (Entity relatedEntity : relatedEntities) {
diff --git a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/WriteRequestHandler.java b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/WriteRequestHandler.java
index e9ec699..3504534 100644
--- a/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/WriteRequestHandler.java
+++ b/org.eclipse.mdm.api.atfxadapter/src/main/java/org/eclipse/mdm/api/atfxadapter/transaction/WriteRequestHandler.java
@@ -55,8 +55,7 @@
 	/**
 	 * Constructor.
 	 *
-	 * @param transaction
-	 *            The owning {@link ATFXTransaction}.
+	 * @param transaction The owning {@link ATFXTransaction}.
 	 */
 	public WriteRequestHandler(ATFXTransaction transaction) {
 		localColumnEntityType = transaction.getModelManager().getEntityType("LocalColumn");
@@ -66,8 +65,7 @@
 	/**
 	 * Adds given {@link WriteRequest} to be processed.
 	 *
-	 * @param writeRequest
-	 *            The {@code WriteRequest}.
+	 * @param writeRequest The {@code WriteRequest}.
 	 */
 	public void addRequest(WriteRequest writeRequest) {
 		cores.add(createCore(writeRequest));
@@ -76,23 +74,19 @@
 	/**
 	 * Imports given mass data configurations.
 	 *
-	 * @throws AoException
-	 *             Thrown if the execution fails.
-	 * @throws DataAccessException
-	 *             Thrown if the execution fails.
-	 * @throws IOException
-	 *             Thrown if a file transfer operation fails.
+	 * @throws AoException         Thrown if the execution fails.
+	 * @throws DataAccessException Thrown if the execution fails.
+	 * @throws IOException         Thrown if a file transfer operation fails.
 	 */
 	public void execute() throws AoException, DataAccessException, IOException {
 		insertStatement.executeWithCores(cores);
 	}
 
 	/**
-	 * Reads given {@link WriteRequest} and prepares a corresponding
-	 * {@link Core} for import.
+	 * Reads given {@link WriteRequest} and prepares a corresponding {@link Core}
+	 * for import.
 	 *
-	 * @param writeRequest
-	 *            The mass data configuration.
+	 * @param writeRequest The mass data configuration.
 	 * @return The created {@code Core} is returned.
 	 */
 	private Core createCore(WriteRequest writeRequest) {
@@ -116,10 +110,14 @@
 			values.put(AE_LC_ATTR_VALUES,
 					valueType.create(AE_LC_ATTR_VALUES, unitName, true, writeRequest.getValues()));
 
-			// OpenATFX issue: For "implicit" columns, if no value for the GenerationParameters attribute is present,
-			// it is attempted to transfer the local column values (through which the generation parameters are
-			// available in these cases) to the GenerationParameters attribute without converting them to the 
-			// correct DS_DOUBLE data type first (unless it is a DOUBLE or LONG column), resulting in an exception.
+			// OpenATFX issue: For "implicit" columns, if no value for the
+			// GenerationParameters attribute is present,
+			// it is attempted to transfer the local column values (through which the
+			// generation parameters are
+			// available in these cases) to the GenerationParameters attribute without
+			// converting them to the
+			// correct DS_DOUBLE data type first (unless it is a DOUBLE or LONG column),
+			// resulting in an exception.
 			// Hence, supply correctly converted generation parameters as a workaround:
 			if (writeRequest.getSequenceRepresentation().isImplicit()) {
 				Object genParamValues = writeRequest.getValues();
diff --git a/org.eclipse.mdm.api.atfxadapter/src/test/java/org/eclipse/mdm/api/atfxadapter/AtfxAdaperTest.java b/org.eclipse.mdm.api.atfxadapter/src/test/java/org/eclipse/mdm/api/atfxadapter/AtfxAdaperTest.java
index f2dd884..3043a16 100644
--- a/org.eclipse.mdm.api.atfxadapter/src/test/java/org/eclipse/mdm/api/atfxadapter/AtfxAdaperTest.java
+++ b/org.eclipse.mdm.api.atfxadapter/src/test/java/org/eclipse/mdm/api/atfxadapter/AtfxAdaperTest.java
@@ -47,9 +47,7 @@
 
 	@BeforeClass
 	public static void init() throws ConnectionException {
-		Map<String, String> map = ImmutableMap.of(
-				"atfxfile", ATFX_FILE,
-				"freetext.active", "false");
+		Map<String, String> map = ImmutableMap.of("atfxfile", ATFX_FILE, "freetext.active", "false");
 
 		context = new ATFXContextFactory().connect(map);
 	}
@@ -63,7 +61,8 @@
 	public void testLoadLoggedOnUser() {
 		EntityManager em = context.getEntityManager().get();
 
-		assertThat(em.loadLoggedOnUser()).isNotNull();;
+		assertThat(em.loadLoggedOnUser()).isNotNull();
+		;
 	}
 
 	@org.junit.Test
@@ -73,8 +72,6 @@
 		assertThat(em.loadEnvironment().getName()).isEqualTo("MDM");
 	}
 
-
-
 	@org.junit.Test
 	public void testLoadAllProjects() {
 
@@ -112,7 +109,8 @@
 		EntityManager em = context.getEntityManager().get();
 		Measurement meaResult = em.loadAll(Measurement.class).get(0);
 
-		assertThat(em.loadParent(meaResult, TestStep.class).get()).extracting(TestStep::getName).contains("PBN_UNECE_R51_Right_Acc_70");
+		assertThat(em.loadParent(meaResult, TestStep.class).get()).extracting(TestStep::getName)
+				.contains("PBN_UNECE_R51_Right_Acc_70");
 	}
 
 	@org.junit.Test
@@ -121,18 +119,19 @@
 		EntityManager em = context.getEntityManager().get();
 		Test test = em.loadAll(Test.class).get(0);
 
-		assertThat(em.loadChildren(test, TestStep.class).get(0)).extracting(TestStep::getName).contains("PBN_UNECE_R51_Right_Acc_70");
+		assertThat(em.loadChildren(test, TestStep.class).get(0)).extracting(TestStep::getName)
+				.contains("PBN_UNECE_R51_Right_Acc_70");
 	}
 
-
 	@org.junit.Test
 	public void testLoadChildrenForChannelGroup() {
 
 		EntityManager em = context.getEntityManager().get();
 		ChannelGroup channelGroup = em.loadAll(ChannelGroup.class).get(0);
 
-		assertThat(em.loadChildren(channelGroup, Channel.class)).extracting(Channel::getName)
-		.contains("X-Axis", "CHANNEL01", "CHANNEL02", "CHANNEL03", "CHANNEL04", "CHANNEL05", "CHANNEL06", "CHANNEL07", "CHANNEL08", "CHANNEL09", "CHANNEL10");
+		assertThat(em.loadChildren(channelGroup, Channel.class)).extracting(Channel::getName).contains("X-Axis",
+				"CHANNEL01", "CHANNEL02", "CHANNEL03", "CHANNEL04", "CHANNEL05", "CHANNEL06", "CHANNEL07", "CHANNEL08",
+				"CHANNEL09", "CHANNEL10");
 	}
 
 	@org.junit.Test
@@ -142,11 +141,13 @@
 		ChannelGroup channelGroup = em.loadAll(ChannelGroup.class).get(0);
 
 		Assertions.assertThatThrownBy(() -> em.loadChildren(channelGroup, Channel.class, "*Axis"))
-		.isInstanceOf(DataAccessException.class)
-		.hasMessageContaining("not supported");
+				.isInstanceOf(DataAccessException.class).hasMessageContaining("not supported");
 
-		//		assertThat(em.loadChildren(channelGroup, Channel.class, "*Axis")).extracting(Channel::getName)
-		//			.contains("X-Axis", "CHANNEL01", "CHANNEL02", "CHANNEL03", "CHANNEL04", "CHANNEL05", "CHANNEL06", "CHANNEL07", "CHANNEL08", "CHANNEL09", "CHANNEL10");
+		// assertThat(em.loadChildren(channelGroup, Channel.class,
+		// "*Axis")).extracting(Channel::getName)
+		// .contains("X-Axis", "CHANNEL01", "CHANNEL02", "CHANNEL03", "CHANNEL04",
+		// "CHANNEL05", "CHANNEL06", "CHANNEL07", "CHANNEL08", "CHANNEL09",
+		// "CHANNEL10");
 	}
 
 	@org.junit.Test
@@ -156,7 +157,7 @@
 		Channel channel = em.loadAll(Channel.class).get(0);
 
 		assertThat(em.loadParent(channel, ChannelGroup.class).get()).extracting(ChannelGroup::getName)
-		.contains("Channel");
+				.contains("Channel");
 	}
 
 	@org.junit.Test
@@ -172,8 +173,8 @@
 
 		EntityManager em = context.getEntityManager().get();
 
-		assertThat(em.loadAll(Channel.class)).extracting(Channel::getName)
-		.contains("X-Axis", "CHANNEL01", "CHANNEL02", "CHANNEL03", "CHANNEL04", "CHANNEL05", "CHANNEL06", "CHANNEL07", "CHANNEL08", "CHANNEL09", "CHANNEL10");
+		assertThat(em.loadAll(Channel.class)).extracting(Channel::getName).contains("X-Axis", "CHANNEL01", "CHANNEL02",
+				"CHANNEL03", "CHANNEL04", "CHANNEL05", "CHANNEL06", "CHANNEL07", "CHANNEL08", "CHANNEL09", "CHANNEL10");
 	}
 
 	@org.junit.Test
@@ -185,16 +186,14 @@
 		assertThat(measurements).hasSize(1);
 
 		Map<ContextType, ContextRoot> context = em.loadContexts(measurements.get(0));
-		assertThat(context.get(ContextType.UNITUNDERTEST).getContextComponents())
-		.extracting(cc -> cc.getName())
-		.contains("FL_tyre");
+		assertThat(context.get(ContextType.UNITUNDERTEST).getContextComponents()).extracting(cc -> cc.getName())
+				.contains("FL_tyre");
 
-		assertThat(context.get(ContextType.UNITUNDERTEST).getContextComponents().get(0).getValues())
-		.hasSize(7)
-		.containsEntry("Name", ValueType.STRING.create("Name", "FL_tyre"))
-		.containsEntry("axle", ValueType.SHORT.create("axle", (short) 1))
-		.containsEntry("side", ValueType.STRING.create("side", "Left"))
-		.containsEntry("manufacturer", ValueType.STRING.create("manufacturer", "Tunnelsand"));
+		assertThat(context.get(ContextType.UNITUNDERTEST).getContextComponents().get(0).getValues()).hasSize(7)
+				.containsEntry("Name", ValueType.STRING.create("Name", "FL_tyre"))
+				.containsEntry("axle", ValueType.SHORT.create("axle", (short) 1))
+				.containsEntry("side", ValueType.STRING.create("side", "Left"))
+				.containsEntry("manufacturer", ValueType.STRING.create("manufacturer", "Tunnelsand"));
 
 	}
 
@@ -205,7 +204,8 @@
 		List<ChannelGroup> listCg = em.loadAll(ChannelGroup.class);
 		assertThat(listCg).hasSize(1);
 
-		List<MeasuredValues> values = em.readMeasuredValues(ReadRequest.create(listCg.get(0)).allChannels().allValues());
+		List<MeasuredValues> values = em
+				.readMeasuredValues(ReadRequest.create(listCg.get(0)).allChannels().allValues());
 		assertThat(values).extracting(mv -> mv.getLength()).containsOnly(3001);
 	}
 }
diff --git a/org.eclipse.mdm.apicopy/build.gradle b/org.eclipse.mdm.apicopy/build.gradle
index 05e2110..686fa8b 100644
--- a/org.eclipse.mdm.apicopy/build.gradle
+++ b/org.eclipse.mdm.apicopy/build.gradle
@@ -21,10 +21,14 @@
 	runtime 'ch.qos.logback:logback-classic:1.2.3'
 
 	// MDM5 API
-	compile project(':org.eclipse.mdm.api.atfxadapter')
 	compile project(':org.eclipse.mdm.application')
 	compile project(':org.eclipse.mdm.businessobjects')
 
+	/* ODSAdapter is only needed for workaround in org.eclipse.mdm.apicopy.ClassificationUtil.
+	 * Can be removed when classifications are written with org.eclipse.mdm.api.default
+	 */
+	compile "org.eclipse.mdm:org.eclipse.mdm.api.odsadapter:${version}"
+
 	testCompile 'junit:junit:4.12'
 	testCompile 'org.mockito:mockito-core:2.13.0'
 	testCompile 'org.assertj:assertj-core:3.6.2'
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/ApiCopyServiceImpl.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/ApiCopyServiceImpl.java
index 448bd6c..0828c40 100644
--- a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/ApiCopyServiceImpl.java
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/ApiCopyServiceImpl.java
@@ -18,7 +18,7 @@
 import org.eclipse.mdm.api.dflt.ApplicationContext;
 
 @Stateless
-public class ApiCopyServiceImpl implements ApiCopyService{
+public class ApiCopyServiceImpl implements ApiCopyService {
 
 	@Override
 	public ApiCopyTask newApiCopyTask(ApplicationContext src, ApplicationContext dst) {
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/AtfxExportTask.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/AtfxExportTask.java
index 40d4459..7a987aa 100644
--- a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/AtfxExportTask.java
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/AtfxExportTask.java
@@ -44,7 +44,6 @@
 public class AtfxExportTask extends AtfxTransferBase implements ApiCopyTask {
 	private static final Logger LOG = LoggerFactory.getLogger(AtfxExportTask.class);
 
-
 	public AtfxExportTask(ApplicationContext src, ApplicationContext dst) {
 		super(src, dst);
 	}
@@ -76,15 +75,15 @@
 
 	private Entity copyEntity(Entity entity, boolean recursive, Transaction transaction) {
 		if (entity instanceof Project) {
-			return (Project) copyProject((Project) entity, recursive, transaction);
+			return copyProject((Project) entity, recursive, transaction);
 		} else if (entity instanceof Pool) {
-			return (Pool) copyPool((Pool) entity, recursive, transaction);
+			return copyPool((Pool) entity, recursive, transaction);
 		} else if (entity instanceof Test) {
-			return (Test) copyTest((Test) entity, recursive, transaction);
+			return copyTest((Test) entity, recursive, transaction);
 		} else if (entity instanceof TestStep) {
-			return (TestStep) copyTestStep((TestStep) entity, recursive, transaction);
+			return copyTestStep((TestStep) entity, recursive, transaction);
 		} else if (entity instanceof Measurement) {
-			return (Measurement) copyMeasurement((Measurement) entity, recursive, transaction);
+			return copyMeasurement((Measurement) entity, recursive, transaction);
 		} else {
 			throw new ApiCopyException("Unsupported entity: '" + entity.getClass().getName() + "'");
 		}
@@ -106,7 +105,8 @@
 			mapSrcDstEntities.put(ehSrc, ehDst);
 
 			if (recursive) {
-				entityManagerSrc.loadChildren(projectSrc, Pool.class).forEach(pool -> copyPool(pool, recursive, transaction));
+				entityManagerSrc.loadChildren(projectSrc, Pool.class)
+						.forEach(pool -> copyPool(pool, recursive, transaction));
 			}
 		}
 
@@ -133,7 +133,8 @@
 			mapSrcDstEntities.put(ehSrc, ehDst);
 
 			if (recursive) {
-				entityManagerSrc.loadChildren(poolSrc, Test.class).forEach(test -> copyTest(test, recursive, transaction));
+				entityManagerSrc.loadChildren(poolSrc, Test.class)
+						.forEach(test -> copyTest(test, recursive, transaction));
 			}
 		}
 
@@ -161,7 +162,7 @@
 
 			if (recursive) {
 				entityManagerSrc.loadChildren(testSrc, TestStep.class)
-					.forEach(testStep -> copyTestStep(testStep, recursive, transaction));
+						.forEach(testStep -> copyTestStep(testStep, recursive, transaction));
 			}
 		}
 
@@ -189,7 +190,7 @@
 
 			if (recursive) {
 				entityManagerSrc.loadChildren(testStepSrc, Measurement.class)
-					.forEach(measurement -> copyMeasurement(measurement, recursive, transaction));
+						.forEach(measurement -> copyMeasurement(measurement, recursive, transaction));
 			}
 		}
 
@@ -230,9 +231,8 @@
 				for (ChannelGroup channelGroup : entityManagerSrc.loadChildren(measurementSrc, ChannelGroup.class)) {
 					ChannelGroup channelGroupDst = copyChannelGroup(channelGroup, transaction);
 
-					for (MeasuredValues measuredValues : entityManagerSrc
-							.readMeasuredValues(ReadRequest.create(channelGroup)
-							.valuesMode(ValuesMode.STORAGE).allChannels().allValues())) {
+					for (MeasuredValues measuredValues : entityManagerSrc.readMeasuredValues(ReadRequest
+							.create(channelGroup).valuesMode(ValuesMode.STORAGE).allChannels().allValues())) {
 						if (!mapChannels.containsKey(measuredValues.getName())) {
 							throw new ApiCopyException(
 									String.format("Cannot find Channel %s in destination!", measuredValues.getName()));
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/AtfxImportTask.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/AtfxImportTask.java
index b1e55bb..bcc916c 100644
--- a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/AtfxImportTask.java
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/AtfxImportTask.java
@@ -101,15 +101,15 @@
 
 	private Entity copyEntity(Entity entity, boolean recursive, Transaction transaction) {
 		if (entity instanceof Project) {
-			return (Project) copyProject((Project) entity, recursive, transaction);
+			return copyProject((Project) entity, recursive, transaction);
 		} else if (entity instanceof Pool) {
-			return (Pool) copyPool((Pool) entity, recursive, transaction);
+			return copyPool((Pool) entity, recursive, transaction);
 		} else if (entity instanceof Test) {
-			return (Test) copyTest((Test) entity, recursive, transaction);
+			return copyTest((Test) entity, recursive, transaction);
 		} else if (entity instanceof TestStep) {
-			return (TestStep) copyTestStep((TestStep) entity, recursive, transaction);
+			return copyTestStep((TestStep) entity, recursive, transaction);
 		} else if (entity instanceof Measurement) {
-			return (Measurement) copyMeasurement((Measurement) entity, new ArrayList<ContextRoot>(), recursive, transaction);
+			return copyMeasurement((Measurement) entity, new ArrayList<ContextRoot>(), recursive, transaction);
 		} else {
 			throw new ApiCopyException("Unsupported entity: '" + entity.getClass().getName() + "'");
 		}
@@ -416,7 +416,8 @@
 		transaction.update(listUpdatedEntities);
 	}
 
-	private Measurement copyMeasurement(Measurement measurementSrc, List<ContextRoot> listContextRootsDst, boolean recursive, Transaction transaction) {
+	private Measurement copyMeasurement(Measurement measurementSrc, List<ContextRoot> listContextRootsDst,
+			boolean recursive, Transaction transaction) {
 		EntityHolder ehSrc = new EntityHolder(measurementSrc, entityManagerSrc);
 
 		EntityHolder ehDst = mapSrcDstEntities.get(ehSrc);
@@ -442,13 +443,15 @@
 			Optional<TemplateTestStep> optTemplateTestStep = templateResolver
 					.resolveTemplateTestStep(templateResolver.resolveTemplateTest());
 
-			// If no ContextRoots to use with the newly created Measurement are passed into this method, use ContextRoots 
+			// If no ContextRoots to use with the newly created Measurement are passed into
+			// this method, use ContextRoots
 			// of any already existing Measurement under the parent test step.
 			// First look in destination...
 			if (listContextRootsDst.size() == 0) {
-				for (Measurement existingMeasurementDst :entityManagerDst.loadChildren(testStepParentDst, Measurement.class)) {
-					listContextRootsDst.addAll(existingMeasurementDst.loadContexts(entityManagerDst,
-							ContextType.values()).values());
+				for (Measurement existingMeasurementDst : entityManagerDst.loadChildren(testStepParentDst,
+						Measurement.class)) {
+					listContextRootsDst.addAll(
+							existingMeasurementDst.loadContexts(entityManagerDst, ContextType.values()).values());
 
 					if (listContextRootsDst.size() > 0) {
 						break;
@@ -456,7 +459,8 @@
 				}
 			}
 
-			// ...then, if nothing has been found, in source and try to find destination counterpart in cache map:
+			// ...then, if nothing has been found, in source and try to find destination
+			// counterpart in cache map:
 			if (listContextRootsDst.size() == 0) {
 				for (Measurement existingMeasurementSrc : entityManagerSrc.loadChildren(
 						entityManagerSrc.loadParent(measurementSrc, TestStep.class).get(), Measurement.class)) {
@@ -475,12 +479,12 @@
 			// Still no ContextRoots found? Create them from the test step template:
 			if (listContextRootsDst.size() == 0 && optTemplateTestStep.isPresent()) {
 				optTemplateTestStep.get().getTemplateRoots()
-				.forEach(tr -> listContextRootsDst.add(entityFactoryDst.createContextRoot(tr)));
+						.forEach(tr -> listContextRootsDst.add(entityFactoryDst.createContextRoot(tr)));
 			}
 
 			Measurement measurementDst = fetchOne(searchServiceDst, Measurement.class, filter)
-					.orElseGet(() -> entityFactoryDst.createMeasurement(measurementSrc.getName(), 
-							testStepParentDst, listContextRootsDst.toArray(new ContextRoot[listContextRootsDst.size()])));
+					.orElseGet(() -> entityFactoryDst.createMeasurement(measurementSrc.getName(), testStepParentDst,
+							listContextRootsDst.toArray(new ContextRoot[listContextRootsDst.size()])));
 
 			copyValues(measurementSrc, measurementDst, Arrays.asList("Id", "Name"));
 
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/AtfxTransferBase.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/AtfxTransferBase.java
index d4ac1e4..9a99d08 100644
--- a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/AtfxTransferBase.java
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/AtfxTransferBase.java
@@ -37,8 +37,8 @@
 import org.eclipse.mdm.api.base.model.FileLink;
 import org.eclipse.mdm.api.base.model.FloatComplex;
 import org.eclipse.mdm.api.base.model.MeasuredValues;
-import org.eclipse.mdm.api.base.model.Measurement;
 import org.eclipse.mdm.api.base.model.MeasuredValues.ValueIterator;
+import org.eclipse.mdm.api.base.model.Measurement;
 import org.eclipse.mdm.api.base.model.ScalarType;
 import org.eclipse.mdm.api.base.model.SequenceRepresentation;
 import org.eclipse.mdm.api.base.model.Test;
@@ -58,7 +58,8 @@
 import com.google.common.collect.Lists;
 
 public abstract class AtfxTransferBase {
-	List<Class<? extends Entity>> supportedRootEntities = Arrays.asList(Project.class, Pool.class, Test.class, TestStep.class, Measurement.class);
+	List<Class<? extends Entity>> supportedRootEntities = Arrays.asList(Project.class, Pool.class, Test.class,
+			TestStep.class, Measurement.class);
 
 	ApplicationContext contextSrc;
 	EntityManager entityManagerSrc;
@@ -92,10 +93,13 @@
 		LinkedListMultimap<Class<? extends Entity>, Entity> byType = LinkedListMultimap.create();
 		entities.forEach(e -> byType.put(e.getClass(), e));
 
-		byType.get(Measurement.class).forEach(e -> byType.put(TestStep.class, entityManagerSrc.loadParent(e, TestStep.class).get()));
-		byType.get(TestStep.class).forEach(e -> byType.put(Test.class, entityManagerSrc.loadParent(e, Test.class).get()));
+		byType.get(Measurement.class)
+				.forEach(e -> byType.put(TestStep.class, entityManagerSrc.loadParent(e, TestStep.class).get()));
+		byType.get(TestStep.class)
+				.forEach(e -> byType.put(Test.class, entityManagerSrc.loadParent(e, Test.class).get()));
 		byType.get(Test.class).forEach(e -> byType.put(Pool.class, entityManagerSrc.loadParent(e, Pool.class).get()));
-		byType.get(Pool.class).forEach(e -> byType.put(Project.class, entityManagerSrc.loadParent(e, Project.class).get()));
+		byType.get(Pool.class)
+				.forEach(e -> byType.put(Project.class, entityManagerSrc.loadParent(e, Project.class).get()));
 
 		entities.forEach(e -> byType.remove(e.getClass(), e));
 		return byType;
@@ -119,8 +123,8 @@
 	}
 
 	<T extends Entity> Optional<T> fetchOne(EntityManager entityManager, Class<T> entityClass, String name) {
-		List<T> results = entityManager.loadAll(entityClass).stream()
-				.filter(entity -> entity.getName().equals(name)).collect(Collectors.toList());
+		List<T> results = entityManager.loadAll(entityClass).stream().filter(entity -> entity.getName().equals(name))
+				.collect(Collectors.toList());
 
 		if (results.isEmpty()) {
 			return Optional.empty();
@@ -132,8 +136,7 @@
 		}
 	}
 
-	boolean isNewEntity(Entity entity)
-	{
+	boolean isNewEntity(Entity entity) {
 		return (Strings.isNullOrEmpty(entity.getID()) || Long.valueOf(entity.getID()) <= 0);
 	}
 
@@ -149,8 +152,7 @@
 		Set<String> valueNamesDst = dstEntity.getValues().keySet();
 		for (Map.Entry<String, Value> me : srcEntity.getValues().entrySet()) {
 			String key = me.getKey();
-			if (!ignoredAttributes.contains(key)
-					&& valueNamesDst.contains(key)) {
+			if (!ignoredAttributes.contains(key) && valueNamesDst.contains(key)) {
 				dstEntity.getValue(me.getKey()).set(me.getValue().extract());
 			}
 		}
@@ -164,46 +166,36 @@
 		boolean independent = measuredValues.isIndependent();
 		double[] generationParameters = measuredValues.getGenerationParameters();
 
-		if (SequenceRepresentation.EXPLICIT.equals(seqRep)
-				|| SequenceRepresentation.EXPLICIT_EXTERNAL.equals(seqRep))
-		{
+		if (SequenceRepresentation.EXPLICIT.equals(seqRep) || SequenceRepresentation.EXPLICIT_EXTERNAL.equals(seqRep)) {
 			builder = wrb.explicit();
-		}
-		else if (SequenceRepresentation.IMPLICIT_CONSTANT.equals(seqRep))
-		{
+		} else if (SequenceRepresentation.IMPLICIT_CONSTANT.equals(seqRep)) {
 			checkGenerationParameters(generationParameters, 1);
 
 			return wrb.implicitConstant(scalarType, generationParameters[0]).build();
-		}
-		else if (SequenceRepresentation.IMPLICIT_LINEAR.equals(seqRep))
-		{
+		} else if (SequenceRepresentation.IMPLICIT_LINEAR.equals(seqRep)) {
 			checkGenerationParameters(generationParameters, 2);
 
-			return wrb.implicitLinear(scalarType, generationParameters[0], generationParameters[1]).independent(independent).build();
-		}
-		else if (SequenceRepresentation.IMPLICIT_SAW.equals(seqRep))
-		{
+			return wrb.implicitLinear(scalarType, generationParameters[0], generationParameters[1])
+					.independent(independent).build();
+		} else if (SequenceRepresentation.IMPLICIT_SAW.equals(seqRep)) {
 			checkGenerationParameters(generationParameters, 3);
 
-			return wrb.implicitSaw(scalarType, generationParameters[0], generationParameters[1], generationParameters[2]).build();
-		}
-		else if (SequenceRepresentation.RAW_LINEAR.equals(seqRep)
-				|| SequenceRepresentation.RAW_LINEAR_EXTERNAL.equals(seqRep))
-		{
+			return wrb
+					.implicitSaw(scalarType, generationParameters[0], generationParameters[1], generationParameters[2])
+					.build();
+		} else if (SequenceRepresentation.RAW_LINEAR.equals(seqRep)
+				|| SequenceRepresentation.RAW_LINEAR_EXTERNAL.equals(seqRep)) {
 			checkGenerationParameters(generationParameters, 2);
 
 			builder = wrb.rawLinear(generationParameters[0], generationParameters[1]);
-		}
-		else if (SequenceRepresentation.RAW_LINEAR_CALIBRATED.equals(seqRep)
-				|| SequenceRepresentation.RAW_LINEAR_CALIBRATED_EXTERNAL.equals(seqRep))
-		{
+		} else if (SequenceRepresentation.RAW_LINEAR_CALIBRATED.equals(seqRep)
+				|| SequenceRepresentation.RAW_LINEAR_CALIBRATED_EXTERNAL.equals(seqRep)) {
 			checkGenerationParameters(generationParameters, 3);
 
-			builder = wrb.rawLinearCalibrated(generationParameters[0], generationParameters[1], generationParameters[2]);
-		}
-		else if (SequenceRepresentation.RAW_POLYNOMIAL.equals(seqRep)
-				|| SequenceRepresentation.RAW_POLYNOMIAL_EXTERNAL.equals(seqRep))
-		{
+			builder = wrb.rawLinearCalibrated(generationParameters[0], generationParameters[1],
+					generationParameters[2]);
+		} else if (SequenceRepresentation.RAW_POLYNOMIAL.equals(seqRep)
+				|| SequenceRepresentation.RAW_POLYNOMIAL_EXTERNAL.equals(seqRep)) {
 			builder = wrb.rawPolynomial(generationParameters);
 		}
 
@@ -228,7 +220,8 @@
 				values[count++] = iter.next();
 			}
 
-			return castBuilder(builder, AnyTypeValuesBuilder.class).dateValues(values, flags).independent(independent).build();
+			return castBuilder(builder, AnyTypeValuesBuilder.class).dateValues(values, flags).independent(independent)
+					.build();
 		} else if (scalarType.isBoolean()) {
 			boolean[] values = new boolean[measuredValues.getLength()];
 			boolean[] flags = new boolean[values.length];
@@ -364,24 +357,18 @@
 		}
 	}
 
-	void checkGenerationParameters(double[] generationParameters, int expectedLength)
-	{
-		if (null == generationParameters
-				|| generationParameters.length < expectedLength)
-		{
-			throw new IllegalStateException(
-					String.format("Number of generation parameters is %d, expected %d!",
-							(null == generationParameters ? 0 : generationParameters.length), expectedLength));
+	void checkGenerationParameters(double[] generationParameters, int expectedLength) {
+		if (null == generationParameters || generationParameters.length < expectedLength) {
+			throw new IllegalStateException(String.format("Number of generation parameters is %d, expected %d!",
+					(null == generationParameters ? 0 : generationParameters.length), expectedLength));
 		}
 	}
 
-	<T extends NumericalValuesBuilder> T castBuilder(NumericalValuesBuilder builder, Class<T> cls)
-	{
-		if (!cls.isInstance(builder))
-		{
-			throw new IllegalStateException(
-					String.format("Error creating the write values builder, expected class is %s, actual class is %s (likely column data type and sequence representation mismatch)!", 
-							cls.getName(), (null == builder ? "???" : builder.getClass().getName())));
+	<T extends NumericalValuesBuilder> T castBuilder(NumericalValuesBuilder builder, Class<T> cls) {
+		if (!cls.isInstance(builder)) {
+			throw new IllegalStateException(String.format(
+					"Error creating the write values builder, expected class is %s, actual class is %s (likely column data type and sequence representation mismatch)!",
+					cls.getName(), (null == builder ? "???" : builder.getClass().getName())));
 		}
 
 		return cls.cast(builder);
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/ClassificationUtil.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/ClassificationUtil.java
index 122d9cf..b163546 100644
--- a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/ClassificationUtil.java
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/ClassificationUtil.java
@@ -44,9 +44,10 @@
 import org.slf4j.LoggerFactory;
 
 /**
- * Creates Classification instances, because openMDM4 clients checks them and does not show any
- * data if classifications are absent.
- * As soon as Classification can be created through standard MDM5 API this class becomes obsolete.
+ * Creates Classification instances, because openMDM4 clients checks them and
+ * does not show any data if classifications are absent. As soon as
+ * Classification can be created through standard MDM5 API this class becomes
+ * obsolete.
  */
 public class ClassificationUtil {
 	private static final Logger LOG = LoggerFactory.getLogger(ClassificationUtil.class);
@@ -144,7 +145,7 @@
 					List<AIDNameValueSeqUnitId> listProjectDomainAnvsuis = new ArrayList<>();
 					listProjectDomainAnvsuis.add(createAnvsui(aidProjectDomain, "Name", rootProjectName));
 					listProjectDomainAnvsuis
-					.add(createAnvsui(aidProjectDomain, "MimeType", "application/x-asam.aoany.projectdomain"));
+							.add(createAnvsui(aidProjectDomain, "MimeType", "application/x-asam.aoany.projectdomain"));
 
 					ElemId[] elemIds = aoSession.getApplElemAccess().insertInstances(listProjectDomainAnvsuis
 							.toArray(new AIDNameValueSeqUnitId[listProjectDomainAnvsuis.size()]));
@@ -157,11 +158,11 @@
 								rootProjectName));
 					}
 				}
-				break;
+					break;
 				case 1: {
 					iidProjectDomain = iter.nextN(1)[0].getId();
 				}
-				break;
+					break;
 				default:
 					throw new IllegalStateException(
 							String.format("More than one ProjectDomain instance with name \"%s\" found in destination!",
@@ -182,10 +183,10 @@
 
 				if (null == iidClassification) {
 					T_LONGLONG aidClassification = aeClassification.getId();
-					AIDNameValueSeqUnitId[]  arrAnvsuis = new AIDNameValueSeqUnitId[5];
+					AIDNameValueSeqUnitId[] arrAnvsuis = new AIDNameValueSeqUnitId[5];
 					arrAnvsuis[0] = createAnvsui(aidClassification, "Name", classificationName);
-					arrAnvsuis[1] =
-							createAnvsui(aidClassification, "MimeType", "application/x-asam.aoany.classification");
+					arrAnvsuis[1] = createAnvsui(aidClassification, "MimeType",
+							"application/x-asam.aoany.classification");
 					arrAnvsuis[2] = createAnvsui(aidClassification, "Domain", iidDomain);
 					arrAnvsuis[3] = createAnvsui(aidClassification, "Status", iidStatus);
 					arrAnvsuis[4] = createAnvsui(aidClassification, "ProjectDomain", iidProjectDomain);
@@ -260,8 +261,7 @@
 		DataType dt = value.u.discriminator();
 		if (dt == DataType.DT_STRING) {
 			vSeq.u.stringVal(new String[] { value.u.stringVal() });
-		}
-		else if (dt == DataType.DT_LONGLONG) {
+		} else if (dt == DataType.DT_LONGLONG) {
 			vSeq.u.longlongVal(new T_LONGLONG[] { value.u.longlongVal() });
 		}
 		return vSeq;
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/EntityHolder.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/EntityHolder.java
index 4057a10..b5b793b 100644
--- a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/EntityHolder.java
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/EntityHolder.java
@@ -36,39 +36,32 @@
 	private String path;
 	private String key;
 
-	public EntityHolder(Entity entity, EntityManager entityManager)
-	{
+	public EntityHolder(Entity entity, EntityManager entityManager) {
 		this.entity = entity;
 		this.entityManager = entityManager;
 	}
 
-	public String getName()
-	{
-		if (null == name)
-		{
+	public String getName() {
+		if (null == name) {
 			name = entity.getName();
 		}
 
 		return name;
 	}
 
-	public Entity getEntity()
-	{
+	public Entity getEntity() {
 		return entity;
 	}
 
-	public String getKey()
-	{
-		if (null == key)
-		{
+	public String getKey() {
+		if (null == key) {
 			key = String.format("%s:%s", entity.getTypeName(), entity.getID());
 		}
 
 		return key;
 	}
 
-	public String getPath()
-	{
+	public String getPath() {
 		if (null == path) {
 			EntityHolder parent = this;
 			List<String> listNames = new LinkedList<>();
@@ -84,35 +77,21 @@
 		return path;
 	}
 
-
-	public EntityHolder getParent()
-	{
-		if (entity instanceof Environment)
-		{
+	public EntityHolder getParent() {
+		if (entity instanceof Environment) {
 			return null;
-		}
-		else if (entity instanceof Project)
-		{
+		} else if (entity instanceof Project) {
 			return null;
-		}
-		else if (entity instanceof Pool)
-		{
+		} else if (entity instanceof Pool) {
 			return new EntityHolder(entityManager.loadParent(entity, Project.class).get(), entityManager);
-		}
-		else if (entity instanceof Test)
-		{
+		} else if (entity instanceof Test) {
 			return new EntityHolder(entityManager.loadParent(entity, Pool.class).get(), entityManager);
-		}
-		else if (entity instanceof TestStep)
-		{
+		} else if (entity instanceof TestStep) {
 			return new EntityHolder(entityManager.loadParent(entity, Test.class).get(), entityManager);
-		}
-		else if (entity instanceof Measurement)
-		{
+		} else if (entity instanceof Measurement) {
 			return new EntityHolder(entityManager.loadParent(entity, TestStep.class).get(), entityManager);
 		}
 
-
 		return null;
 	}
 
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/TemplateResolver.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/TemplateResolver.java
index 8f732e8..79a9d11 100644
--- a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/TemplateResolver.java
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/TemplateResolver.java
@@ -52,8 +52,7 @@
 	}
 
 	public Optional<TemplateTestStep> resolveTemplateTestStep(TemplateTest templateTestDst) {
-		for (TemplateTestStepUsage templateTestStepUsage : templateTestDst.getTemplateTestStepUsages())
-		{
+		for (TemplateTestStepUsage templateTestStepUsage : templateTestDst.getTemplateTestStepUsages()) {
 			return Optional.ofNullable(templateTestStepUsage.getTemplateTestStep());
 		}
 		return Optional.empty();
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ExportResource.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ExportResource.java
index 7de6d69..92d2711 100644
--- a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ExportResource.java
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ExportResource.java
@@ -54,6 +54,7 @@
 
 	/**
 	 * Used to provide service for unit tests
+	 * 
 	 * @param exportService
 	 */
 	protected ExportResource(ExportService exportService) {
@@ -75,17 +76,17 @@
 					try (final InputStream responseStream = new FileInputStream(files.get(0))) {
 						int length;
 						byte[] buffer = new byte[1024];
-						while((length = responseStream.read(buffer)) != -1) {
+						while ((length = responseStream.read(buffer)) != -1) {
 							out.write(buffer, 0, length);
 						}
 						out.flush();
-					}
-					finally {
+					} finally {
 						if (exportAtfx != null) {
 							try {
 								deleteDirectory(exportAtfx);
 							} catch (IOException e) {
-								LOG.warn("Could not delete temporary directory " + exportAtfx.getParent().toFile().getAbsolutePath(), e);
+								LOG.warn("Could not delete temporary directory "
+										+ exportAtfx.getParent().toFile().getAbsolutePath(), e);
 							}
 						}
 					}
@@ -110,16 +111,16 @@
 								}
 							}
 						}
-					}
-					catch (Exception e) {
+					} catch (Exception e) {
 						e.printStackTrace();
-					}
-					finally {
+					} finally {
 						if (exportAtfx != null) {
 							try {
 								deleteDirectory(exportAtfx);
 							} catch (IOException e) {
-								LOG.warn("Could not delete temporary directory " + exportAtfx.toFile().getAbsolutePath(), e);
+								LOG.warn(
+										"Could not delete temporary directory " + exportAtfx.toFile().getAbsolutePath(),
+										e);
 							}
 						}
 					}
@@ -131,13 +132,11 @@
 
 	/**
 	 * Deletes a directory.
+	 * 
 	 * @param pathToBeDeleted directory to delete
 	 * @throws IOException
 	 */
 	private void deleteDirectory(java.nio.file.Path pathToBeDeleted) throws IOException {
-		Files.walk(pathToBeDeleted)
-		.sorted(Comparator.reverseOrder())
-		.map(Path::toFile)
-		.forEach(File::delete);
+		Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
 	}
 }
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ExportService.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ExportService.java
index 4d9b6fd..f569f95 100644
--- a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ExportService.java
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ExportService.java
@@ -75,8 +75,8 @@
 	/**
 	 * Imports an ATFX file into the provided datasource.
 	 *
-	 * @param atfxFileSupplier returns a {@link Path} to an ATFX file. Accompanying binary
-	 * files are expected to be on the same folder.
+	 * @param atfxFileSupplier returns a {@link Path} to an ATFX file. Accompanying
+	 *                         binary files are expected to be on the same folder.
 	 * @return
 	 */
 	public Path exportAtfx(ShoppingBasket basket) {
@@ -86,24 +86,22 @@
 			Path atfxFile = tmpDir.resolve("export.atfx");
 			writeToFile(atfxFile, AtfxExportTask.class.getResourceAsStream("/emptyAtfx.xml"));
 
-			Map<String, String> params = ImmutableMap.of("atfxfile", atfxFile.toFile().getAbsolutePath(), "freetext.active", "false");
+			Map<String, String> params = ImmutableMap.of("atfxfile", atfxFile.toFile().getAbsolutePath(),
+					"freetext.active", "false");
 			ApplicationContext contextDst = connectContext(atfxContextFactoryClassname, params);
 
-			Map<String, List<MDMItem>> map = basket.getItems().stream()
-				.map(i -> i.getRestURI().getPath())
-				.map(p -> split(p))
-				.collect(Collectors.groupingBy(p -> p.getSource()));
+			Map<String, List<MDMItem>> map = basket.getItems().stream().map(i -> i.getRestURI().getPath())
+					.map(p -> split(p)).collect(Collectors.groupingBy(p -> p.getSource()));
 			if (map.size() != 1) {
 				throw new ApiCopyException("Currently only exports from exactly one application context are allowed!");
 			}
 			String srcContextName = map.keySet().iterator().next();
-			
+
 			ApplicationContext contextSrc = connectorService.getContextByName(srcContextName);
 			List<? extends Entity> entities = loadEntities(contextSrc, basket);
 
-
 			new AtfxExportTask(contextSrc, contextDst).copy(entities);
-			//			apiCopyService.newApiCopyTask(contextSrc, contextDst).copy(entities);
+			// apiCopyService.newApiCopyTask(contextSrc, contextDst).copy(entities);
 
 			return tmpDir;
 		} catch (ServiceNotFoundException e) {
@@ -115,16 +113,13 @@
 		}
 	}
 
-
-	private List<? extends Entity> loadEntities(ApplicationContext contextSrc, ShoppingBasket basket) throws ServiceNotFoundException, DataAccessException {
+	private List<? extends Entity> loadEntities(ApplicationContext contextSrc, ShoppingBasket basket)
+			throws ServiceNotFoundException, DataAccessException {
 		EntityManager em = contextSrc.getEntityManager()
 				.orElseThrow(() -> new ServiceNotFoundException("EntityManager not found!"));
 
-		return basket.getItems().stream()
-				.map(i -> i.getRestURI().getPath())
-				.map(p -> split(p))
-				.map(i -> em.load(typeToClass(i.getType()), i.getId()))
-				.collect(Collectors.toList());
+		return basket.getItems().stream().map(i -> i.getRestURI().getPath()).map(p -> split(p))
+				.map(i -> em.load(typeToClass(i.getType()), i.getId())).collect(Collectors.toList());
 	}
 
 	private Class<? extends Entity> typeToClass(String s) {
@@ -132,15 +127,9 @@
 	}
 
 	private static final BiMap<Class<? extends Entity>, String> ENTITY2FRAGMENT_URI = ImmutableBiMap
-			.<Class<? extends Entity>, String>builder()
-			.put(Project.class, "projects")
-			.put(Pool.class, "pools")
-			.put(Test.class, "tests")
-			.put(TestStep.class, "teststeps")
-			.put(Measurement.class, "measurements")
-			.put(ChannelGroup.class, "channelgroups")
-			.put(Channel.class, "channels")
-			.build();
+			.<Class<? extends Entity>, String>builder().put(Project.class, "projects").put(Pool.class, "pools")
+			.put(Test.class, "tests").put(TestStep.class, "teststeps").put(Measurement.class, "measurements")
+			.put(ChannelGroup.class, "channelgroups").put(Channel.class, "channels").build();
 
 	private MDMItem split(String path) {
 
@@ -154,12 +143,15 @@
 
 	/**
 	 * Connects to a {@link ApplicationContext}.
-	 * @param contextFactoryClassname classname of the {@link ApplicationContextFactory}
-	 * @param parameters connection parameters
+	 * 
+	 * @param contextFactoryClassname classname of the
+	 *                                {@link ApplicationContextFactory}
+	 * @param parameters              connection parameters
 	 * @return connected {@link ApplicationContext}
 	 * @throws ConnectionException
 	 */
-	private ApplicationContext connectContext(String contextFactoryClassname, Map<String, String> parameters) throws ConnectionException {
+	private ApplicationContext connectContext(String contextFactoryClassname, Map<String, String> parameters)
+			throws ConnectionException {
 		try {
 
 			Class<? extends ApplicationContextFactory> contextFactoryClass = Thread.currentThread()
@@ -169,7 +161,8 @@
 			ApplicationContextFactory contextFactory = contextFactoryClass.newInstance();
 			return contextFactory.connect(parameters);
 		} catch (Exception e) {
-			throw new ConnectionException("failed to initialize entity manager using factory '" + contextFactoryClassname + "'", e);
+			throw new ConnectionException(
+					"failed to initialize entity manager using factory '" + contextFactoryClassname + "'", e);
 		}
 	}
 
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ImportResource.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ImportResource.java
index a905aca..e5b1bc7 100644
--- a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ImportResource.java
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ImportResource.java
@@ -61,6 +61,7 @@
 
 	/**
 	 * Used to provide service for unit tests
+	 * 
 	 * @param importService
 	 */
 	protected ImportResource(ImportService importService) {
@@ -68,44 +69,51 @@
 	}
 
 	/**
-	 * Imports an ATFX file. The ATFX file is provided in the body of the POST request.
-	 * Note that, this method is not suitable for importing a ATFX file with accompanying binary files. In this case,
-	 * use {@link ImportResource#importMultiPart(FormDataMultiPart, String)} or {@link ImportResource#importZip(InputStream, String)}
+	 * Imports an ATFX file. The ATFX file is provided in the body of the POST
+	 * request. Note that, this method is not suitable for importing a ATFX file
+	 * with accompanying binary files. In this case, use
+	 * {@link ImportResource#importMultiPart(FormDataMultiPart, String)} or
+	 * {@link ImportResource#importZip(InputStream, String)}
 	 *
-	 * @param atfxInputStream the content of the ATFX file
+	 * @param atfxInputStream  the content of the ATFX file
 	 * @param targetSourceName name of the target datasource
 	 * @return
 	 */
 	@POST
 	@Consumes(MediaType.APPLICATION_XML)
 	@Produces(MediaType.APPLICATION_JSON)
-	public Response importXml(InputStream atfxInputStream, @PathParam(REQUESTPARAM_SOURCENAME) String targetSourceName) {
-		return importService.importAtfx(tmpDir -> extractDataFromInputStream(tmpDir, atfxInputStream), targetSourceName);
+	public Response importXml(InputStream atfxInputStream,
+			@PathParam(REQUESTPARAM_SOURCENAME) String targetSourceName) {
+		return importService.importAtfx(tmpDir -> extractDataFromInputStream(tmpDir, atfxInputStream),
+				targetSourceName);
 	}
 
 	/**
-	 * Imports an ATFX file. The ATFX file and its binary files are provided as multipart form data.
-	 * The field name represents the original file name and the field value the contents of the file.
-	 * The ATFX file is detected by its file extension 'atfx' or the media type 'application/xml'.
-	 * Only one ATFX file can be set at a time.
+	 * Imports an ATFX file. The ATFX file and its binary files are provided as
+	 * multipart form data. The field name represents the original file name and the
+	 * field value the contents of the file. The ATFX file is detected by its file
+	 * extension 'atfx' or the media type 'application/xml'. Only one ATFX file can
+	 * be set at a time.
 	 *
-	 * @param multiPart form data as described above
+	 * @param multiPart        form data as described above
 	 * @param targetSourceName name of the target datasource
 	 * @return
 	 */
 	@POST
 	@Consumes(MediaType.MULTIPART_FORM_DATA)
 	@Produces(MediaType.APPLICATION_JSON)
-	public Response importMultiPart(FormDataMultiPart multiPart, @PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
+	public Response importMultiPart(FormDataMultiPart multiPart,
+			@PathParam(REQUESTPARAM_SOURCENAME) String sourceName) {
 		return importService.importAtfx(tmpDir -> extractDataFromMultiPart(tmpDir, multiPart), sourceName);
 	}
 
 	/**
-	 * Imports an ATFX file. The ATFX file and its binary files are provided as a zip file.
-	 * The ATFX file is detected by its file extension 'atfx'.
-	 * Only one ATFX file can be included in the zip file.
+	 * Imports an ATFX file. The ATFX file and its binary files are provided as a
+	 * zip file. The ATFX file is detected by its file extension 'atfx'. Only one
+	 * ATFX file can be included in the zip file.
 	 *
-	 * @param zipFile the ATFX file and its binary files as zip compressed {@link InputStream}
+	 * @param zipFile          the ATFX file and its binary files as zip compressed
+	 *                         {@link InputStream}
 	 * @param targetSourceName name of the target datasource
 	 * @return
 	 */
@@ -117,15 +125,17 @@
 	}
 
 	/**
-	 * Writes the provided {@link InputStream} into the folder <code>tmpDir</code> and returns the
-	 * path to this file.
-	 * @param tmpDir temporary folder
+	 * Writes the provided {@link InputStream} into the folder <code>tmpDir</code>
+	 * and returns the path to this file.
+	 * 
+	 * @param tmpDir          temporary folder
 	 * @param atfxInputStream stream to be written into a file in tmpDir
 	 * @return Path referencing the written file.
 	 */
 	private Path extractDataFromInputStream(Path tmpDir, InputStream atfxInputStream) {
 		try {
-			Path atfxFile = tmpDir.resolve("tmp.atfx");;
+			Path atfxFile = tmpDir.resolve("tmp.atfx");
+			;
 
 			writeToFile(atfxFile, atfxInputStream);
 
@@ -137,9 +147,10 @@
 	}
 
 	/**
-	 * Writes the files provided as multi part form data into the folder <code>tmpDir</code> and returns the
-	 * path to the ATFX file.
-	 * @param tmpDir temporary folder
+	 * Writes the files provided as multi part form data into the folder
+	 * <code>tmpDir</code> and returns the path to the ATFX file.
+	 * 
+	 * @param tmpDir    temporary folder
 	 * @param multiPart multi part form data with files
 	 * @return Path referencing the extracted ATFX file.
 	 * @throws ApiCopyException if there is no or more than one ATFX file is found
@@ -147,7 +158,8 @@
 	private Path extractDataFromMultiPart(Path tmpDir, FormDataMultiPart multiPart) {
 		try {
 			if (multiPart.getBodyParts().isEmpty()) {
-				throw new ApiCopyException("MultiPart message does not contain any parts. Atleast an ATFX file is expected.");
+				throw new ApiCopyException(
+						"MultiPart message does not contain any parts. Atleast an ATFX file is expected.");
 			}
 
 			Path atfxFile = null;
@@ -164,11 +176,13 @@
 
 				writeToFile(filePath, data.getEntityAs(InputStream.class));
 
-				if (fileName.toLowerCase().endsWith(ATFX_EXTENSION) || data.getMediaType().equals(MediaType.APPLICATION_XML_TYPE)) {
+				if (fileName.toLowerCase().endsWith(ATFX_EXTENSION)
+						|| data.getMediaType().equals(MediaType.APPLICATION_XML_TYPE)) {
 					if (atfxFile == null) {
 						atfxFile = filePath;
 					} else {
-						throw new ApiCopyException("Expecting exactly one part with Content-Type '" + MediaType.APPLICATION_XML + "', but multiple parts were found.");
+						throw new ApiCopyException("Expecting exactly one part with Content-Type '"
+								+ MediaType.APPLICATION_XML + "', but multiple parts were found.");
 					}
 
 				} else {
@@ -176,7 +190,8 @@
 				}
 			}
 			if (atfxFile == null) {
-				throw new ApiCopyException("Expecting exactly one part with Content-Type '" + MediaType.APPLICATION_XML + "', but zero parts were found.");
+				throw new ApiCopyException("Expecting exactly one part with Content-Type '" + MediaType.APPLICATION_XML
+						+ "', but zero parts were found.");
 			}
 
 			LOG.debug("Received ATFX file {} and binary files {}.", atfxFile, binFiles);
@@ -188,10 +203,11 @@
 	}
 
 	/**
-	 * Extracts the zip archive provided by {@link InputStream} into the folder <code>tmpDir</code> and returns the
-	 * path to the ATFX file.
+	 * Extracts the zip archive provided by {@link InputStream} into the folder
+	 * <code>tmpDir</code> and returns the path to the ATFX file.
+	 * 
 	 * @param tmpDir temporary folder
-	 * @param in zip file to be extracted into a file in tmpDir
+	 * @param in     zip file to be extracted into a file in tmpDir
 	 * @return Path referencing the extracted ATFX file.
 	 * @throws ApiCopyException if there is no or more than one ATFX file is found
 	 */
@@ -211,14 +227,16 @@
 					if (atfxFile == null) {
 						atfxFile = file;
 					} else {
-						throw new ApiCopyException("Expecting exactly one file with extension 'atfx', but files were found.");
+						throw new ApiCopyException(
+								"Expecting exactly one file with extension 'atfx', but files were found.");
 					}
 				} else {
 					binFiles.add(file);
 				}
 			}
 			if (atfxFile == null) {
-				throw new ApiCopyException("Expecting exactly one file with extension 'atfx', but zero parts were found.");
+				throw new ApiCopyException(
+						"Expecting exactly one file with extension 'atfx', but zero parts were found.");
 			}
 
 			LOG.debug("Received ATFX file {} and binary files {}.", atfxFile, binFiles);
@@ -228,9 +246,9 @@
 		}
 	}
 
-
 	/**
 	 * Writes inputstream to file
+	 * 
 	 * @param file
 	 * @param inputstream
 	 * @throws IOException
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ImportService.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ImportService.java
index 468353f..d8760ff 100644
--- a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ImportService.java
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/boundary/ImportService.java
@@ -71,9 +71,9 @@
 	/**
 	 * Imports an ATFX file into the provided datasource.
 	 *
-	 * @param atfxFileSupplier returns a {@link Path} to an ATFX file. Accompanying binary
-	 * files are expected to be on the same folder.
-	 * @param dstContextName target datasource of the import
+	 * @param atfxFileSupplier returns a {@link Path} to an ATFX file. Accompanying
+	 *                         binary files are expected to be on the same folder.
+	 * @param dstContextName   target datasource of the import
 	 * @return
 	 */
 	public Response importAtfx(Function<Path, Path> atfxFileSupplier, String dstContextName) {
@@ -85,12 +85,12 @@
 
 			Path atfxFile = atfxFileSupplier.apply(tmpDir);
 
-			Map<String, String> params = ImmutableMap.of("atfxfile", atfxFile.toFile().getAbsolutePath(), "freetext.active", "false");
+			Map<String, String> params = ImmutableMap.of("atfxfile", atfxFile.toFile().getAbsolutePath(),
+					"freetext.active", "false");
 
 			ApplicationContext contextSrc = connectContext(atfxContextFactoryClassname, params);
 			List<Project> projects = contextSrc.getEntityManager()
-					.orElseThrow(() -> new ServiceNotFoundException("EntityManager not found!"))
-					.loadAll(Project.class);
+					.orElseThrow(() -> new ServiceNotFoundException("EntityManager not found!")).loadAll(Project.class);
 
 			apiCopyService.newApiCopyTask(contextSrc, contextDst).copy(projects);
 
@@ -116,25 +116,25 @@
 
 	/**
 	 * Deletes a directory.
+	 * 
 	 * @param pathToBeDeleted directory to delete
 	 * @throws IOException
 	 */
 	private void deleteDirectory(java.nio.file.Path pathToBeDeleted) throws IOException {
-		Files.walk(pathToBeDeleted)
-		.sorted(Comparator.reverseOrder())
-		.map(Path::toFile)
-		.forEach(File::delete);
+		Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
 	}
 
-
 	/**
 	 * Connects to a {@link ApplicationContext}.
-	 * @param contextFactoryClassname classname of the {@link ApplicationContextFactory}
-	 * @param parameters connection parameters
+	 * 
+	 * @param contextFactoryClassname classname of the
+	 *                                {@link ApplicationContextFactory}
+	 * @param parameters              connection parameters
 	 * @return connected {@link ApplicationContext}
 	 * @throws ConnectionException
 	 */
-	private ApplicationContext connectContext(String contextFactoryClassname, Map<String, String> parameters) throws ConnectionException {
+	private ApplicationContext connectContext(String contextFactoryClassname, Map<String, String> parameters)
+			throws ConnectionException {
 		try {
 
 			Class<? extends ApplicationContextFactory> contextFactoryClass = Thread.currentThread()
@@ -144,7 +144,8 @@
 			ApplicationContextFactory contextFactory = contextFactoryClass.newInstance();
 			return contextFactory.connect(parameters);
 		} catch (Exception e) {
-			throw new ConnectionException("failed to initialize entity manager using factory '" + contextFactoryClassname + "'", e);
+			throw new ConnectionException(
+					"failed to initialize entity manager using factory '" + contextFactoryClassname + "'", e);
 		}
 	}
 }
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/entity/ApiCopyExceptionMapper.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/entity/ApiCopyExceptionMapper.java
index b72ef8a..4ba52cb 100644
--- a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/entity/ApiCopyExceptionMapper.java
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/entity/ApiCopyExceptionMapper.java
@@ -27,7 +27,7 @@
  * {@link CopyStatusResponse} in the payload.
  */
 @Provider
-public class ApiCopyExceptionMapper implements javax.ws.rs.ext.ExceptionMapper<ApiCopyException>{
+public class ApiCopyExceptionMapper implements javax.ws.rs.ext.ExceptionMapper<ApiCopyException> {
 
 	/**
 	 * {@inheritDoc}
diff --git a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/entity/CopyStatusResponse.java b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/entity/CopyStatusResponse.java
index fd2b58c..b640e8b 100644
--- a/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/entity/CopyStatusResponse.java
+++ b/org.eclipse.mdm.apicopy/src/main/java/org/eclipse/mdm/apicopy/entity/CopyStatusResponse.java
@@ -26,8 +26,7 @@
 public class CopyStatusResponse {
 
 	public enum State {
-		OK,
-		FAILED,
+		OK, FAILED,
 	}
 
 	private State state;
diff --git a/org.eclipse.mdm.apicopy/src/test/java/org/eclipse/mdm/apicopy/FileUtils.java b/org.eclipse.mdm.apicopy/src/test/java/org/eclipse/mdm/apicopy/FileUtils.java
index f9780cf..b7ccb56 100644
--- a/org.eclipse.mdm.apicopy/src/test/java/org/eclipse/mdm/apicopy/FileUtils.java
+++ b/org.eclipse.mdm.apicopy/src/test/java/org/eclipse/mdm/apicopy/FileUtils.java
@@ -26,6 +26,7 @@
 public class FileUtils {
 	/**
 	 * Writes inputstream to file
+	 * 
 	 * @param file
 	 * @param inputstream
 	 * @throws IOException
@@ -43,13 +44,11 @@
 
 	/**
 	 * Deletes a directory.
+	 * 
 	 * @param pathToBeDeleted directory to delete
 	 * @throws IOException
 	 */
 	public static void deleteDirectory(java.nio.file.Path pathToBeDeleted) throws IOException {
-		Files.walk(pathToBeDeleted)
-				.sorted(Comparator.reverseOrder())
-				.map(Path::toFile)
-				.forEach(File::delete);
+		Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
 	}
 }
diff --git a/org.eclipse.mdm.apicopy/src/test/java/org/eclipse/mdm/apicopy/boundary/ExportResourceTest.java b/org.eclipse.mdm.apicopy/src/test/java/org/eclipse/mdm/apicopy/boundary/ExportResourceTest.java
index ec11614..a369288 100644
--- a/org.eclipse.mdm.apicopy/src/test/java/org/eclipse/mdm/apicopy/boundary/ExportResourceTest.java
+++ b/org.eclipse.mdm.apicopy/src/test/java/org/eclipse/mdm/apicopy/boundary/ExportResourceTest.java
@@ -21,7 +21,6 @@
 import java.net.URI;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.util.Arrays;
 
 import javax.ws.rs.client.Entity;
@@ -31,7 +30,6 @@
 import javax.ws.rs.core.Response.Status;
 
 import org.eclipse.mdm.apicopy.entity.ApiCopyExceptionMapper;
-import org.eclipse.mdm.apicopy.entity.CopyStatusResponse;
 import org.eclipse.mdm.shoppingbasket.entity.BasketItem;
 import org.eclipse.mdm.shoppingbasket.entity.ShoppingBasket;
 import org.glassfish.hk2.utilities.binding.AbstractBinder;
@@ -42,7 +40,6 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
-
 public class ExportResourceTest extends JerseyTest {
 
 	@Mock
@@ -54,11 +51,8 @@
 	public Application configure() {
 		MockitoAnnotations.initMocks(this);
 
-		return new ResourceConfig()
-				.register(new ExportResource(mockedExportService))
-				.register(MultiPartFeature.class)
-				.register(ApiCopyExceptionMapper.class)
-				.register(new AbstractBinder() {
+		return new ResourceConfig().register(new ExportResource(mockedExportService)).register(MultiPartFeature.class)
+				.register(ApiCopyExceptionMapper.class).register(new AbstractBinder() {
 					@Override
 					protected void configure() {
 						bind(mockedExportService).to(ExportService.class);
@@ -80,8 +74,7 @@
 		ShoppingBasket basket = new ShoppingBasket();
 		basket.setItems(Arrays.asList(item));
 
-		Response r = getClient().target(getBaseUri()).path(EXPORT_RESOURCE)
-				.request()
+		Response r = getClient().target(getBaseUri()).path(EXPORT_RESOURCE).request()
 				.post(Entity.entity(basket, MediaType.APPLICATION_XML_TYPE));
 
 		try {
@@ -110,9 +103,7 @@
 		ShoppingBasket basket = new ShoppingBasket();
 		basket.setItems(Arrays.asList(item));
 
-
-		Response r = getClient().target(getBaseUri()).path(EXPORT_RESOURCE)
-				.request()
+		Response r = getClient().target(getBaseUri()).path(EXPORT_RESOURCE).request()
 				.post(Entity.entity(basket, MediaType.APPLICATION_XML_TYPE));
 
 		try {
@@ -142,9 +133,7 @@
 		ShoppingBasket basket = new ShoppingBasket();
 		basket.setItems(Arrays.asList(item));
 
-
-		Response r = getClient().target(getBaseUri()).path(EXPORT_RESOURCE)
-				.request()
+		Response r = getClient().target(getBaseUri()).path(EXPORT_RESOURCE).request()
 				.post(Entity.entity(basket, MediaType.APPLICATION_XML_TYPE));
 
 		try {
diff --git a/org.eclipse.mdm.apicopy/src/test/java/org/eclipse/mdm/apicopy/boundary/ImportResourceTest.java b/org.eclipse.mdm.apicopy/src/test/java/org/eclipse/mdm/apicopy/boundary/ImportResourceTest.java
index 2bb1b65..d952388 100644
--- a/org.eclipse.mdm.apicopy/src/test/java/org/eclipse/mdm/apicopy/boundary/ImportResourceTest.java
+++ b/org.eclipse.mdm.apicopy/src/test/java/org/eclipse/mdm/apicopy/boundary/ImportResourceTest.java
@@ -37,9 +37,9 @@
 import javax.ws.rs.core.Response.Status;
 
 import org.eclipse.mdm.apicopy.ApiCopyException;
+import org.eclipse.mdm.apicopy.entity.ApiCopyExceptionMapper;
 import org.eclipse.mdm.apicopy.entity.CopyStatusResponse;
 import org.eclipse.mdm.apicopy.entity.CopyStatusResponse.State;
-import org.eclipse.mdm.apicopy.entity.ApiCopyExceptionMapper;
 import org.glassfish.hk2.utilities.binding.AbstractBinder;
 import org.glassfish.jersey.media.multipart.FormDataMultiPart;
 import org.glassfish.jersey.media.multipart.MultiPartFeature;
@@ -50,7 +50,6 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
-
 public class ImportResourceTest extends JerseyTest {
 
 	@Mock
@@ -66,11 +65,8 @@
 	public Application configure() {
 		MockitoAnnotations.initMocks(this);
 
-		return new ResourceConfig()
-				.register(new ImportResource(mockedImportService))
-				.register(MultiPartFeature.class)
-				.register(ApiCopyExceptionMapper.class)
-				.register(new AbstractBinder() {
+		return new ResourceConfig().register(new ImportResource(mockedImportService)).register(MultiPartFeature.class)
+				.register(ApiCopyExceptionMapper.class).register(new AbstractBinder() {
 					@Override
 					protected void configure() {
 						bind(mockedImportService).to(ImportService.class);
@@ -82,11 +78,7 @@
 	public void testImportFile() throws IOException {
 		when(mockedImportService.importAtfx(any(), any())).thenReturn(Response.ok().build());
 
-		Response r = getClient()
-				.register(MultiPartFeature.class)
-				.target(getBaseUri())
-				.path(IMPORT_RESOURCE)
-				.request()
+		Response r = getClient().register(MultiPartFeature.class).target(getBaseUri()).path(IMPORT_RESOURCE).request()
 				.post(Entity.entity(new FileInputStream(atfxFile.toFile()), MediaType.APPLICATION_XML_TYPE));
 		try {
 			assertThat(r.getStatus()).isEqualTo(Status.OK.getStatusCode());
@@ -101,16 +93,12 @@
 		when(mockedImportService.importAtfx(any(), any())).thenReturn(Response.ok().build());
 
 		try (final FormDataMultiPart multiPartEntity = new FormDataMultiPart()) {
-			multiPartEntity
-			.field(atfxFile.getFileName().toString(), new FileInputStream(atfxFile.toFile()), MediaType.APPLICATION_XML_TYPE)
-			.field(binFile.getFileName().toString(), new FileInputStream(binFile.toFile()), MediaType.APPLICATION_OCTET_STREAM_TYPE);
+			multiPartEntity.field(atfxFile.getFileName().toString(), new FileInputStream(atfxFile.toFile()),
+					MediaType.APPLICATION_XML_TYPE).field(binFile.getFileName().toString(),
+							new FileInputStream(binFile.toFile()), MediaType.APPLICATION_OCTET_STREAM_TYPE);
 
-			Response r = getClient()
-					.register(MultiPartFeature.class)
-					.target(getBaseUri())
-					.path(IMPORT_RESOURCE)
-					.request()
-					.post(Entity.entity(multiPartEntity, multiPartEntity.getMediaType()));
+			Response r = getClient().register(MultiPartFeature.class).target(getBaseUri()).path(IMPORT_RESOURCE)
+					.request().post(Entity.entity(multiPartEntity, multiPartEntity.getMediaType()));
 			try {
 				assertThat(r.getStatus()).isEqualTo(Status.OK.getStatusCode());
 				verify(mockedImportService, times(1)).importAtfx(any(), eq("ENV"));
@@ -135,11 +123,7 @@
 		writeFileToStream(binFile, zipOut);
 		zipOut.close();
 
-		Response r = getClient()
-				.register(MultiPartFeature.class)
-				.target(getBaseUri())
-				.path(IMPORT_RESOURCE)
-				.request()
+		Response r = getClient().register(MultiPartFeature.class).target(getBaseUri()).path(IMPORT_RESOURCE).request()
 				.post(Entity.entity(out.toByteArray(), "application/zip"));
 		try {
 			assertThat(r.getStatus()).isEqualTo(Status.OK.getStatusCode());
@@ -154,20 +138,14 @@
 		when(mockedImportService.importAtfx(any(), any())).thenThrow(new ApiCopyException("JUnit test fail"));
 
 		try (final FormDataMultiPart multiPartEntity = new FormDataMultiPart()) {
-			multiPartEntity
-			.field(atfxFile.getFileName().toString(), new FileInputStream(atfxFile.toFile()), MediaType.APPLICATION_XML_TYPE);
-			Response r = getClient()
-					.register(MultiPartFeature.class)
-					.target(getBaseUri())
-					.path(IMPORT_RESOURCE)
-					.request()
-					.post(Entity.entity(multiPartEntity, multiPartEntity.getMediaType()));
+			multiPartEntity.field(atfxFile.getFileName().toString(), new FileInputStream(atfxFile.toFile()),
+					MediaType.APPLICATION_XML_TYPE);
+			Response r = getClient().register(MultiPartFeature.class).target(getBaseUri()).path(IMPORT_RESOURCE)
+					.request().post(Entity.entity(multiPartEntity, multiPartEntity.getMediaType()));
 			try {
 				assertThat(r.getStatus()).isEqualTo(Status.BAD_REQUEST.getStatusCode());
-				assertThat(r.readEntity(CopyStatusResponse.class))
-				.hasFieldOrPropertyWithValue("state", State.FAILED)
-				.hasFieldOrPropertyWithValue("message", "JUnit test fail")
-				.hasFieldOrProperty("stacktrace");
+				assertThat(r.readEntity(CopyStatusResponse.class)).hasFieldOrPropertyWithValue("state", State.FAILED)
+						.hasFieldOrPropertyWithValue("message", "JUnit test fail").hasFieldOrProperty("stacktrace");
 			} finally {
 				r.close();
 			}
@@ -179,9 +157,7 @@
 	public void testExport() {
 		when(mockedImportService.importAtfx(any(), any())).thenReturn(Response.ok().build());
 
-		Response r = getClient().target(getBaseUri()).path("environments/mdm/export")
-				.request()
-				.get();
+		Response r = getClient().target(getBaseUri()).path("environments/mdm/export").request().get();
 		try {
 			assertThat(r.getStatus()).isEqualTo(Status.OK.getStatusCode());
 			assertThat(r.getMediaType().toString()).isEqualTo(MediaType.APPLICATION_XML);
diff --git a/org.eclipse.mdm.application/build.gradle b/org.eclipse.mdm.application/build.gradle
index 90dc16e..5381e35 100644
--- a/org.eclipse.mdm.application/build.gradle
+++ b/org.eclipse.mdm.application/build.gradle
@@ -1,16 +1,16 @@
-/********************************************************************************

- * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation

- *

- * See the NOTICE file(s) distributed with this work for additional

- * information regarding copyright ownership.

- *

- * This program and the accompanying materials are made available under the

- * terms of the Eclipse Public License v. 2.0 which is available at

- * http://www.eclipse.org/legal/epl-2.0.

- *

- * SPDX-License-Identifier: EPL-2.0

- *

- ********************************************************************************/

+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
  
 
 import org.apache.tools.ant.taskdefs.condition.Os
@@ -62,7 +62,7 @@
 	repositories {
 		maven {  url "https://plugins.gradle.org/m2/"  }
 	}
-	dependencies {  classpath "com.moowork.gradle:gradle-node-plugin:1.0.1"  }
+	dependencies {  classpath "com.moowork.gradle:gradle-node-plugin:1.3.1"  }
 }
 
 jar {
@@ -89,8 +89,8 @@
 
 
 node {
-	version = '6.9.4'
-	npmVersion = '3.10.10'
+	version = '10.14.0'
+	npmVersion = '6.4.1'
 	distBaseUrl = 'https://nodejs.org/dist'
 	download = true
 	workDir = file("${project.buildDir}/node/nodejs")
diff --git a/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/AccessControlResponseFilter.java b/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/AccessControlResponseFilter.java
index c9b61fe..51f48bd 100644
--- a/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/AccessControlResponseFilter.java
+++ b/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/AccessControlResponseFilter.java
@@ -1,17 +1,16 @@
-/********************************************************************************

- * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation

- *

- * See the NOTICE file(s) distributed with this work for additional

- * information regarding copyright ownership.

- *

- * This program and the accompanying materials are made available under the

- * terms of the Eclipse Public License v. 2.0 which is available at

- * http://www.eclipse.org/legal/epl-2.0.

- *

- * SPDX-License-Identifier: EPL-2.0

- *

- ********************************************************************************/

-
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
 
 package org.eclipse.mdm.application;
 
diff --git a/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/ApplicationConfig.java b/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/ApplicationConfig.java
index c7472c1..513d9f9 100644
--- a/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/ApplicationConfig.java
+++ b/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/ApplicationConfig.java
@@ -1,17 +1,16 @@
-/********************************************************************************

- * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation

- *

- * See the NOTICE file(s) distributed with this work for additional

- * information regarding copyright ownership.

- *

- * This program and the accompanying materials are made available under the

- * terms of the Eclipse Public License v. 2.0 which is available at

- * http://www.eclipse.org/legal/epl-2.0.

- *

- * SPDX-License-Identifier: EPL-2.0

- *

- ********************************************************************************/

-
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
 
 package org.eclipse.mdm.application;
 
diff --git a/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/MDMRequestFilter.java b/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/MDMRequestFilter.java
index 99ddfb7..74ade59 100644
--- a/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/MDMRequestFilter.java
+++ b/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/MDMRequestFilter.java
@@ -1,17 +1,16 @@
-/********************************************************************************

- * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation

- *

- * See the NOTICE file(s) distributed with this work for additional

- * information regarding copyright ownership.

- *

- * This program and the accompanying materials are made available under the

- * terms of the Eclipse Public License v. 2.0 which is available at

- * http://www.eclipse.org/legal/epl-2.0.

- *

- * SPDX-License-Identifier: EPL-2.0

- *

- ********************************************************************************/

-
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
 
 package org.eclipse.mdm.application;
 
@@ -36,7 +35,6 @@
 
 	private static final String SERVLET_NAME_MDMNENUE = "/navigator/";
 
-
 	@Override
 	public void init(FilterConfig filterConfig) throws ServletException {
 
diff --git a/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/logout/MDMLogoutServlet.java b/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/logout/MDMLogoutServlet.java
index 2fdc6d9..187aa68 100644
--- a/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/logout/MDMLogoutServlet.java
+++ b/org.eclipse.mdm.application/src/main/java/org/eclipse/mdm/application/logout/MDMLogoutServlet.java
@@ -1,17 +1,16 @@
-/********************************************************************************

- * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation

- *

- * See the NOTICE file(s) distributed with this work for additional

- * information regarding copyright ownership.

- *

- * This program and the accompanying materials are made available under the

- * terms of the Eclipse Public License v. 2.0 which is available at

- * http://www.eclipse.org/legal/epl-2.0.

- *

- * SPDX-License-Identifier: EPL-2.0

- *

- ********************************************************************************/

-
+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
 
 package org.eclipse.mdm.application.logout;
 
diff --git a/org.eclipse.mdm.application/src/main/webapp/README_I18N.md b/org.eclipse.mdm.application/src/main/webapp/README_I18N.md
new file mode 100644
index 0000000..22ce293
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/README_I18N.md
@@ -0,0 +1,149 @@
+# General

+

+The [ngx-translate library](https://github.com/ngx-translate/core) is used for internationalization. 

+This library basically provides functionality for replacing keys (as placeholders for the text to be translated)

+in HTML or TypeScript files with values (the actual translations) defined as key-value pairs in separate JSON files (one for each language to be supported). The JSON files (in UTF8 character encoding) should be placed in the _src/assets/i18n_ directory. It is suggested the 2-letter ISO language codes be used for the file names, the file name extension "json" is mandatory.

+

+Key/value replacement is performed at runtime of the web application, and it is possible to switch between languages at runtime (see below).

+

+For details, please refer to the ngx-translate documentation at the link above.

+

+

+## Recommendations

+

+The keys for the texts to be translated should follow the pattern 

+

+`<directory>.<filename>.<descriptive key>`

+

+where _directory_ is the directory within the _app_ folder containing the respective file, _filename_ the root file name (omitting the file name extension and  qualifiers such as "component" or "module"), and _descriptive key_ a name for the key preferably so chosen as to give some indication about its usage or meaning. Key names should be in English, with dashes (-) replacing spaces between words. For clarity, consider using prefixes such as "title" for dialog titles, "btn" for button texts, "lbl" for labels, "tooltip" for tooltip texts, "err" for error messages, etc.  

+

+Examples: 

+

+* `search.mdm-search.btn-apply-changes`

+* `details.sensor.err-cannot-load-descriptive-data`

+

+For the sake of uniformity, it is recommended to use the _translate_ pipe in HTML files:

+

+```html

+<h4 class="modal-title">{{ 'tableview.editview.title-view-editor' | translate }}</h4>

+```

+

+Using the _TranslateService.instant()_ method, a translation for a key can be obtained in the language currently selected at the time of the method call. A typical application scenario for this is a message etc. shown in response to an event triggered by user action (e.g., a button click):

+

+```typescript

+saveBasket(e: Event) {

+    if (e) {

+      e.stopPropagation();

+    }

+    if (this.baskets.find(f => f.name === this.basketName) != undefined) {

+      this.childSaveModal.hide();

+      this.overwriteDialogComponent.showOverwriteModal(

+        this.translateService.instant('basket.mdm-basket.item-save-shopping-basket')).subscribe(

+          needSave => this.saveBasket2(needSave),

+          error => {

+            this.saveBasket2(false);

+            this.notificationService.notifyError(this.translateService.instant('basket.mdm-basket.err-save-shopping-basket'), error);

+        });

+    } else {

+      this.saveBasket2(true);

+    }

+  }

+```

+

+A function _streamTranslate_ is defined in mdm-core.module.ts which accepts a translation key and returns an Observable:

+

+```typescript

+export function streamTranslate(translateService: TranslateService, keys: string | Array<string>, params?: any): Observable<any> {

+  return translateService.onLangChange.pipe( startWith({}),

+      switchMap(() => params ? translateService.get(keys, params) : translateService.get(keys)) );

+}

+```

+By subscribing to that observable, a change of language in the application can be detected and the current translation for the key passed can be obtained. This is especially useful for class variables containing text to be localized, which is then guaranteed to always be in the language currently selected. Example (see below for an explanation of the marker function _TRANSLATE_):

+

+```typescript

+import { TranslateService } from '@ngx-translate/core';

+import { streamTranslate, TRANSLATE } from '../core/mdm-core.module';

+

+export class MDMNavigatorComponent implements OnInit {

+

+  loadingNode = <TreeNode>{

+    label: 'Loading subordinate items...',

+    leaf: true,

+    icon: 'fa fa-spinner fa-pulse fa-fw'

+  };

+  

+  [...]

+

+  contextMenuItems: MenuItem[] = [

+    { label: 'Add to shopping basket', icon: 'fa fa-shopping-cart', command: (event) => this.addSelectionToBasket() }

+  ];

+

+  constructor(private translateService: TranslateService) {

+  }

+

+  ngOnInit() {

+    streamTranslate(this.translateService, TRANSLATE('navigator.mdm-navigator.loading-subordinate-items')).subscribe(

+            (msg: string) => this.loadingNode.label = msg);

+    streamTranslate(this.translateService, TRANSLATE('navigator.mdm-navigator.add-to-shopping-basket')).subscribe(

+            (msg: string) => this.contextMenuItems[0].label = msg);

+  }

+  

+  [...]

+}

+```

+  

+Please also note that a suitable default value should be provided for the text if there is the possibility of it being needed before the translation library has been fully initialized. These default texts should be in English.

+

+

+

+## Language selection in the web application

+

+The user can select the language for the UI from a list presented in the web application's main menu bar.

+The entries for this list are defined in the _languages_ array of the _AppComponent_ class. For each language, a _SelectItem_ must be added to this array (label: the name of the language _in that language itself_, value: the name of the JSON file with the translations, excluding the "json" extension):

+

+```typescript

+export class AppComponent implements OnInit {

+  [...]

+ 

+  languages = <SelectItem[]> [

+    { label: 'English', value: 'en' },

+    { label: 'Deutsch', value: 'de' },

+    { label: 'Français', value: 'fr' },

+  ];

+  

+  [...]

+}

+```

+

+

+# Extracting translation keys from source files

+

+Using the [ngx-translate-extract](https://github.com/biesbjerg/ngx-translate-extract) library, translation keys can be automatically extracted from the source files and collected in a JSON file for use with ngx-translate. Documentation for ngx-translate-extract is available at the link above. 

+

+A script (_extract-translations_) which extracts the keys to two files (_en.json_ and _de.json_ for English and German, respectively) has been defined in _package.json_ and can be invoked on the command line by _npm run extract-translations_. 

+

+```typescript

+"extract-translations": "ngx-translate-extract --input ./src --output ./src/assets/i18n/en.json ./src/assets/i18n/de.json --clean --sort --format namespaced-json --marker TRANSLATE"

+

+```

+

+In this script, a marker function (_TRANSLATE_, defined in mdm-core.module.ts) is specified for marking translation keys outside the methods provided by ngx-translate. Whenever a translation key is used in an ngx-translate method (such as _instant()_) or in conjunction with the _translate_ pipe or directive, ngx-translate-extract automatically extracts that key to the JSON file. Keys located elsewhere in a typescript file must, if they are to be included in the JSON file, be marked using a marker function, which should not do anything but return the string passed into it:

+

+```typescript

+export function TRANSLATE(str: string) {

+  return str;

+}

+```

+

+At each extraction run, new keys found in the sources are added to the JSON file(s), keys no longer used in the source files removed from the JSON file(s), and all other keys in the JSON file(s) left untouched, together with any already existing translations for these. 

+

+The script can, of course, be modified as needed. Please note that some of the ways to specify the target JSON files mentioned in the ngx-translate-extract documentation appear to be non-functional (e.g., the _{en,de}.json_ notation for creating two files, _en.json_ and _de.json_).

+

+

+

+

+

+

+

+

+

diff --git a/org.eclipse.mdm.application/src/main/webapp/angular-cli.json b/org.eclipse.mdm.application/src/main/webapp/angular-cli.json
deleted file mode 100644
index 42901ec..0000000
--- a/org.eclipse.mdm.application/src/main/webapp/angular-cli.json
+++ /dev/null
@@ -1,57 +0,0 @@
-{
-  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
-  "project": {
-    "version": "1.0.0-beta.32.3",
-    "name": "openMDM-Web"
-  },
-  "apps": [
-    {
-      "root": "src",
-      "outDir": "dist",
-      "assets": [
-        "assets",
-        "favicon.ico"
-      ],
-      "index": "index.html",
-      "main": "main.ts",
-      "polyfills": "polyfills.ts",
-      "test": "test.ts",
-      "tsconfig": "tsconfig.json",
-      "prefix": "app",
-      "styles": [
-        "../node_modules/primeng/resources/themes/bootstrap/theme.css",
-        "../node_modules/primeng/resources/primeng.min.css",
-        "../node_modules/font-awesome/css/font-awesome.min.css",
-        "../node_modules/bootstrap/dist/css/bootstrap.min.css",
-        "styles.css"
-      ],
-      "scripts": [],
-      "environmentSource": "environments/environment.ts",
-      "environments": {
-        "dev": "environments/environment.ts",
-        "prod": "environments/environment.prod.ts"
-      }
-    }
-  ],
-  "e2e": {
-    "protractor": {
-      "config": "./protractor.conf.js"
-    }
-  },
-  "lint": [
-    {
-      "files": "src/**/*.ts",
-      "project": "src/tsconfig.json"
-    }
-  ],
-  "test": {
-    "karma": {
-      "config": "./karma.conf.js"
-    }
-  },
-  "defaults": {
-    "styleExt": "css",
-    "component": {},
-    "inline": true
-  }
-}
diff --git a/org.eclipse.mdm.application/src/main/webapp/angular.json b/org.eclipse.mdm.application/src/main/webapp/angular.json
new file mode 100644
index 0000000..6717b76
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/angular.json
@@ -0,0 +1,147 @@
+{
+  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
+  "version": 1,
+  "newProjectRoot": "projects",
+  "projects": {
+    "openMDM-Web": {
+      "root": "",
+      "sourceRoot": "src",
+      "projectType": "application",
+      "prefix": "app",
+      "schematics": {},
+      "architect": {
+        "build": {
+          "builder": "@angular-devkit/build-angular:browser",
+          "options": {
+            "outputPath": "dist",
+            "index": "src/index.html",
+            "main": "src/main.ts",
+            "polyfills": "src/polyfills.ts",
+            "tsConfig": "src/tsconfig.app.json",
+            "assets": [
+              "src/assets",
+              "src/favicon.ico"
+            ],
+            "styles": [
+              "node_modules/primeicons/primeicons.css",
+              "node_modules/primeng/resources/themes/nova-light/theme.css",
+              "node_modules/primeng/resources/primeng.min.css",
+              "node_modules/font-awesome/css/font-awesome.min.css",
+              "node_modules/bootstrap/dist/css/bootstrap.min.css",
+              "src/styles.css"
+            ],
+            "scripts": [],
+            "es5BrowserSupport": true
+          },
+          "configurations": {
+            "production": {
+              "fileReplacements": [
+                {
+                  "replace": "src/environments/environment.ts",
+                  "with": "src/environments/environment.prod.ts"
+                }
+              ],
+              "optimization": true,
+              "outputHashing": "all",
+              "sourceMap": false,
+              "extractCss": true,
+              "namedChunks": false,
+              "aot": true,
+              "extractLicenses": true,
+              "vendorChunk": false,
+              "buildOptimizer": true,
+              "budgets": [
+                {
+                  "type": "initial",
+                  "maximumWarning": "2mb",
+                  "maximumError": "5mb"
+                }
+              ]
+            }
+          }
+        },
+        "serve": {
+          "builder": "@angular-devkit/build-angular:dev-server",
+          "options": {
+            "browserTarget": "openMDM-Web:build",
+            "proxyConfig": "proxies/development.config.json"
+          },
+          "configurations": {
+            "production": {
+              "browserTarget": "openMDM-Web:build:production"
+            }
+          }
+        },
+        "extract-i18n": {
+          "builder": "@angular-devkit/build-angular:extract-i18n",
+          "options": {
+            "browserTarget": "openMDM-Web:build"
+          }
+        },
+        "test": {
+          "builder": "@angular-devkit/build-angular:karma",
+          "options": {
+            "main": "src/test.ts",
+            "polyfills": "src/polyfills.ts",
+            "tsConfig": "src/tsconfig.spec.json",
+            "karmaConfig": "src/karma.conf.js",
+            "styles": [
+              "node_modules/primeicons/primeicons.css",
+              "node_modules/primeng/resources/themes/nova-light/theme.css",
+              "node_modules/primeng/resources/primeng.min.css",
+              "node_modules/font-awesome/css/font-awesome.min.css",
+              "node_modules/bootstrap/dist/css/bootstrap.min.css",
+              "src/styles.css"
+            ],
+            "scripts": [],
+            "assets": [
+              "src/assets",
+              "src/favicon.ico"
+            ]
+          }
+        },
+        "lint": {
+          "builder": "@angular-devkit/build-angular:tslint",
+          "options": {
+            "tsConfig": [
+              "src/tsconfig.app.json",
+              "src/tsconfig.spec.json"
+            ],
+            "exclude": [
+              "**/node_modules/**"
+            ]
+          }
+        }
+      }
+    },
+    "openMDM-Web-e2e": {
+      "root": "e2e/",
+      "projectType": "application",
+      "prefix": "",
+      "architect": {
+        "e2e": {
+          "builder": "@angular-devkit/build-angular:protractor",
+          "options": {
+            "protractorConfig": "e2e/protractor.conf.js",
+            "devServerTarget": "openMDM-Web:serve"
+          },
+          "configurations": {
+            "production": {
+              "devServerTarget": "openMDM-Web:serve:production"
+            }
+          }
+        },
+        "lint": {
+          "builder": "@angular-devkit/build-angular:tslint",
+          "options": {
+            "tsConfig": "e2e/tsconfig.e2e.json",
+            "exclude": [
+              "**/node_modules/**"
+            ]
+          }
+        }
+      }
+    }
+  },
+  "defaultProject": "openMDM-Web"
+}
diff --git a/org.eclipse.mdm.application/src/main/webapp/e2e/app.e2e-spec.ts b/org.eclipse.mdm.application/src/main/webapp/e2e/app.e2e-spec.ts
index ad51239..574a965 100644
--- a/org.eclipse.mdm.application/src/main/webapp/e2e/app.e2e-spec.ts
+++ b/org.eclipse.mdm.application/src/main/webapp/e2e/app.e2e-spec.ts
@@ -11,7 +11,7 @@
  * SPDX-License-Identifier: EPL-2.0
  *
  ********************************************************************************/
- 
+
 import { WebappPage } from './app.po';
 
 describe('webapp App', function() {
diff --git a/org.eclipse.mdm.application/src/main/webapp/e2e/app.po.ts b/org.eclipse.mdm.application/src/main/webapp/e2e/app.po.ts
index d80758f..a409c27 100644
--- a/org.eclipse.mdm.application/src/main/webapp/e2e/app.po.ts
+++ b/org.eclipse.mdm.application/src/main/webapp/e2e/app.po.ts
@@ -11,7 +11,7 @@
  * SPDX-License-Identifier: EPL-2.0
  *
  ********************************************************************************/
- 
+
 import { browser, element, by } from 'protractor';
 
 export class WebappPage {
diff --git a/org.eclipse.mdm.application/src/main/webapp/protractor.conf.js b/org.eclipse.mdm.application/src/main/webapp/e2e/protractor.conf.js
similarity index 99%
rename from org.eclipse.mdm.application/src/main/webapp/protractor.conf.js
rename to org.eclipse.mdm.application/src/main/webapp/e2e/protractor.conf.js
index e73bc0c..c99ee2b 100644
--- a/org.eclipse.mdm.application/src/main/webapp/protractor.conf.js
+++ b/org.eclipse.mdm.application/src/main/webapp/e2e/protractor.conf.js
@@ -1,16 +1,16 @@
-/********************************************************************************

- * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation

- *

- * See the NOTICE file(s) distributed with this work for additional

- * information regarding copyright ownership.

- *

- * This program and the accompanying materials are made available under the

- * terms of the Eclipse Public License v. 2.0 which is available at

- * http://www.eclipse.org/legal/epl-2.0.

- *

- * SPDX-License-Identifier: EPL-2.0

- *

- ********************************************************************************/

+/********************************************************************************
+ * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation
+ *
+ * See the NOTICE file(s) distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v. 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ ********************************************************************************/
 
 
 // Protractor configuration file, see link for more information
diff --git a/org.eclipse.mdm.application/src/main/webapp/e2e/tsconfig.json b/org.eclipse.mdm.application/src/main/webapp/e2e/tsconfig.e2e.json
similarity index 100%
rename from org.eclipse.mdm.application/src/main/webapp/e2e/tsconfig.json
rename to org.eclipse.mdm.application/src/main/webapp/e2e/tsconfig.e2e.json
diff --git a/org.eclipse.mdm.application/src/main/webapp/package-lock.json b/org.eclipse.mdm.application/src/main/webapp/package-lock.json
new file mode 100644
index 0000000..ea11b62
--- /dev/null
+++ b/org.eclipse.mdm.application/src/main/webapp/package-lock.json
@@ -0,0 +1,11436 @@
+{
+  "name": "openMDM-Web",
+  "version": "1.0.0",
+  "lockfileVersion": 1,
+  "requires": true,
+  "dependencies": {
+    "@angular-devkit/architect": {
+      "version": "0.13.1",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.13.1.tgz",
+      "integrity": "sha512-QDmIbqde75ZZSEFbw6Q6kQWq4cY6C7D67yujXw6XTyubDNAs1tyXJyxTIB8vjSlEKwRizTTDd/B0ZXVcke3Mvw==",
+      "dev": true,
+      "requires": {
+        "@angular-devkit/core": "7.3.1",
+        "rxjs": "6.3.3"
+      }
+    },
+    "@angular-devkit/build-angular": {
+      "version": "0.13.1",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.13.1.tgz",
+      "integrity": "sha512-vkKwMVQ+NNCcVR3HFMffS+Mq4b2afXeUjI+02N38hBuFTppnC83uivUB6Uu2NUk5NTSQA4BnJlG5CbMs6N4QYg==",
+      "dev": true,
+      "requires": {
+        "@angular-devkit/architect": "0.13.1",
+        "@angular-devkit/build-optimizer": "0.13.1",
+        "@angular-devkit/build-webpack": "0.13.1",
+        "@angular-devkit/core": "7.3.1",
+        "@ngtools/webpack": "7.3.1",
+        "ajv": "6.7.0",
+        "autoprefixer": "9.4.6",
+        "circular-dependency-plugin": "5.0.2",
+        "clean-css": "4.2.1",
+        "copy-webpack-plugin": "4.6.0",
+        "file-loader": "3.0.1",
+        "glob": "7.1.3",
+        "istanbul-instrumenter-loader": "3.0.1",
+        "karma-source-map-support": "1.3.0",
+        "less": "3.9.0",
+        "less-loader": "4.1.0",
+        "license-webpack-plugin": "2.1.0",
+        "loader-utils": "1.2.3",
+        "mini-css-extract-plugin": "0.5.0",
+        "minimatch": "3.0.4",
+        "node-sass": "4.11.0",
+        "opn": "5.4.0",
+        "parse5": "4.0.0",
+        "postcss": "7.0.14",
+        "postcss-import": "12.0.1",
+        "postcss-loader": "3.0.0",
+        "raw-loader": "1.0.0",
+        "rxjs": "6.3.3",
+        "sass-loader": "7.1.0",
+        "semver": "5.6.0",
+        "source-map-loader": "0.2.4",
+        "source-map-support": "0.5.10",
+        "speed-measure-webpack-plugin": "1.3.0",
+        "stats-webpack-plugin": "0.7.0",
+        "style-loader": "0.23.1",
+        "stylus": "0.54.5",
+        "stylus-loader": "3.0.2",
+        "terser-webpack-plugin": "1.2.2",
+        "tree-kill": "1.2.1",
+        "webpack": "4.29.0",
+        "webpack-dev-middleware": "3.5.1",
+        "webpack-dev-server": "3.1.14",
+        "webpack-merge": "4.2.1",
+        "webpack-sources": "1.3.0",
+        "webpack-subresource-integrity": "1.1.0-rc.6"
+      },
+      "dependencies": {
+        "loader-utils": {
+          "version": "1.2.3",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+          "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^2.0.0",
+            "json5": "^1.0.1"
+          }
+        },
+        "parse5": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+          "integrity": "sha1-bXhlbj2o14tOwLkG98CO8d/j9gg=",
+          "dev": true
+        },
+        "semver": {
+          "version": "5.6.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+          "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+          "dev": true
+        }
+      }
+    },
+    "@angular-devkit/build-optimizer": {
+      "version": "0.13.1",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.13.1.tgz",
+      "integrity": "sha512-LmvHiI3H451aVWY5Ac6Fqz0i1eX/mUfWN+uJvo8NaL6Jc0HKYX2o3l4ODr8UUECWWctUC9AMD522ZMwAvnvsKQ==",
+      "dev": true,
+      "requires": {
+        "loader-utils": "1.2.3",
+        "source-map": "0.5.6",
+        "typescript": "3.2.4",
+        "webpack-sources": "1.3.0"
+      },
+      "dependencies": {
+        "loader-utils": {
+          "version": "1.2.3",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+          "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^2.0.0",
+            "json5": "^1.0.1"
+          }
+        },
+        "source-map": {
+          "version": "0.5.6",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
+          "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=",
+          "dev": true
+        },
+        "typescript": {
+          "version": "3.2.4",
+          "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz",
+          "integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==",
+          "dev": true
+        }
+      }
+    },
+    "@angular-devkit/build-webpack": {
+      "version": "0.13.1",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.13.1.tgz",
+      "integrity": "sha512-OGwC7bAl3u+w7Glw+OqIrN7OD1BkDXgrWbeQSpKAmsx6VdNPCnI4NPS+JldWNp70LVlE2nQlJUhtEqMVfBMnlg==",
+      "dev": true,
+      "requires": {
+        "@angular-devkit/architect": "0.13.1",
+        "@angular-devkit/core": "7.3.1",
+        "rxjs": "6.3.3"
+      }
+    },
+    "@angular-devkit/core": {
+      "version": "7.3.1",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.3.1.tgz",
+      "integrity": "sha512-56XDWWfIzOAkEk69lBLgmCYybPUA4yjunhmMlCk7vVdb7gbQUyzNjFD04Uj0GjlejatAQ5F76tRwygD9C+3RXQ==",
+      "dev": true,
+      "requires": {
+        "ajv": "6.7.0",
+        "chokidar": "2.0.4",
+        "fast-json-stable-stringify": "2.0.0",
+        "rxjs": "6.3.3",
+        "source-map": "0.7.3"
+      }
+    },
+    "@angular-devkit/schematics": {
+      "version": "7.3.1",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.3.1.tgz",
+      "integrity": "sha512-cd7usiasfSgw75INz72/VssrLr9tiVRYfo1TEdvr9ww0GuQbuQpB33xbV8W135eAV8+wzQ3Ce8ohaDHibvj6Yg==",
+      "dev": true,
+      "requires": {
+        "@angular-devkit/core": "7.3.1",
+        "rxjs": "6.3.3"
+      }
+    },
+    "@angular/animations": {
+      "version": "7.2.4",
+      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-7.2.4.tgz",
+      "integrity": "sha512-Wx6cqU6koFOASlyl4aCygtbtROoehU6OKwV2EZTkfzHx6Eu/QyTiSa5kyoApVM5LMmCNeb8SxJMSAnKXztNl0A==",
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "@angular/cdk": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-7.1.1.tgz",
+      "integrity": "sha1-aRayMDr14KVqm2T/TVRkLPGRxU8=",
+      "requires": {
+        "parse5": "^5.0.0",
+        "tslib": "^1.7.1"
+      }
+    },
+    "@angular/cli": {
+      "version": "7.3.1",
+      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-7.3.1.tgz",
+      "integrity": "sha512-8EvXYRhTqTaTk5PKv7VZxIWJiyG51R9RC9gtpRFx4bbnurqBHdEUxGMmaRsGT8QDbfvVsWnuakE0eeW1CrfZAQ==",
+      "dev": true,
+      "requires": {
+        "@angular-devkit/architect": "0.13.1",
+        "@angular-devkit/core": "7.3.1",
+        "@angular-devkit/schematics": "7.3.1",
+        "@schematics/angular": "7.3.1",
+        "@schematics/update": "0.13.1",
+        "@yarnpkg/lockfile": "1.1.0",
+        "ini": "1.3.5",
+        "inquirer": "6.2.1",
+        "npm-package-arg": "6.1.0",
+        "opn": "5.4.0",
+        "pacote": "9.4.0",
+        "semver": "5.6.0",
+        "symbol-observable": "1.2.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.6.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+          "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+          "dev": true
+        }
+      }
+    },
+    "@angular/common": {
+      "version": "7.2.4",
+      "resolved": "https://registry.npmjs.org/@angular/common/-/common-7.2.4.tgz",
+      "integrity": "sha512-3/i8RtnLTx/90gJHk5maE8zwsSiHgHvLItaa0qVfNlWiU0eCId/PL6TgDkut5vN9SQYL0oxhxFaVd35HmwsmuQ==",
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "@angular/compiler": {
+      "version": "7.2.4",
+      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-7.2.4.tgz",
+      "integrity": "sha512-+zyMzPCL45ePEV9nrnYJvhAVgp2Y19bDaq0f0YdZAqAjgDqHzXGGR6wX8GueyJWmUYWx5vwK6Apla4HwDrYA1w==",
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "@angular/compiler-cli": {
+      "version": "7.2.4",
+      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-7.2.4.tgz",
+      "integrity": "sha512-UhLosSeuwFIfaGqGcYOh9WSOuzEpeuhIRAOt81MeqOQEqkoreUjfxrQq8XWNkdqsPZHtiptF5ZwXlMBxlj9jJg==",
+      "dev": true,
+      "requires": {
+        "canonical-path": "1.0.0",
+        "chokidar": "^1.4.2",
+        "convert-source-map": "^1.5.1",
+        "dependency-graph": "^0.7.2",
+        "magic-string": "^0.25.0",
+        "minimist": "^1.2.0",
+        "reflect-metadata": "^0.1.2",
+        "shelljs": "^0.8.1",
+        "source-map": "^0.6.1",
+        "tslib": "^1.9.0",
+        "yargs": "9.0.1"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "dev": true
+        },
+        "anymatch": {
+          "version": "1.3.2",
+          "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz",
+          "integrity": "sha1-VT3Lj5HjyImEXf26NMd3IbkLnXo=",
+          "dev": true,
+          "requires": {
+            "micromatch": "^2.1.5",
+            "normalize-path": "^2.0.0"
+          }
+        },
+        "arr-diff": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz",
+          "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
+          "dev": true,
+          "requires": {
+            "arr-flatten": "^1.0.1"
+          }
+        },
+        "array-unique": {
+          "version": "0.2.1",
+          "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+          "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+          "dev": true
+        },
+        "braces": {
+          "version": "1.8.5",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
+          "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+          "dev": true,
+          "requires": {
+            "expand-range": "^1.8.1",
+            "preserve": "^0.2.0",
+            "repeat-element": "^1.1.2"
+          }
+        },
+        "camelcase": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+          "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+          "dev": true
+        },
+        "chokidar": {
+          "version": "1.7.0",
+          "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
+          "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=",
+          "dev": true,
+          "requires": {
+            "anymatch": "^1.3.0",
+            "async-each": "^1.0.0",
+            "fsevents": "^1.0.0",
+            "glob-parent": "^2.0.0",
+            "inherits": "^2.0.1",
+            "is-binary-path": "^1.0.0",
+            "is-glob": "^2.0.0",
+            "path-is-absolute": "^1.0.0",
+            "readdirp": "^2.0.0"
+          }
+        },
+        "cross-spawn": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+          "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+          "dev": true,
+          "requires": {
+            "lru-cache": "^4.0.1",
+            "shebang-command": "^1.2.0",
+            "which": "^1.2.9"
+          }
+        },
+        "execa": {
+          "version": "0.7.0",
+          "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+          "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+          "dev": true,
+          "requires": {
+            "cross-spawn": "^5.0.1",
+            "get-stream": "^3.0.0",
+            "is-stream": "^1.1.0",
+            "npm-run-path": "^2.0.0",
+            "p-finally": "^1.0.0",
+            "signal-exit": "^3.0.0",
+            "strip-eof": "^1.0.0"
+          }
+        },
+        "expand-brackets": {
+          "version": "0.1.5",
+          "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz",
+          "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+          "dev": true,
+          "requires": {
+            "is-posix-bracket": "^0.1.0"
+          }
+        },
+        "extglob": {
+          "version": "0.3.2",
+          "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz",
+          "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^1.0.0"
+          }
+        },
+        "glob-parent": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+          "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+          "dev": true,
+          "requires": {
+            "is-glob": "^2.0.0"
+          }
+        },
+        "is-extglob": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+          "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+          "dev": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+          "dev": true
+        },
+        "is-glob": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+          "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^1.0.0"
+          }
+        },
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        },
+        "load-json-file": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
+          "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
+          "dev": true,
+          "requires": {
+            "graceful-fs": "^4.1.2",
+            "parse-json": "^2.2.0",
+            "pify": "^2.0.0",
+            "strip-bom": "^3.0.0"
+          }
+        },
+        "mem": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
+          "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
+          "dev": true,
+          "requires": {
+            "mimic-fn": "^1.0.0"
+          }
+        },
+        "micromatch": {
+          "version": "2.3.11",
+          "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
+          "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+          "dev": true,
+          "requires": {
+            "arr-diff": "^2.0.0",
+            "array-unique": "^0.2.1",
+            "braces": "^1.8.2",
+            "expand-brackets": "^0.1.4",
+            "extglob": "^0.3.1",
+            "filename-regex": "^2.0.0",
+            "is-extglob": "^1.0.0",
+            "is-glob": "^2.0.1",
+            "kind-of": "^3.0.2",
+            "normalize-path": "^2.0.1",
+            "object.omit": "^2.0.0",
+            "parse-glob": "^3.0.4",
+            "regex-cache": "^0.4.2"
+          }
+        },
+        "os-locale": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
+          "integrity": "sha1-QrwpAKa1uL0XN2yOiCtlr8zyS/I=",
+          "dev": true,
+          "requires": {
+            "execa": "^0.7.0",
+            "lcid": "^1.0.0",
+            "mem": "^1.1.0"
+          }
+        },
+        "path-type": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+          "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+          "dev": true,
+          "requires": {
+            "pify": "^2.0.0"
+          }
+        },
+        "pify": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+          "dev": true
+        },
+        "read-pkg": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+          "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+          "dev": true,
+          "requires": {
+            "load-json-file": "^2.0.0",
+            "normalize-package-data": "^2.3.2",
+            "path-type": "^2.0.0"
+          }
+        },
+        "read-pkg-up": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+          "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+          "dev": true,
+          "requires": {
+            "find-up": "^2.0.0",
+            "read-pkg": "^2.0.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        },
+        "string-width": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+          "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=",
+          "dev": true,
+          "requires": {
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^4.0.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^3.0.0"
+          }
+        },
+        "strip-bom": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+          "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+          "dev": true
+        },
+        "which-module": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+          "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+          "dev": true
+        },
+        "y18n": {
+          "version": "3.2.1",
+          "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+          "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+          "dev": true
+        },
+        "yargs": {
+          "version": "9.0.1",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz",
+          "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=",
+          "dev": true,
+          "requires": {
+            "camelcase": "^4.1.0",
+            "cliui": "^3.2.0",
+            "decamelize": "^1.1.1",
+            "get-caller-file": "^1.0.1",
+            "os-locale": "^2.0.0",
+            "read-pkg-up": "^2.0.0",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^1.0.1",
+            "set-blocking": "^2.0.0",
+            "string-width": "^2.0.0",
+            "which-module": "^2.0.0",
+            "y18n": "^3.2.1",
+            "yargs-parser": "^7.0.0"
+          }
+        },
+        "yargs-parser": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
+          "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
+          "dev": true,
+          "requires": {
+            "camelcase": "^4.1.0"
+          }
+        }
+      }
+    },
+    "@angular/core": {
+      "version": "7.2.4",
+      "resolved": "https://registry.npmjs.org/@angular/core/-/core-7.2.4.tgz",
+      "integrity": "sha512-kfAxhIxl89PmB7y81FR/RAv0yWRFcEYxEnTwV+o8jKGfemAXtQ0g/Vh+lJR0SD/TBgFilMxotN1mhwH4A8GShw==",
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "@angular/forms": {
+      "version": "7.2.4",
+      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-7.2.4.tgz",
+      "integrity": "sha512-DAtOrdlTRsgvmZrsvczCAkY8dhTwZb5DXBmPuSXh0UR9lvEiCgNHGbwEiIiIkAHpw1wSeXZrq0qyy/oJRvf18g==",
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "@angular/http": {
+      "version": "7.2.4",
+      "resolved": "https://registry.npmjs.org/@angular/http/-/http-7.2.4.tgz",
+      "integrity": "sha512-kazJREm7MtSCYbE+9zU/CcUXI5Csu53PooeQlAp80/TOHqry6fVKIMHCI892Db9ScY2ds0SzbyTmrxEQo7PP1A==",
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "@angular/language-service": {
+      "version": "7.2.4",
+      "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-7.2.4.tgz",
+      "integrity": "sha512-A9Rud/27hHMSUUjpgn57nVeLsoYgdvFwJhtlZA/oCuSpmlD+LqqBsEpPhivwn++u44+DSrFXsic29jlFnsBotw==",
+      "dev": true
+    },
+    "@angular/platform-browser": {
+      "version": "7.2.4",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-7.2.4.tgz",
+      "integrity": "sha512-Klt8aKR5SP9bqfMfpSY5vQOY7AQEs8JGuZOk5Bfc2dUtYT2IEIvK2IqO8v2rcFRVO13HOPUxl328efyHqLgI7g==",
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "@angular/platform-browser-dynamic": {
+      "version": "7.2.4",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-7.2.4.tgz",
+      "integrity": "sha512-J/xWlmaYOPUoCHZ5TiIRiyYa4uRMtCz3aGdBfY8k/NWtNo8SCYaS3aut7Sk4RS5rK8aAVi+aYFlY5YOrlW+Hbg==",
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "@angular/router": {
+      "version": "7.2.4",
+      "resolved": "https://registry.npmjs.org/@angular/router/-/router-7.2.4.tgz",
+      "integrity": "sha512-T8Uqf2H1SV1MQI38WwYJ4aa+4NNnvlp2Tp/rkfg6tKcp/cLkKqE6OOfiy9lmW+i/624v8tMgYoBMOUNBjAG23g==",
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "@biesbjerg/ngx-translate-extract": {
+      "version": "2.3.4",
+      "resolved": "https://registry.npmjs.org/@biesbjerg/ngx-translate-extract/-/ngx-translate-extract-2.3.4.tgz",
+      "integrity": "sha512-FzOdm5Jr2TMgdzTW+c6CGIgMQMCAXCyN6JYzz+hfnYjcvPrYbyR05AhM08W70nXD3a2RnbqjImNjEEcXY9pZ/g==",
+      "dev": true,
+      "requires": {
+        "chalk": "2.0.1",
+        "cheerio": "1.0.0-rc.2",
+        "flat": "2.0.1",
+        "fs": "0.0.1-security",
+        "gettext-parser": "1.2.2",
+        "glob": "7.1.2",
+        "mkdirp": "0.5.1",
+        "path": "0.12.7",
+        "typescript": "2.4.1",
+        "yargs": "8.0.2"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "dev": true
+        },
+        "camelcase": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+          "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.0.1.tgz",
+          "integrity": "sha512-Mp+FXEI+FrwY/XYV45b2YD3E8i3HwnEAoFcM0qlZzq/RZ9RwWitt2Y/c7cqRAz70U7hfekqx6qNYthuKFO6K0g==",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^3.1.0",
+            "escape-string-regexp": "^1.0.5",
+            "supports-color": "^4.0.0"
+          }
+        },
+        "cross-spawn": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+          "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+          "dev": true,
+          "requires": {
+            "lru-cache": "^4.0.1",
+            "shebang-command": "^1.2.0",
+            "which": "^1.2.9"
+          }
+        },
+        "execa": {
+          "version": "0.7.0",
+          "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+          "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+          "dev": true,
+          "requires": {
+            "cross-spawn": "^5.0.1",
+            "get-stream": "^3.0.0",
+            "is-stream": "^1.1.0",
+            "npm-run-path": "^2.0.0",
+            "p-finally": "^1.0.0",
+            "signal-exit": "^3.0.0",
+            "strip-eof": "^1.0.0"
+          }
+        },
+        "glob": {
+          "version": "7.1.2",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+          "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+          "dev": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        },
+        "has-flag": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+          "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+          "dev": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+          "dev": true
+        },
+        "load-json-file": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
+          "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
+          "dev": true,
+          "requires": {
+            "graceful-fs": "^4.1.2",
+            "parse-json": "^2.2.0",
+            "pify": "^2.0.0",
+            "strip-bom": "^3.0.0"
+          }
+        },
+        "mem": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
+          "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
+          "dev": true,
+          "requires": {
+            "mimic-fn": "^1.0.0"
+          }
+        },
+        "os-locale": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
+          "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
+          "dev": true,
+          "requires": {
+            "execa": "^0.7.0",
+            "lcid": "^1.0.0",
+            "mem": "^1.1.0"
+          }
+        },
+        "path-type": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+          "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+          "dev": true,
+          "requires": {
+            "pify": "^2.0.0"
+          }
+        },
+        "pify": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+          "dev": true
+        },
+        "read-pkg": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+          "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+          "dev": true,
+          "requires": {
+            "load-json-file": "^2.0.0",
+            "normalize-package-data": "^2.3.2",
+            "path-type": "^2.0.0"
+          }
+        },
+        "read-pkg-up": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+          "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+          "dev": true,
+          "requires": {
+            "find-up": "^2.0.0",
+            "read-pkg": "^2.0.0"
+          }
+        },
+        "string-width": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+          "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+          "dev": true,
+          "requires": {
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^4.0.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^3.0.0"
+          }
+        },
+        "strip-bom": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+          "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "4.5.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+          "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^2.0.0"
+          }
+        },
+        "typescript": {
+          "version": "2.4.1",
+          "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.4.1.tgz",
+          "integrity": "sha1-w8yxbdqgsjFN4DHn5v7onlujRrw=",
+          "dev": true
+        },
+        "which-module": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+          "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+          "dev": true
+        },
+        "y18n": {
+          "version": "3.2.1",
+          "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+          "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+          "dev": true
+        },
+        "yargs": {
+          "version": "8.0.2",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz",
+          "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
+          "dev": true,
+          "requires": {
+            "camelcase": "^4.1.0",
+            "cliui": "^3.2.0",
+            "decamelize": "^1.1.1",
+            "get-caller-file": "^1.0.1",
+            "os-locale": "^2.0.0",
+            "read-pkg-up": "^2.0.0",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^1.0.1",
+            "set-blocking": "^2.0.0",
+            "string-width": "^2.0.0",
+            "which-module": "^2.0.0",
+            "y18n": "^3.2.1",
+            "yargs-parser": "^7.0.0"
+          }
+        },
+        "yargs-parser": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
+          "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
+          "dev": true,
+          "requires": {
+            "camelcase": "^4.1.0"
+          }
+        }
+      }
+    },
+    "@ngtools/webpack": {
+      "version": "7.3.1",
+      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-7.3.1.tgz",
+      "integrity": "sha512-EGQRjgDf5XP+Fm1MdZNRFiPd9e1vhl11BhjkwqkAsewic4eoz6fqXfj/Osz1hQy8xU+2dPPf/byQ/+nY3E02Zg==",
+      "dev": true,
+      "requires": {
+        "@angular-devkit/core": "7.3.1",
+        "enhanced-resolve": "4.1.0",
+        "rxjs": "6.3.3",
+        "tree-kill": "1.2.1",
+        "webpack-sources": "1.3.0"
+      }
+    },
+    "@ngx-translate/core": {
+      "version": "11.0.1",
+      "resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-11.0.1.tgz",
+      "integrity": "sha1-zs761B8GNo9YWdrEj+yPzESFYV8=",
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "@ngx-translate/http-loader": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/@ngx-translate/http-loader/-/http-loader-4.0.0.tgz",
+      "integrity": "sha1-ilVSSK1LfVE0YPzsnaJbBEeWLx0=",
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "@schematics/angular": {
+      "version": "7.3.1",
+      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-7.3.1.tgz",
+      "integrity": "sha512-0Ne8APPlTAjKg5CSZqluwCuW/5yPjr3ALCWzqwPxN0suE745usThtasBmqrjw0RMIt8nRqRgtg54Z7lCPO9ZFg==",
+      "dev": true,
+      "requires": {
+        "@angular-devkit/core": "7.3.1",
+        "@angular-devkit/schematics": "7.3.1",
+        "typescript": "3.2.4"
+      },
+      "dependencies": {
+        "typescript": {
+          "version": "3.2.4",
+          "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz",
+          "integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==",
+          "dev": true
+        }
+      }
+    },
+    "@schematics/update": {
+      "version": "0.13.1",
+      "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.13.1.tgz",
+      "integrity": "sha512-EHOqolT/d/jRGuVTCUESLpk8JNpuaPlsVHfeK7Kdp/t0wSEnmtOelZX4+leS25lGXDaDUF3138ntjrZR4n6bGw==",
+      "dev": true,
+      "requires": {
+        "@angular-devkit/core": "7.3.1",
+        "@angular-devkit/schematics": "7.3.1",
+        "@yarnpkg/lockfile": "1.1.0",
+        "ini": "1.3.5",
+        "pacote": "9.4.0",
+        "rxjs": "6.3.3",
+        "semver": "5.6.0",
+        "semver-intersect": "1.4.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.6.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+          "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+          "dev": true
+        }
+      }
+    },
+    "@types/jasmine": {
+      "version": "2.8.8",
+      "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.8.8.tgz",
+      "integrity": "sha512-OJSUxLaxXsjjhob2DBzqzgrkLmukM3+JMpRp0r0E4HTdT1nwDCWhaswjYxazPij6uOdzHCJfNbDjmQ1/rnNbCg==",
+      "dev": true
+    },
+    "@types/jasminewd2": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.3.tgz",
+      "integrity": "sha512-hYDVmQZT5VA2kigd4H4bv7vl/OhlympwREUemqBdOqtrYTo5Ytm12a5W5/nGgGYdanGVxj0x/VhZ7J3hOg/YKg==",
+      "dev": true,
+      "requires": {
+        "@types/jasmine": "*"
+      }
+    },
+    "@types/node": {
+      "version": "8.9.4",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-8.9.4.tgz",
+      "integrity": "sha512-dSvD36qnQs78G1BPsrZFdPpvLgMW/dnvr5+nTW2csMs5TiP9MOXrjUbnMZOEwnIuBklXtn7b6TPA2Cuq07bDHA==",
+      "dev": true
+    },
+    "@types/q": {
+      "version": "0.0.32",
+      "resolved": "http://registry.npmjs.org/@types/q/-/q-0.0.32.tgz",
+      "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=",
+      "dev": true
+    },
+    "@types/selenium-webdriver": {
+      "version": "3.0.14",
+      "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.14.tgz",
+      "integrity": "sha1-CyCiNw5rG4MiycPfyqQJ5sfAwKk=",
+      "dev": true
+    },
+    "@types/source-list-map": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz",
+      "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==",
+      "dev": true
+    },
+    "@types/webpack-sources": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.5.tgz",
+      "integrity": "sha512-zfvjpp7jiafSmrzJ2/i3LqOyTYTuJ7u1KOXlKgDlvsj9Rr0x7ZiYu5lZbXwobL7lmsRNtPXlBfmaUD8eU2Hu8w==",
+      "dev": true,
+      "requires": {
+        "@types/node": "*",
+        "@types/source-list-map": "*",
+        "source-map": "^0.6.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "@webassemblyjs/ast": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz",
+      "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/helper-module-context": "1.7.11",
+        "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+        "@webassemblyjs/wast-parser": "1.7.11"
+      }
+    },
+    "@webassemblyjs/floating-point-hex-parser": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz",
+      "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-api-error": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz",
+      "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-buffer": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz",
+      "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-code-frame": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz",
+      "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/wast-printer": "1.7.11"
+      }
+    },
+    "@webassemblyjs/helper-fsm": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz",
+      "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-module-context": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz",
+      "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-wasm-bytecode": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz",
+      "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==",
+      "dev": true
+    },
+    "@webassemblyjs/helper-wasm-section": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz",
+      "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.7.11",
+        "@webassemblyjs/helper-buffer": "1.7.11",
+        "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+        "@webassemblyjs/wasm-gen": "1.7.11"
+      }
+    },
+    "@webassemblyjs/ieee754": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz",
+      "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==",
+      "dev": true,
+      "requires": {
+        "@xtuc/ieee754": "^1.2.0"
+      }
+    },
+    "@webassemblyjs/leb128": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz",
+      "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==",
+      "dev": true,
+      "requires": {
+        "@xtuc/long": "4.2.1"
+      }
+    },
+    "@webassemblyjs/utf8": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz",
+      "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==",
+      "dev": true
+    },
+    "@webassemblyjs/wasm-edit": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz",
+      "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.7.11",
+        "@webassemblyjs/helper-buffer": "1.7.11",
+        "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+        "@webassemblyjs/helper-wasm-section": "1.7.11",
+        "@webassemblyjs/wasm-gen": "1.7.11",
+        "@webassemblyjs/wasm-opt": "1.7.11",
+        "@webassemblyjs/wasm-parser": "1.7.11",
+        "@webassemblyjs/wast-printer": "1.7.11"
+      }
+    },
+    "@webassemblyjs/wasm-gen": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz",
+      "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.7.11",
+        "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+        "@webassemblyjs/ieee754": "1.7.11",
+        "@webassemblyjs/leb128": "1.7.11",
+        "@webassemblyjs/utf8": "1.7.11"
+      }
+    },
+    "@webassemblyjs/wasm-opt": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz",
+      "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.7.11",
+        "@webassemblyjs/helper-buffer": "1.7.11",
+        "@webassemblyjs/wasm-gen": "1.7.11",
+        "@webassemblyjs/wasm-parser": "1.7.11"
+      }
+    },
+    "@webassemblyjs/wasm-parser": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz",
+      "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.7.11",
+        "@webassemblyjs/helper-api-error": "1.7.11",
+        "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
+        "@webassemblyjs/ieee754": "1.7.11",
+        "@webassemblyjs/leb128": "1.7.11",
+        "@webassemblyjs/utf8": "1.7.11"
+      }
+    },
+    "@webassemblyjs/wast-parser": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz",
+      "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.7.11",
+        "@webassemblyjs/floating-point-hex-parser": "1.7.11",
+        "@webassemblyjs/helper-api-error": "1.7.11",
+        "@webassemblyjs/helper-code-frame": "1.7.11",
+        "@webassemblyjs/helper-fsm": "1.7.11",
+        "@xtuc/long": "4.2.1"
+      }
+    },
+    "@webassemblyjs/wast-printer": {
+      "version": "1.7.11",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz",
+      "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.7.11",
+        "@webassemblyjs/wast-parser": "1.7.11",
+        "@xtuc/long": "4.2.1"
+      }
+    },
+    "@xtuc/ieee754": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+      "integrity": "sha1-7vAUoxRa5Hehy8AM0eVSM23Ot5A=",
+      "dev": true
+    },
+    "@xtuc/long": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz",
+      "integrity": "sha1-XIXWYvdvodNFdXZsXc1mFavNMNg=",
+      "dev": true
+    },
+    "@yarnpkg/lockfile": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz",
+      "integrity": "sha1-53qX+9NFt22DJF7c0X05OxtB+zE=",
+      "dev": true
+    },
+    "JSONStream": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz",
+      "integrity": "sha1-MgjB8I06TZkmGrZPkjArwV4RHKA=",
+      "dev": true,
+      "requires": {
+        "jsonparse": "^1.2.0",
+        "through": ">=2.2.7 <3"
+      }
+    },
+    "abbrev": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+      "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=",
+      "dev": true,
+      "optional": true
+    },
+    "accepts": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
+      "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
+      "dev": true,
+      "requires": {
+        "mime-types": "~2.1.18",
+        "negotiator": "0.6.1"
+      }
+    },
+    "acorn": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.0.tgz",
+      "integrity": "sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw==",
+      "dev": true
+    },
+    "acorn-dynamic-import": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz",
+      "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==",
+      "dev": true
+    },
+    "adm-zip": {
+      "version": "0.4.13",
+      "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.13.tgz",
+      "integrity": "sha1-WX4vjMNnIVHhMH0+lc3bx1ZyMUo=",
+      "dev": true
+    },
+    "after": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz",
+      "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=",
+      "dev": true
+    },
+    "agent-base": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz",
+      "integrity": "sha1-2J5ZmfeXh1Z0wH2H8mD8Qeg+jKk=",
+      "dev": true,
+      "requires": {
+        "es6-promisify": "^5.0.0"
+      }
+    },
+    "agentkeepalive": {
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz",
+      "integrity": "sha1-oROSTdP6JKC8O3gQjEUMKr7gD2c=",
+      "dev": true,
+      "requires": {
+        "humanize-ms": "^1.2.1"
+      }
+    },
+    "ajv": {
+      "version": "6.7.0",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.7.0.tgz",
+      "integrity": "sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==",
+      "dev": true,
+      "requires": {
+        "fast-deep-equal": "^2.0.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
+      }
+    },
+    "ajv-errors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
+      "integrity": "sha1-81mGrOuRr63sQQL72FAUlQzvpk0=",
+      "dev": true
+    },
+    "ajv-keywords": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz",
+      "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==",
+      "dev": true
+    },
+    "amdefine": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+      "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+      "dev": true
+    },
+    "ansi-colors": {
+      "version": "3.2.3",
+      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz",
+      "integrity": "sha1-V9NbhoboUeLMBMQD8cACA5dqGBM=",
+      "dev": true
+    },
+    "ansi-escapes": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+      "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+      "dev": true
+    },
+    "ansi-html": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
+      "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=",
+      "dev": true
+    },
+    "ansi-regex": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+      "dev": true
+    },
+    "ansi-styles": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+      "requires": {
+        "color-convert": "^1.9.0"
+      }
+    },
+    "anymatch": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+      "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=",
+      "dev": true,
+      "requires": {
+        "micromatch": "^3.1.4",
+        "normalize-path": "^2.1.1"
+      }
+    },
+    "app-root-path": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.1.0.tgz",
+      "integrity": "sha1-mL9lmTJ+zqGZMJhm6BQDaP0uZGo=",
+      "dev": true
+    },
+    "append-transform": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz",
+      "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=",
+      "dev": true,
+      "requires": {
+        "default-require-extensions": "^1.0.0"
+      }
+    },
+    "aproba": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+      "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=",
+      "dev": true
+    },
+    "are-we-there-yet": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
+      "integrity": "sha1-SzXClE8GKov82mZBB2A1D+nd/CE=",
+      "dev": true,
+      "requires": {
+        "delegates": "^1.0.0",
+        "readable-stream": "^2.0.6"
+      }
+    },
+    "argparse": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+      "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=",
+      "dev": true,
+      "requires": {
+        "sprintf-js": "~1.0.2"
+      }
+    },
+    "arr-diff": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+      "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+      "dev": true
+    },
+    "arr-flatten": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+      "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=",
+      "dev": true
+    },
+    "arr-union": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+      "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+      "dev": true
+    },
+    "array-find-index": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+      "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+      "dev": true,
+      "optional": true
+    },
+    "array-flatten": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
+      "integrity": "sha1-JO+AoowaiTYX4hSbDG0NeIKTsJk=",
+      "dev": true
+    },
+    "array-slice": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",
+      "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=",
+      "dev": true
+    },
+    "array-union": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+      "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+      "dev": true,
+      "requires": {
+        "array-uniq": "^1.0.1"
+      }
+    },
+    "array-uniq": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+      "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+      "dev": true
+    },
+    "array-unique": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+      "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+      "dev": true
+    },
+    "arraybuffer.slice": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
+      "integrity": "sha1-O7xCdd1YTMGxCAm4nU6LY6aednU=",
+      "dev": true
+    },
+    "arrify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+      "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+      "dev": true
+    },
+    "asap": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+      "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
+      "dev": true,
+      "optional": true
+    },
+    "asn1": {
+      "version": "0.2.4",
+      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+      "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=",
+      "dev": true,
+      "requires": {
+        "safer-buffer": "~2.1.0"
+      }
+    },
+    "asn1.js": {
+      "version": "4.10.1",
+      "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+      "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.0.0",
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0"
+      }
+    },
+    "assert": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+      "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+      "dev": true,
+      "requires": {
+        "util": "0.10.3"
+      },
+      "dependencies": {
+        "inherits": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+          "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
+          "dev": true
+        },
+        "util": {
+          "version": "0.10.3",
+          "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz",
+          "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+          "dev": true,
+          "requires": {
+            "inherits": "2.0.1"
+          }
+        }
+      }
+    },
+    "assert-plus": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+      "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+      "dev": true
+    },
+    "assign-symbols": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+      "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+      "dev": true
+    },
+    "async": {
+      "version": "2.6.1",
+      "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
+      "integrity": "sha1-skWiPKcZMAROxT+kaqAKPofGphA=",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.17.10"
+      }
+    },
+    "async-each": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz",
+      "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
+      "dev": true
+    },
+    "async-foreach": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz",
+      "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
+      "dev": true,
+      "optional": true
+    },
+    "async-limiter": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
+      "integrity": "sha1-ePrtjD0HSrgfIrTphdeehzj3IPg=",
+      "dev": true
+    },
+    "asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+      "dev": true
+    },
+    "atob": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+      "integrity": "sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=",
+      "dev": true
+    },
+    "autoprefixer": {
+      "version": "9.4.6",
+      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.4.6.tgz",
+      "integrity": "sha512-Yp51mevbOEdxDUy5WjiKtpQaecqYq9OqZSL04rSoCiry7Tc5I9FEyo3bfxiTJc1DfHeKwSFCUYbBAiOQ2VGfiw==",
+      "dev": true,
+      "requires": {
+        "browserslist": "^4.4.1",
+        "caniuse-lite": "^1.0.30000929",
+        "normalize-range": "^0.1.2",
+        "num2fraction": "^1.2.2",
+        "postcss": "^7.0.13",
+        "postcss-value-parser": "^3.3.1"
+      }
+    },
+    "aws-sign2": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+      "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+      "dev": true
+    },
+    "aws4": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
+      "integrity": "sha1-8OAD2cqef1nHpQiUXXsu+aBKVC8=",
+      "dev": true
+    },
+    "babel-code-frame": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+      "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+      "dev": true,
+      "requires": {
+        "chalk": "^1.1.3",
+        "esutils": "^2.0.2",
+        "js-tokens": "^3.0.2"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+          "dev": true
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+          "dev": true
+        }
+      }
+    },
+    "babel-generator": {
+      "version": "6.26.1",
+      "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",
+      "integrity": "sha1-GERAjTuPDTWkBOp6wYDwh6YBvZA=",
+      "dev": true,
+      "requires": {
+        "babel-messages": "^6.23.0",
+        "babel-runtime": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "detect-indent": "^4.0.0",
+        "jsesc": "^1.3.0",
+        "lodash": "^4.17.4",
+        "source-map": "^0.5.7",
+        "trim-right": "^1.0.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.5.7",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+          "dev": true
+        }
+      }
+    },
+    "babel-messages": {
+      "version": "6.23.0",
+      "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+      "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.22.0"
+      }
+    },
+    "babel-runtime": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+      "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+      "dev": true,
+      "requires": {
+        "core-js": "^2.4.0",
+        "regenerator-runtime": "^0.11.0"
+      }
+    },
+    "babel-template": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+      "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.26.0",
+        "babel-traverse": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "babylon": "^6.18.0",
+        "lodash": "^4.17.4"
+      }
+    },
+    "babel-traverse": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+      "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+      "dev": true,
+      "requires": {
+        "babel-code-frame": "^6.26.0",
+        "babel-messages": "^6.23.0",
+        "babel-runtime": "^6.26.0",
+        "babel-types": "^6.26.0",
+        "babylon": "^6.18.0",
+        "debug": "^2.6.8",
+        "globals": "^9.18.0",
+        "invariant": "^2.2.2",
+        "lodash": "^4.17.4"
+      }
+    },
+    "babel-types": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+      "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+      "dev": true,
+      "requires": {
+        "babel-runtime": "^6.26.0",
+        "esutils": "^2.0.2",
+        "lodash": "^4.17.4",
+        "to-fast-properties": "^1.0.3"
+      }
+    },
+    "babylon": {
+      "version": "6.18.0",
+      "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+      "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=",
+      "dev": true
+    },
+    "backo2": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
+      "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=",
+      "dev": true
+    },
+    "balanced-match": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+      "dev": true
+    },
+    "base": {
+      "version": "0.11.2",
+      "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+      "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=",
+      "dev": true,
+      "requires": {
+        "cache-base": "^1.0.1",
+        "class-utils": "^0.3.5",
+        "component-emitter": "^1.2.1",
+        "define-property": "^1.0.0",
+        "isobject": "^3.0.1",
+        "mixin-deep": "^1.2.0",
+        "pascalcase": "^0.1.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        }
+      }
+    },
+    "base64-arraybuffer": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
+      "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=",
+      "dev": true
+    },
+    "base64-js": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
+      "integrity": "sha1-yrHmEY8FEJXli1KBrqjBzSK/wOM=",
+      "dev": true
+    },
+    "base64id": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz",
+      "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=",
+      "dev": true
+    },
+    "batch": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+      "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
+      "dev": true
+    },
+    "bcrypt-pbkdf": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+      "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+      "dev": true,
+      "requires": {
+        "tweetnacl": "^0.14.3"
+      }
+    },
+    "better-assert": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz",
+      "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=",
+      "dev": true,
+      "requires": {
+        "callsite": "1.0.0"
+      }
+    },
+    "big.js": {
+      "version": "5.2.2",
+      "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+      "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
+      "dev": true
+    },
+    "binary-extensions": {
+      "version": "1.13.0",
+      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz",
+      "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==",
+      "dev": true
+    },
+    "blob": {
+      "version": "0.0.5",
+      "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
+      "integrity": "sha1-1oDu7yX4zZGtUz9bAe7UjmTK9oM=",
+      "dev": true
+    },
+    "block-stream": {
+      "version": "0.0.9",
+      "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
+      "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "inherits": "~2.0.0"
+      }
+    },
+    "blocking-proxy": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz",
+      "integrity": "sha1-gdb9H+E6TA1pV99/kbdemNrEDLI=",
+      "dev": true,
+      "requires": {
+        "minimist": "^1.2.0"
+      }
+    },
+    "bluebird": {
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz",
+      "integrity": "sha1-fQHG+WFsmlGrD4xUmnnf5uwz76c=",
+      "dev": true
+    },
+    "bn.js": {
+      "version": "4.11.8",
+      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+      "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=",
+      "dev": true
+    },
+    "body-parser": {
+      "version": "1.18.3",
+      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
+      "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
+      "dev": true,
+      "requires": {
+        "bytes": "3.0.0",
+        "content-type": "~1.0.4",
+        "debug": "2.6.9",
+        "depd": "~1.1.2",
+        "http-errors": "~1.6.3",
+        "iconv-lite": "0.4.23",
+        "on-finished": "~2.3.0",
+        "qs": "6.5.2",
+        "raw-body": "2.3.3",
+        "type-is": "~1.6.16"
+      }
+    },
+    "bonjour": {
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
+      "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
+      "dev": true,
+      "requires": {
+        "array-flatten": "^2.1.0",
+        "deep-equal": "^1.0.1",
+        "dns-equal": "^1.0.0",
+        "dns-txt": "^2.0.2",
+        "multicast-dns": "^6.0.1",
+        "multicast-dns-service-types": "^1.1.0"
+      }
+    },
+    "boolbase": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+      "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=",
+      "dev": true
+    },
+    "bootstrap": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.1.3.tgz",
+      "integrity": "sha1-DrNxryyESOjCEEEdDLgkpkCaEr4="
+    },
+    "brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
+      "dev": true,
+      "requires": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "braces": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+      "integrity": "sha1-WXn9PxTNUxVl5fot8av/8d+u5yk=",
+      "dev": true,
+      "requires": {
+        "arr-flatten": "^1.1.0",
+        "array-unique": "^0.3.2",
+        "extend-shallow": "^2.0.1",
+        "fill-range": "^4.0.0",
+        "isobject": "^3.0.1",
+        "repeat-element": "^1.1.2",
+        "snapdragon": "^0.8.1",
+        "snapdragon-node": "^2.0.1",
+        "split-string": "^3.0.2",
+        "to-regex": "^3.0.1"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "brorand": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+      "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
+      "dev": true
+    },
+    "browserify-aes": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+      "integrity": "sha1-Mmc0ZC9APavDADIJhTu3CtQo70g=",
+      "dev": true,
+      "requires": {
+        "buffer-xor": "^1.0.3",
+        "cipher-base": "^1.0.0",
+        "create-hash": "^1.1.0",
+        "evp_bytestokey": "^1.0.3",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "browserify-cipher": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+      "integrity": "sha1-jWR0wbhwv9q807z8wZNKEOlPFfA=",
+      "dev": true,
+      "requires": {
+        "browserify-aes": "^1.0.4",
+        "browserify-des": "^1.0.0",
+        "evp_bytestokey": "^1.0.0"
+      }
+    },
+    "browserify-des": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
+      "integrity": "sha1-OvTx9Zg5QDVy8cZiBDdfen9wPpw=",
+      "dev": true,
+      "requires": {
+        "cipher-base": "^1.0.1",
+        "des.js": "^1.0.0",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.1.2"
+      }
+    },
+    "browserify-rsa": {
+      "version": "4.0.1",
+      "resolved": "http://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+      "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.1.0",
+        "randombytes": "^2.0.1"
+      }
+    },
+    "browserify-sign": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
+      "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.1.1",
+        "browserify-rsa": "^4.0.0",
+        "create-hash": "^1.1.0",
+        "create-hmac": "^1.1.2",
+        "elliptic": "^6.0.0",
+        "inherits": "^2.0.1",
+        "parse-asn1": "^5.0.0"
+      }
+    },
+    "browserify-zlib": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
+      "integrity": "sha1-KGlFnZqjviRf6P4sofRuLn9U1z8=",
+      "dev": true,
+      "requires": {
+        "pako": "~1.0.5"
+      }
+    },
+    "browserslist": {
+      "version": "4.4.1",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.1.tgz",
+      "integrity": "sha512-pEBxEXg7JwaakBXjATYw/D1YZh4QUSCX/Mnd/wnqSRPPSi1U39iDhDoKGoBUcraKdxDlrYqJxSI5nNvD+dWP2A==",
+      "dev": true,
+      "requires": {
+        "caniuse-lite": "^1.0.30000929",
+        "electron-to-chromium": "^1.3.103",
+        "node-releases": "^1.1.3"
+      }
+    },
+    "browserstack": {
+      "version": "1.5.2",
+      "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.2.tgz",
+      "integrity": "sha512-+6AFt9HzhKykcPF79W6yjEUJcdvZOV0lIXdkORXMJftGrDl0OKWqRF4GHqpDNkxiceDT/uB7Fb/aDwktvXX7dg==",
+      "dev": true,
+      "requires": {
+        "https-proxy-agent": "^2.2.1"
+      }
+    },
+    "buffer": {
+      "version": "4.9.1",
+      "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
+      "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+      "dev": true,
+      "requires": {
+        "base64-js": "^1.0.2",
+        "ieee754": "^1.1.4",
+        "isarray": "^1.0.0"
+      }
+    },
+    "buffer-alloc": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
+      "integrity": "sha1-iQ3ZDZI6hz4I4Q5f1RpX5bfM4Ow=",
+      "dev": true,
+      "requires": {
+        "buffer-alloc-unsafe": "^1.1.0",
+        "buffer-fill": "^1.0.0"
+      }
+    },
+    "buffer-alloc-unsafe": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
+      "integrity": "sha1-vX3CauKXLQ7aJTvgYdupkjScGfA=",
+      "dev": true
+    },
+    "buffer-fill": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
+      "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
+      "dev": true
+    },
+    "buffer-from": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+      "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=",
+      "dev": true
+    },
+    "buffer-indexof": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
+      "integrity": "sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow=",
+      "dev": true
+    },
+    "buffer-xor": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+      "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=",
+      "dev": true
+    },
+    "builtin-modules": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+      "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+      "dev": true
+    },
+    "builtin-status-codes": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
+      "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=",
+      "dev": true
+    },
+    "builtins": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz",
+      "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=",
+      "dev": true
+    },
+    "bytes": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+      "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
+      "dev": true
+    },
+    "cacache": {
+      "version": "10.0.4",
+      "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz",
+      "integrity": "sha1-ZFI2eZnv+dQYiu/ZoU6dfGomNGA=",
+      "dev": true,
+      "requires": {
+        "bluebird": "^3.5.1",
+        "chownr": "^1.0.1",
+        "glob": "^7.1.2",
+        "graceful-fs": "^4.1.11",
+        "lru-cache": "^4.1.1",
+        "mississippi": "^2.0.0",
+        "mkdirp": "^0.5.1",
+        "move-concurrently": "^1.0.1",
+        "promise-inflight": "^1.0.1",
+        "rimraf": "^2.6.2",
+        "ssri": "^5.2.4",
+        "unique-filename": "^1.1.0",
+        "y18n": "^4.0.0"
+      }
+    },
+    "cache-base": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+      "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=",
+      "dev": true,
+      "requires": {
+        "collection-visit": "^1.0.0",
+        "component-emitter": "^1.2.1",
+        "get-value": "^2.0.6",
+        "has-value": "^1.0.0",
+        "isobject": "^3.0.1",
+        "set-value": "^2.0.0",
+        "to-object-path": "^0.3.0",
+        "union-value": "^1.0.0",
+        "unset-value": "^1.0.0"
+      }
+    },
+    "callsite": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz",
+      "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=",
+      "dev": true
+    },
+    "camelcase": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+      "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+      "dev": true,
+      "optional": true
+    },
+    "camelcase-keys": {
+      "version": "2.1.0",
+      "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+      "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "camelcase": "^2.0.0",
+        "map-obj": "^1.0.0"
+      }
+    },
+    "caniuse-lite": {
+      "version": "1.0.30000936",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000936.tgz",
+      "integrity": "sha512-orX4IdpbFhdNO7bTBhSbahp1EBpqzBc+qrvTRVUFfZgA4zta7TdM6PN5ZxkEUgDnz36m+PfWGcdX7AVfFWItJw==",
+      "dev": true
+    },
+    "canonical-path": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz",
+      "integrity": "sha1-/LRwwjlY3vhQgYVr56hukE8YDR0=",
+      "dev": true
+    },
+    "caseless": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+      "dev": true
+    },
+    "chalk": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+      "integrity": "sha1-GMSasWoDe26wFSzIPjRxM4IVtm4=",
+      "requires": {
+        "ansi-styles": "^3.2.1",
+        "escape-string-regexp": "^1.0.5",
+        "supports-color": "^5.3.0"
+      }
+    },
+    "chardet": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+      "integrity": "sha1-kAlISfCTfy7twkJdDSip5fDLrZ4=",
+      "dev": true
+    },
+    "cheerio": {
+      "version": "1.0.0-rc.2",
+      "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz",
+      "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=",
+      "dev": true,
+      "requires": {
+        "css-select": "~1.2.0",
+        "dom-serializer": "~0.1.0",
+        "entities": "~1.1.1",
+        "htmlparser2": "^3.9.1",
+        "lodash": "^4.15.0",
+        "parse5": "^3.0.1"
+      },
+      "dependencies": {
+        "parse5": {
+          "version": "3.0.3",
+          "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
+          "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==",
+          "dev": true,
+          "requires": {
+            "@types/node": "*"
+          }
+        }
+      }
+    },
+    "chokidar": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
+      "integrity": "sha1-NW/04rDo5D4yLRijckYLvPOszSY=",
+      "dev": true,
+      "requires": {
+        "anymatch": "^2.0.0",
+        "async-each": "^1.0.0",
+        "braces": "^2.3.0",
+        "fsevents": "^1.2.2",
+        "glob-parent": "^3.1.0",
+        "inherits": "^2.0.1",
+        "is-binary-path": "^1.0.0",
+        "is-glob": "^4.0.0",
+        "lodash.debounce": "^4.0.8",
+        "normalize-path": "^2.1.1",
+        "path-is-absolute": "^1.0.0",
+        "readdirp": "^2.0.0",
+        "upath": "^1.0.5"
+      }
+    },
+    "chownr": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz",
+      "integrity": "sha1-VHJri4//TfBTxCGH6AH7RBLfFJQ=",
+      "dev": true
+    },
+    "chrome-trace-event": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz",
+      "integrity": "sha1-Rakb0sIMlBHwljtarrmhuV4JzEg=",
+      "dev": true,
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "cipher-base": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+      "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "circular-dependency-plugin": {
+      "version": "5.0.2",
+      "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.0.2.tgz",
+      "integrity": "sha1-2haMCzfntDVj+5+RLBwAfCEzie8=",
+      "dev": true
+    },
+    "circular-json": {
+      "version": "0.5.9",
+      "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz",
+      "integrity": "sha1-kydjroj0996teg0JyKUaR0OlOx0=",
+      "dev": true
+    },
+    "class-transformer": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.1.6.tgz",
+      "integrity": "sha1-ETnBSTEcDITe08AOKoeeNHn2D6A="
+    },
+    "class-utils": {
+      "version": "0.3.6",
+      "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+      "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=",
+      "dev": true,
+      "requires": {
+        "arr-union": "^3.1.0",
+        "define-property": "^0.2.5",
+        "isobject": "^3.0.0",
+        "static-extend": "^0.1.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        }
+      }
+    },
+    "clean-css": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz",
+      "integrity": "sha1-LUEe92uFabbQyEBo2r6FsKpeXBc=",
+      "dev": true,
+      "requires": {
+        "source-map": "~0.6.0"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "cli-cursor": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+      "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+      "dev": true,
+      "requires": {
+        "restore-cursor": "^2.0.0"
+      }
+    },
+    "cli-width": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+      "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+      "dev": true
+    },
+    "cliui": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+      "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+      "dev": true,
+      "requires": {
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1",
+        "wrap-ansi": "^2.0.0"
+      }
+    },
+    "clone": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+      "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
+      "dev": true
+    },
+    "clone-deep": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz",
+      "integrity": "sha1-ANs6Hhc2VnMNEYjD1qztbX6pdxM=",
+      "dev": true,
+      "requires": {
+        "for-own": "^1.0.0",
+        "is-plain-object": "^2.0.4",
+        "kind-of": "^6.0.0",
+        "shallow-clone": "^1.0.0"
+      }
+    },
+    "co": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+      "dev": true
+    },
+    "code-point-at": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+      "dev": true
+    },
+    "codelyzer": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-4.5.0.tgz",
+      "integrity": "sha1-pl3e7soolGUyU6ib+iKRGP+fWbE=",
+      "dev": true,
+      "requires": {
+        "app-root-path": "^2.1.0",
+        "css-selector-tokenizer": "^0.7.0",
+        "cssauron": "^1.4.0",
+        "semver-dsl": "^1.0.1",
+        "source-map": "^0.5.7",
+        "sprintf-js": "^1.1.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.5.7",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+          "dev": true
+        },
+        "sprintf-js": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
+          "integrity": "sha1-2hdlJiv4wPVxdJ8q1sJjACB65nM=",
+          "dev": true
+        }
+      }
+    },
+    "collection-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+      "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+      "dev": true,
+      "requires": {
+        "map-visit": "^1.0.0",
+        "object-visit": "^1.0.0"
+      }
+    },
+    "color-convert": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+      "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
+      "requires": {
+        "color-name": "1.1.3"
+      }
+    },
+    "color-name": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+    },
+    "colors": {
+      "version": "1.1.2",
+      "resolved": "http://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+      "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
+      "dev": true
+    },
+    "combine-lists": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz",
+      "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.5.0"
+      }
+    },
+    "combined-stream": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
+      "integrity": "sha1-LR0kMXr7ir6V1tLAsHtXgTU52Cg=",
+      "dev": true,
+      "requires": {
+        "delayed-stream": "~1.0.0"
+      }
+    },
+    "commander": {
+      "version": "2.17.1",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
+      "integrity": "sha1-vXerfebelCBc6sxy8XFtKfIKd78=",
+      "dev": true
+    },
+    "commondir": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+      "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+      "dev": true
+    },
+    "component-bind": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz",
+      "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=",
+      "dev": true
+    },
+    "component-emitter": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+      "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+      "dev": true
+    },
+    "component-inherit": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz",
+      "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=",
+      "dev": true
+    },
+    "compressible": {
+      "version": "2.0.15",
+      "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz",
+      "integrity": "sha1-hXqasKfloH2Ng37UP+Le//ZP4hI=",
+      "dev": true,
+      "requires": {
+        "mime-db": ">= 1.36.0 < 2"
+      }
+    },
+    "compression": {
+      "version": "1.7.3",
+      "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz",
+      "integrity": "sha1-J+DhdqryYPfywoE8PkQK258Zk9s=",
+      "dev": true,
+      "requires": {
+        "accepts": "~1.3.5",
+        "bytes": "3.0.0",
+        "compressible": "~2.0.14",
+        "debug": "2.6.9",
+        "on-headers": "~1.0.1",
+        "safe-buffer": "5.1.2",
+        "vary": "~1.1.2"
+      }
+    },
+    "concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+      "dev": true
+    },
+    "concat-stream": {
+      "version": "1.6.2",
+      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+      "integrity": "sha1-kEvfGUzTEi/Gdcd/xKw9T/D9GjQ=",
+      "dev": true,
+      "requires": {
+        "buffer-from": "^1.0.0",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.2.2",
+        "typedarray": "^0.0.6"
+      }
+    },
+    "connect": {
+      "version": "3.6.6",
+      "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz",
+      "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=",
+      "dev": true,
+      "requires": {
+        "debug": "2.6.9",
+        "finalhandler": "1.1.0",
+        "parseurl": "~1.3.2",
+        "utils-merge": "1.0.1"
+      },
+      "dependencies": {
+        "finalhandler": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz",
+          "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=",
+          "dev": true,
+          "requires": {
+            "debug": "2.6.9",
+            "encodeurl": "~1.0.1",
+            "escape-html": "~1.0.3",
+            "on-finished": "~2.3.0",
+            "parseurl": "~1.3.2",
+            "statuses": "~1.3.1",
+            "unpipe": "~1.0.0"
+          }
+        },
+        "statuses": {
+          "version": "1.3.1",
+          "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
+          "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
+          "dev": true
+        }
+      }
+    },
+    "connect-history-api-fallback": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz",
+      "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==",
+      "dev": true
+    },
+    "console-browserify": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+      "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+      "dev": true,
+      "requires": {
+        "date-now": "^0.1.4"
+      }
+    },
+    "console-control-strings": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+      "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
+      "dev": true
+    },
+    "constants-browserify": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+      "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=",
+      "dev": true
+    },
+    "content-disposition": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
+      "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=",
+      "dev": true
+    },
+    "content-type": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+      "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=",
+      "dev": true
+    },
+    "convert-source-map": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
+      "integrity": "sha1-UbU3qMQ+DwTewZk7/83VBOdYrCA=",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "~5.1.1"
+      }
+    },
+    "cookie": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
+      "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=",
+      "dev": true
+    },
+    "cookie-signature": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+      "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+      "dev": true
+    },
+    "copy-concurrently": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+      "integrity": "sha1-kilzmMrjSTf8r9bsgTnBgFHwteA=",
+      "dev": true,
+      "requires": {
+        "aproba": "^1.1.1",
+        "fs-write-stream-atomic": "^1.0.8",
+        "iferr": "^0.1.5",
+        "mkdirp": "^0.5.1",
+        "rimraf": "^2.5.4",
+        "run-queue": "^1.0.0"
+      }
+    },
+    "copy-descriptor": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+      "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+      "dev": true
+    },
+    "copy-webpack-plugin": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz",
+      "integrity": "sha1-5/QN2KaEd9QF3Rt6hUquMksVi64=",
+      "dev": true,
+      "requires": {
+        "cacache": "^10.0.4",
+        "find-cache-dir": "^1.0.0",
+        "globby": "^7.1.1",
+        "is-glob": "^4.0.0",
+        "loader-utils": "^1.1.0",
+        "minimatch": "^3.0.4",
+        "p-limit": "^1.0.0",
+        "serialize-javascript": "^1.4.0"
+      },
+      "dependencies": {
+        "loader-utils": {
+          "version": "1.2.3",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+          "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^2.0.0",
+            "json5": "^1.0.1"
+          }
+        }
+      }
+    },
+    "core-js": {
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.0.tgz",
+      "integrity": "sha1-HjB5Pp7leCswfjf/oi2g6s3dhNQ="
+    },
+    "core-util-is": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+      "dev": true
+    },
+    "cosmiconfig": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz",
+      "integrity": "sha1-dgORVJWAu9LfHlYrwXexPCkJctw=",
+      "dev": true,
+      "requires": {
+        "is-directory": "^0.3.1",
+        "js-yaml": "^3.9.0",
+        "parse-json": "^4.0.0",
+        "require-from-string": "^2.0.1"
+      },
+      "dependencies": {
+        "parse-json": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+          "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+          "dev": true,
+          "requires": {
+            "error-ex": "^1.3.1",
+            "json-parse-better-errors": "^1.0.1"
+          }
+        }
+      }
+    },
+    "create-ecdh": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
+      "integrity": "sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8=",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.1.0",
+        "elliptic": "^6.0.0"
+      }
+    },
+    "create-hash": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
+      "integrity": "sha1-iJB4rxGmN1a8+1m9IhmWvjqe8ZY=",
+      "dev": true,
+      "requires": {
+        "cipher-base": "^1.0.1",
+        "inherits": "^2.0.1",
+        "md5.js": "^1.3.4",
+        "ripemd160": "^2.0.1",
+        "sha.js": "^2.4.0"
+      }
+    },
+    "create-hmac": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
+      "integrity": "sha1-aRcMeLOrlXFHsriwRXLkfq0iQ/8=",
+      "dev": true,
+      "requires": {
+        "cipher-base": "^1.0.3",
+        "create-hash": "^1.1.0",
+        "inherits": "^2.0.1",
+        "ripemd160": "^2.0.0",
+        "safe-buffer": "^5.0.1",
+        "sha.js": "^2.4.8"
+      }
+    },
+    "cross-spawn": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz",
+      "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "lru-cache": "^4.0.1",
+        "which": "^1.2.9"
+      }
+    },
+    "crypto-browserify": {
+      "version": "3.12.0",
+      "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+      "integrity": "sha1-OWz58xN/A+S45TLFj2mCVOAPgOw=",
+      "dev": true,
+      "requires": {
+        "browserify-cipher": "^1.0.0",
+        "browserify-sign": "^4.0.0",
+        "create-ecdh": "^4.0.0",
+        "create-hash": "^1.1.0",
+        "create-hmac": "^1.1.0",
+        "diffie-hellman": "^5.0.0",
+        "inherits": "^2.0.1",
+        "pbkdf2": "^3.0.3",
+        "public-encrypt": "^4.0.0",
+        "randombytes": "^2.0.0",
+        "randomfill": "^1.0.3"
+      }
+    },
+    "css-parse": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz",
+      "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=",
+      "dev": true
+    },
+    "css-select": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+      "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+      "dev": true,
+      "requires": {
+        "boolbase": "~1.0.0",
+        "css-what": "2.1",
+        "domutils": "1.5.1",
+        "nth-check": "~1.0.1"
+      }
+    },
+    "css-selector-tokenizer": {
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz",
+      "integrity": "sha1-oXcnGovKUBkXL0+JH8bu2cv2jV0=",
+      "dev": true,
+      "requires": {
+        "cssesc": "^0.1.0",
+        "fastparse": "^1.1.1",
+        "regexpu-core": "^1.0.0"
+      }
+    },
+    "css-what": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz",
+      "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==",
+      "dev": true
+    },
+    "cssauron": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz",
+      "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=",
+      "dev": true,
+      "requires": {
+        "through": "X.X.X"
+      }
+    },
+    "cssesc": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz",
+      "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=",
+      "dev": true
+    },
+    "currently-unhandled": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+      "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "array-find-index": "^1.0.1"
+      }
+    },
+    "custom-event": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz",
+      "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=",
+      "dev": true
+    },
+    "cyclist": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz",
+      "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=",
+      "dev": true
+    },
+    "dashdash": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+      "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0"
+      }
+    },
+    "date-format": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz",
+      "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=",
+      "dev": true
+    },
+    "date-now": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+      "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=",
+      "dev": true
+    },
+    "debug": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+      "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+      "dev": true,
+      "requires": {
+        "ms": "2.0.0"
+      }
+    },
+    "decamelize": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+      "dev": true
+    },
+    "decode-uri-component": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+      "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+      "dev": true
+    },
+    "deep-equal": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
+      "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=",
+      "dev": true
+    },
+    "default-gateway": {
+      "version": "2.7.2",
+      "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-2.7.2.tgz",
+      "integrity": "sha1-t+8znl4CSwRUZ69APVA0jbRkLQ8=",
+      "dev": true,
+      "requires": {
+        "execa": "^0.10.0",
+        "ip-regex": "^2.1.0"
+      }
+    },
+    "default-require-extensions": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz",
+      "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=",
+      "dev": true,
+      "requires": {
+        "strip-bom": "^2.0.0"
+      }
+    },
+    "define-property": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+      "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=",
+      "dev": true,
+      "requires": {
+        "is-descriptor": "^1.0.2",
+        "isobject": "^3.0.1"
+      },
+      "dependencies": {
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        }
+      }
+    },
+    "del": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz",
+      "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
+      "dev": true,
+      "requires": {
+        "globby": "^6.1.0",
+        "is-path-cwd": "^1.0.0",
+        "is-path-in-cwd": "^1.0.0",
+        "p-map": "^1.1.1",
+        "pify": "^3.0.0",
+        "rimraf": "^2.2.8"
+      },
+      "dependencies": {
+        "globby": {
+          "version": "6.1.0",
+          "resolved": "http://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+          "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+          "dev": true,
+          "requires": {
+            "array-union": "^1.0.1",
+            "glob": "^7.0.3",
+            "object-assign": "^4.0.1",
+            "pify": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
+          },
+          "dependencies": {
+            "pify": {
+              "version": "2.3.0",
+              "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+              "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+              "dev": true
+            }
+          }
+        }
+      }
+    },
+    "delayed-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+      "dev": true
+    },
+    "delegates": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+      "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
+      "dev": true
+    },
+    "depd": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+      "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+      "dev": true
+    },
+    "dependency-graph": {
+      "version": "0.7.2",
+      "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.7.2.tgz",
+      "integrity": "sha1-kdud5utyaZIJ2IrqTB/VIhysHEk=",
+      "dev": true
+    },
+    "des.js": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
+      "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0"
+      }
+    },
+    "destroy": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
+      "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
+      "dev": true
+    },
+    "detect-indent": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+      "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+      "dev": true,
+      "requires": {
+        "repeating": "^2.0.0"
+      }
+    },
+    "detect-node": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
+      "integrity": "sha1-AU7o+PZpxcWAI9pkuBecCDooxGw=",
+      "dev": true
+    },
+    "di": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz",
+      "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=",
+      "dev": true
+    },
+    "diff": {
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+      "integrity": "sha1-gAwN0eCov7yVg1wgKtIg/jF+WhI=",
+      "dev": true
+    },
+    "diffie-hellman": {
+      "version": "5.0.3",
+      "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+      "integrity": "sha1-QOjumPVaIUlgcUaSHGPhrl89KHU=",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.1.0",
+        "miller-rabin": "^4.0.0",
+        "randombytes": "^2.0.0"
+      }
+    },
+    "dir-glob": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
+      "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==",
+      "dev": true,
+      "requires": {
+        "path-type": "^3.0.0"
+      }
+    },
+    "dns-equal": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
+      "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
+      "dev": true
+    },
+    "dns-packet": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz",
+      "integrity": "sha1-EqpCaYEHW+UAuRDu3NC0fdfe2lo=",
+      "dev": true,
+      "requires": {
+        "ip": "^1.1.0",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "dns-txt": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
+      "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
+      "dev": true,
+      "requires": {
+        "buffer-indexof": "^1.0.0"
+      }
+    },
+    "dom-serialize": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz",
+      "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=",
+      "dev": true,
+      "requires": {
+        "custom-event": "~1.0.0",
+        "ent": "~2.2.0",
+        "extend": "^3.0.0",
+        "void-elements": "^2.0.0"
+      }
+    },
+    "dom-serializer": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz",
+      "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==",
+      "dev": true,
+      "requires": {
+        "domelementtype": "^1.3.0",
+        "entities": "^1.1.1"
+      }
+    },
+    "domain-browser": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+      "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=",
+      "dev": true
+    },
+    "domelementtype": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+      "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==",
+      "dev": true
+    },
+    "domhandler": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+      "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+      "dev": true,
+      "requires": {
+        "domelementtype": "1"
+      }
+    },
+    "domutils": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+      "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+      "dev": true,
+      "requires": {
+        "dom-serializer": "0",
+        "domelementtype": "1"
+      }
+    },
+    "duplexify": {
+      "version": "3.7.1",
+      "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+      "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+      "dev": true,
+      "requires": {
+        "end-of-stream": "^1.0.0",
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0",
+        "stream-shift": "^1.0.0"
+      }
+    },
+    "ecc-jsbn": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+      "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+      "dev": true,
+      "requires": {
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.1.0"
+      }
+    },
+    "ee-first": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+      "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+      "dev": true
+    },
+    "electron-to-chromium": {
+      "version": "1.3.113",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz",
+      "integrity": "sha512-De+lPAxEcpxvqPTyZAXELNpRZXABRxf+uL/rSykstQhzj/B0l1150G/ExIIxKc16lI89Hgz81J0BHAcbTqK49g==",
+      "dev": true
+    },
+    "elliptic": {
+      "version": "6.4.1",
+      "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
+      "integrity": "sha1-wtC3d2kRuGcixjLDwGxg8vgZk5o=",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.4.0",
+        "brorand": "^1.0.1",
+        "hash.js": "^1.0.0",
+        "hmac-drbg": "^1.0.0",
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0",
+        "minimalistic-crypto-utils": "^1.0.0"
+      }
+    },
+    "emojis-list": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+      "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+      "dev": true
+    },
+    "encodeurl": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+      "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+      "dev": true
+    },
+    "encoding": {
+      "version": "0.1.12",
+      "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
+      "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
+      "dev": true,
+      "requires": {
+        "iconv-lite": "~0.4.13"
+      }
+    },
+    "end-of-stream": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
+      "integrity": "sha1-7SljTRm6ukY7bOa4CjchPqtx7EM=",
+      "dev": true,
+      "requires": {
+        "once": "^1.4.0"
+      }
+    },
+    "engine.io": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz",
+      "integrity": "sha1-tgKBw1SEpw7gNR6g6/+D7IyVIqI=",
+      "dev": true,
+      "requires": {
+        "accepts": "~1.3.4",
+        "base64id": "1.0.0",
+        "cookie": "0.3.1",
+        "debug": "~3.1.0",
+        "engine.io-parser": "~2.1.0",
+        "ws": "~3.3.1"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
+    "engine.io-client": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz",
+      "integrity": "sha1-b1TAR13khxWKGnx30QF4cItq3TY=",
+      "dev": true,
+      "requires": {
+        "component-emitter": "1.2.1",
+        "component-inherit": "0.0.3",
+        "debug": "~3.1.0",
+        "engine.io-parser": "~2.1.1",
+        "has-cors": "1.1.0",
+        "indexof": "0.0.1",
+        "parseqs": "0.0.5",
+        "parseuri": "0.0.5",
+        "ws": "~3.3.1",
+        "xmlhttprequest-ssl": "~1.5.4",
+        "yeast": "0.1.2"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
+    "engine.io-parser": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz",
+      "integrity": "sha1-dXq5cPvy37Mse3SwMyFtVznveaY=",
+      "dev": true,
+      "requires": {
+        "after": "0.8.2",
+        "arraybuffer.slice": "~0.0.7",
+        "base64-arraybuffer": "0.1.5",
+        "blob": "0.0.5",
+        "has-binary2": "~1.0.2"
+      }
+    },
+    "enhanced-resolve": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz",
+      "integrity": "sha1-Qcfgv9/nSsH/4eV61qXGyfN0Kn8=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "memory-fs": "^0.4.0",
+        "tapable": "^1.0.0"
+      }
+    },
+    "ent": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
+      "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=",
+      "dev": true
+    },
+    "entities": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+      "integrity": "sha1-vfpzUplmTfr9NFKe1PhSKidf6lY=",
+      "dev": true
+    },
+    "err-code": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz",
+      "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=",
+      "dev": true
+    },
+    "errno": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
+      "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=",
+      "dev": true,
+      "requires": {
+        "prr": "~1.0.1"
+      }
+    },
+    "error-ex": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+      "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=",
+      "dev": true,
+      "requires": {
+        "is-arrayish": "^0.2.1"
+      }
+    },
+    "es6-promise": {
+      "version": "4.2.5",
+      "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz",
+      "integrity": "sha1-2m0NVpLvtGHggsFIF/4kJ9j10FQ=",
+      "dev": true
+    },
+    "es6-promisify": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
+      "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
+      "dev": true,
+      "requires": {
+        "es6-promise": "^4.0.3"
+      }
+    },
+    "escape-html": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+      "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+      "dev": true
+    },
+    "escape-string-regexp": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+    },
+    "eslint-scope": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz",
+      "integrity": "sha1-UL8wcekzi83EMzF5Sgy1M/ATYXI=",
+      "dev": true,
+      "requires": {
+        "esrecurse": "^4.1.0",
+        "estraverse": "^4.1.1"
+      }
+    },
+    "esrecurse": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+      "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=",
+      "dev": true,
+      "requires": {
+        "estraverse": "^4.1.0"
+      }
+    },
+    "estraverse": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+      "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+      "dev": true
+    },
+    "esutils": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+      "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+      "dev": true
+    },
+    "etag": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+      "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+      "dev": true
+    },
+    "eventemitter3": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz",
+      "integrity": "sha1-CQtNbNvWRe0Qv3UNS1QHlC17oWM=",
+      "dev": true
+    },
+    "events": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz",
+      "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==",
+      "dev": true
+    },
+    "eventsource": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz",
+      "integrity": "sha1-j7xyyT/NNAiAkLwKTmT0tc7m2NA=",
+      "dev": true,
+      "requires": {
+        "original": "^1.0.0"
+      }
+    },
+    "evp_bytestokey": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+      "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=",
+      "dev": true,
+      "requires": {
+        "md5.js": "^1.3.4",
+        "safe-buffer": "^5.1.1"
+      }
+    },
+    "execa": {
+      "version": "0.10.0",
+      "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz",
+      "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==",
+      "dev": true,
+      "requires": {
+        "cross-spawn": "^6.0.0",
+        "get-stream": "^3.0.0",
+        "is-stream": "^1.1.0",
+        "npm-run-path": "^2.0.0",
+        "p-finally": "^1.0.0",
+        "signal-exit": "^3.0.0",
+        "strip-eof": "^1.0.0"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "6.0.5",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+          "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+          "dev": true,
+          "requires": {
+            "nice-try": "^1.0.4",
+            "path-key": "^2.0.1",
+            "semver": "^5.5.0",
+            "shebang-command": "^1.2.0",
+            "which": "^1.2.9"
+          }
+        }
+      }
+    },
+    "exit": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+      "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
+      "dev": true
+    },
+    "expand-braces": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz",
+      "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=",
+      "dev": true,
+      "requires": {
+        "array-slice": "^0.2.3",
+        "array-unique": "^0.2.1",
+        "braces": "^0.1.2"
+      },
+      "dependencies": {
+        "array-unique": {
+          "version": "0.2.1",
+          "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
+          "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
+          "dev": true
+        },
+        "braces": {
+          "version": "0.1.5",
+          "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz",
+          "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=",
+          "dev": true,
+          "requires": {
+            "expand-range": "^0.1.0"
+          }
+        },
+        "expand-range": {
+          "version": "0.1.1",
+          "resolved": "http://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz",
+          "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=",
+          "dev": true,
+          "requires": {
+            "is-number": "^0.1.1",
+            "repeat-string": "^0.2.2"
+          }
+        },
+        "is-number": {
+          "version": "0.1.1",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz",
+          "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=",
+          "dev": true
+        },
+        "repeat-string": {
+          "version": "0.2.2",
+          "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz",
+          "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=",
+          "dev": true
+        }
+      }
+    },
+    "expand-brackets": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+      "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+      "dev": true,
+      "requires": {
+        "debug": "^2.3.3",
+        "define-property": "^0.2.5",
+        "extend-shallow": "^2.0.1",
+        "posix-character-classes": "^0.1.0",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        },
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "expand-range": {
+      "version": "1.8.2",
+      "resolved": "http://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz",
+      "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
+      "dev": true,
+      "requires": {
+        "fill-range": "^2.1.0"
+      },
+      "dependencies": {
+        "fill-range": {
+          "version": "2.2.4",
+          "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz",
+          "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==",
+          "dev": true,
+          "requires": {
+            "is-number": "^2.1.0",
+            "isobject": "^2.0.0",
+            "randomatic": "^3.0.0",
+            "repeat-element": "^1.1.2",
+            "repeat-string": "^1.5.2"
+          }
+        },
+        "is-number": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz",
+          "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          }
+        },
+        "isobject": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+          "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+          "dev": true,
+          "requires": {
+            "isarray": "1.0.0"
+          }
+        },
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "express": {
+      "version": "4.16.4",
+      "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz",
+      "integrity": "sha1-/d72GSYQniTFFeqX/S8b2/Yt8S4=",
+      "dev": true,
+      "requires": {
+        "accepts": "~1.3.5",
+        "array-flatten": "1.1.1",
+        "body-parser": "1.18.3",
+        "content-disposition": "0.5.2",
+        "content-type": "~1.0.4",
+        "cookie": "0.3.1",
+        "cookie-signature": "1.0.6",
+        "debug": "2.6.9",
+        "depd": "~1.1.2",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "finalhandler": "1.1.1",
+        "fresh": "0.5.2",
+        "merge-descriptors": "1.0.1",
+        "methods": "~1.1.2",
+        "on-finished": "~2.3.0",
+        "parseurl": "~1.3.2",
+        "path-to-regexp": "0.1.7",
+        "proxy-addr": "~2.0.4",
+        "qs": "6.5.2",
+        "range-parser": "~1.2.0",
+        "safe-buffer": "5.1.2",
+        "send": "0.16.2",
+        "serve-static": "1.13.2",
+        "setprototypeof": "1.1.0",
+        "statuses": "~1.4.0",
+        "type-is": "~1.6.16",
+        "utils-merge": "1.0.1",
+        "vary": "~1.1.2"
+      },
+      "dependencies": {
+        "array-flatten": {
+          "version": "1.1.1",
+          "resolved": "http://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+          "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+          "dev": true
+        }
+      }
+    },
+    "extend": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+      "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo=",
+      "dev": true
+    },
+    "extend-shallow": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+      "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+      "dev": true,
+      "requires": {
+        "assign-symbols": "^1.0.0",
+        "is-extendable": "^1.0.1"
+      },
+      "dependencies": {
+        "is-extendable": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+          "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=",
+          "dev": true,
+          "requires": {
+            "is-plain-object": "^2.0.4"
+          }
+        }
+      }
+    },
+    "external-editor": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz",
+      "integrity": "sha1-WGbbKal4Jtvkvzr9JAcOrZ6kOic=",
+      "dev": true,
+      "requires": {
+        "chardet": "^0.7.0",
+        "iconv-lite": "^0.4.24",
+        "tmp": "^0.0.33"
+      },
+      "dependencies": {
+        "iconv-lite": {
+          "version": "0.4.24",
+          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+          "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+          "dev": true,
+          "requires": {
+            "safer-buffer": ">= 2.1.2 < 3"
+          }
+        }
+      }
+    },
+    "extglob": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+      "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=",
+      "dev": true,
+      "requires": {
+        "array-unique": "^0.3.2",
+        "define-property": "^1.0.0",
+        "expand-brackets": "^2.1.4",
+        "extend-shallow": "^2.0.1",
+        "fragment-cache": "^0.2.1",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        },
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
+          "dev": true,
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        }
+      }
+    },
+    "extract-zip": {
+      "version": "1.6.7",
+      "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz",
+      "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=",
+      "dev": true,
+      "requires": {
+        "concat-stream": "1.6.2",
+        "debug": "2.6.9",
+        "mkdirp": "0.5.1",
+        "yauzl": "2.4.1"
+      }
+    },
+    "extsprintf": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+      "dev": true
+    },
+    "fast-deep-equal": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+      "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+      "dev": true
+    },
+    "fast-json-stable-stringify": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+      "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+      "dev": true
+    },
+    "fastparse": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
+      "integrity": "sha1-kXKMWllC7O2FMSg8eUQe5BIsNak=",
+      "dev": true
+    },
+    "faye-websocket": {
+      "version": "0.10.0",
+      "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
+      "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
+      "dev": true,
+      "requires": {
+        "websocket-driver": ">=0.5.1"
+      }
+    },
+    "fd-slicer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
+      "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
+      "dev": true,
+      "requires": {
+        "pend": "~1.2.0"
+      }
+    },
+    "figgy-pudding": {
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz",
+      "integrity": "sha1-hiRwESkBxyeg5JWoB0S9W6odZ5A=",
+      "dev": true
+    },
+    "figures": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+      "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+      "dev": true,
+      "requires": {
+        "escape-string-regexp": "^1.0.5"
+      }
+    },
+    "file-loader": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz",
+      "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.0.2",
+        "schema-utils": "^1.0.0"
+      },
+      "dependencies": {
+        "loader-utils": {
+          "version": "1.2.3",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+          "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^2.0.0",
+            "json5": "^1.0.1"
+          }
+        }
+      }
+    },
+    "file-saver": {
+      "version": "1.3.3",
+      "resolved": "http://registry.npmjs.org/file-saver/-/file-saver-1.3.3.tgz",
+      "integrity": "sha1-zdTETTqiZOrC9o7BZbx5HDSvEjI="
+    },
+    "filename-regex": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
+      "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
+      "dev": true
+    },
+    "fileset": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz",
+      "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=",
+      "dev": true,
+      "requires": {
+        "glob": "^7.0.3",
+        "minimatch": "^3.0.3"
+      }
+    },
+    "fill-range": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+      "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+      "dev": true,
+      "requires": {
+        "extend-shallow": "^2.0.1",
+        "is-number": "^3.0.0",
+        "repeat-string": "^1.6.1",
+        "to-regex-range": "^2.1.0"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "dev": true,
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "finalhandler": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
+      "integrity": "sha1-7r9O2EAHnIP0JJA4ydcDAIMBsQU=",
+      "dev": true,
+      "requires": {
+        "debug": "2.6.9",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "on-finished": "~2.3.0",
+        "parseurl": "~1.3.2",
+        "statuses": "~1.4.0",
+        "unpipe": "~1.0.0"
+      }
+    },
+    "find-cache-dir": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
+      "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
+      "dev": true,
+      "requires": {
+        "commondir": "^1.0.1",
+        "make-dir": "^1.0.0",
+        "pkg-dir": "^2.0.0"
+      }
+    },
+    "find-up": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+      "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+      "dev": true,
+      "requires": {
+        "locate-path": "^2.0.0"
+      }
+    },
+    "flat": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/flat/-/flat-2.0.1.tgz",
+      "integrity": "sha1-cOKRiKdL4MPIlAnu0fqVd5B64y8=",
+      "dev": true,
+      "requires": {
+        "is-buffer": "~1.1.2"
+      }
+    },
+    "flush-write-stream": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
+      "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.3.6"
+      }
+    },
+    "follow-redirects": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.6.1.tgz",
+      "integrity": "sha512-t2JCjbzxQpWvbhts3l6SH1DKzSrx8a+SsaVf4h6bG4kOXUuPYS/kg2Lr4gQSb7eemaHqJkOThF1BGyjlUkO1GQ==",
+      "dev": true,
+      "requires": {
+        "debug": "=3.1.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
+    "font-awesome": {
+      "version": "4.7.0",
+      "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz",
+      "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM="
+    },
+    "for-in": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+      "dev": true
+    },
+    "for-own": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
+      "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
+      "dev": true,
+      "requires": {
+        "for-in": "^1.0.1"
+      }
+    },
+    "forever-agent": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+      "dev": true
+    },
+    "form-data": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+      "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=",
+      "dev": true,
+      "requires": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.6",
+        "mime-types": "^2.1.12"
+      }
+    },
+    "forwarded": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
+      "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
+      "dev": true
+    },
+    "fragment-cache": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+      "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+      "dev": true,
+      "requires": {
+        "map-cache": "^0.2.2"
+      }
+    },
+    "fresh": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+      "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+      "dev": true
+    },
+    "from2": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+      "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0"
+      }
+    },
+    "fs": {
+      "version": "0.0.1-security",
+      "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz",
+      "integrity": "sha1-invTcYa23d84E/I4WLV+yq9eQdQ=",
+      "dev": true
+    },
+    "fs-access": {
+      "version": "1.0.1",
+      "resolved": "http://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz",
+      "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=",
+      "dev": true,
+      "requires": {
+        "null-check": "^1.0.0"
+      }
+    },
+    "fs-extra": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz",
+      "integrity": "sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "jsonfile": "^2.1.0",
+        "klaw": "^1.0.0"
+      }
+    },
+    "fs-minipass": {
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz",
+      "integrity": "sha1-BsJ3IYRU7CiN93raVKA7hwKqy50=",
+      "dev": true,
+      "requires": {
+        "minipass": "^2.2.1"
+      }
+    },
+    "fs-write-stream-atomic": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
+      "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "iferr": "^0.1.5",
+        "imurmurhash": "^0.1.4",
+        "readable-stream": "1 || 2"
+      }
+    },
+    "fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+      "dev": true
+    },
+    "fsevents": {
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz",
+      "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "nan": "^2.9.2",
+        "node-pre-gyp": "^0.10.0"
+      },
+      "dependencies": {
+        "abbrev": {
+          "version": "1.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "ansi-regex": {
+          "version": "2.1.1",
+          "bundled": true,
+          "dev": true
+        },
+        "aproba": {
+          "version": "1.2.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "are-we-there-yet": {
+          "version": "1.1.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "delegates": "^1.0.0",
+            "readable-stream": "^2.0.6"
+          }
+        },
+        "balanced-match": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true
+        },
+        "brace-expansion": {
+          "version": "1.1.11",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "balanced-match": "^1.0.0",
+            "concat-map": "0.0.1"
+          }
+        },
+        "chownr": {
+          "version": "1.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "code-point-at": {
+          "version": "1.1.0",
+          "bundled": true,
+          "dev": true
+        },
+        "concat-map": {
+          "version": "0.0.1",
+          "bundled": true,
+          "dev": true
+        },
+        "console-control-strings": {
+          "version": "1.1.0",
+          "bundled": true,
+          "dev": true
+        },
+        "core-util-is": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "debug": {
+          "version": "2.6.9",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "deep-extend": {
+          "version": "0.6.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "delegates": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "detect-libc": {
+          "version": "1.0.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "fs-minipass": {
+          "version": "1.2.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "minipass": "^2.2.1"
+          }
+        },
+        "fs.realpath": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "gauge": {
+          "version": "2.7.4",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "aproba": "^1.0.3",
+            "console-control-strings": "^1.0.0",
+            "has-unicode": "^2.0.0",
+            "object-assign": "^4.1.0",
+            "signal-exit": "^3.0.0",
+            "string-width": "^1.0.1",
+            "strip-ansi": "^3.0.1",
+            "wide-align": "^1.1.0"
+          }
+        },
+        "glob": {
+          "version": "7.1.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        },
+        "has-unicode": {
+          "version": "2.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "iconv-lite": {
+          "version": "0.4.24",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "safer-buffer": ">= 2.1.2 < 3"
+          }
+        },
+        "ignore-walk": {
+          "version": "3.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "minimatch": "^3.0.4"
+          }
+        },
+        "inflight": {
+          "version": "1.0.6",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "once": "^1.3.0",
+            "wrappy": "1"
+          }
+        },
+        "inherits": {
+          "version": "2.0.3",
+          "bundled": true,
+          "dev": true
+        },
+        "ini": {
+          "version": "1.3.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "number-is-nan": "^1.0.0"
+          }
+        },
+        "isarray": {
+          "version": "1.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "minimatch": {
+          "version": "3.0.4",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "brace-expansion": "^1.1.7"
+          }
+        },
+        "minimist": {
+          "version": "0.0.8",
+          "bundled": true,
+          "dev": true
+        },
+        "minipass": {
+          "version": "2.3.5",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "safe-buffer": "^5.1.2",
+            "yallist": "^3.0.0"
+          }
+        },
+        "minizlib": {
+          "version": "1.2.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "minipass": "^2.2.1"
+          }
+        },
+        "mkdirp": {
+          "version": "0.5.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "minimist": "0.0.8"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "needle": {
+          "version": "2.2.4",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "debug": "^2.1.2",
+            "iconv-lite": "^0.4.4",
+            "sax": "^1.2.4"
+          }
+        },
+        "node-pre-gyp": {
+          "version": "0.10.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "detect-libc": "^1.0.2",
+            "mkdirp": "^0.5.1",
+            "needle": "^2.2.1",
+            "nopt": "^4.0.1",
+            "npm-packlist": "^1.1.6",
+            "npmlog": "^4.0.2",
+            "rc": "^1.2.7",
+            "rimraf": "^2.6.1",
+            "semver": "^5.3.0",
+            "tar": "^4"
+          }
+        },
+        "nopt": {
+          "version": "4.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "abbrev": "1",
+            "osenv": "^0.1.4"
+          }
+        },
+        "npm-bundled": {
+          "version": "1.0.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "npm-packlist": {
+          "version": "1.2.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ignore-walk": "^3.0.1",
+            "npm-bundled": "^1.0.1"
+          }
+        },
+        "npmlog": {
+          "version": "4.1.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "are-we-there-yet": "~1.1.2",
+            "console-control-strings": "~1.1.0",
+            "gauge": "~2.7.3",
+            "set-blocking": "~2.0.0"
+          }
+        },
+        "number-is-nan": {
+          "version": "1.0.1",
+          "bundled": true,
+          "dev": true
+        },
+        "object-assign": {
+          "version": "4.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "once": {
+          "version": "1.4.0",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "wrappy": "1"
+          }
+        },
+        "os-homedir": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "os-tmpdir": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "osenv": {
+          "version": "0.1.5",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "os-homedir": "^1.0.0",
+            "os-tmpdir": "^1.0.0"
+          }
+        },
+        "path-is-absolute": {
+          "version": "1.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "process-nextick-args": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "rc": {
+          "version": "1.2.8",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "deep-extend": "^0.6.0",
+            "ini": "~1.3.0",
+            "minimist": "^1.2.0",
+            "strip-json-comments": "~2.0.1"
+          },
+          "dependencies": {
+            "minimist": {
+              "version": "1.2.0",
+              "bundled": true,
+              "dev": true,
+              "optional": true
+            }
+          }
+        },
+        "readable-stream": {
+          "version": "2.3.6",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "rimraf": {
+          "version": "2.6.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "glob": "^7.1.3"
+          }
+        },
+        "safe-buffer": {
+          "version": "5.1.2",
+          "bundled": true,
+          "dev": true
+        },
+        "safer-buffer": {
+          "version": "2.1.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "sax": {
+          "version": "1.2.4",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "semver": {
+          "version": "5.6.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "set-blocking": {
+          "version": "2.0.0",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "signal-exit": {
+          "version": "3.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "string-width": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "bundled": true,
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
+        "strip-json-comments": {
+          "version": "2.0.1",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "tar": {
+          "version": "4.4.8",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "chownr": "^1.1.1",
+            "fs-minipass": "^1.2.5",
+            "minipass": "^2.3.4",
+            "minizlib": "^1.1.1",
+            "mkdirp": "^0.5.0",
+            "safe-buffer": "^5.1.2",
+            "yallist": "^3.0.2"
+          }
+        },
+        "util-deprecate": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true,
+          "optional": true
+        },
+        "wide-align": {
+          "version": "1.1.3",
+          "bundled": true,
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "string-width": "^1.0.2 || 2"
+          }
+        },
+        "wrappy": {
+          "version": "1.0.2",
+          "bundled": true,
+          "dev": true
+        },
+        "yallist": {
+          "version": "3.0.3",
+          "bundled": true,
+          "dev": true
+        }
+      }
+    },
+    "fstream": {
+      "version": "1.0.11",
+      "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
+      "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "inherits": "~2.0.0",
+        "mkdirp": ">=0.5 0",
+        "rimraf": "2"
+      }
+    },
+    "gauge": {
+      "version": "2.7.4",
+      "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+      "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
+      "dev": true,
+      "requires": {
+        "aproba": "^1.0.3",
+        "console-control-strings": "^1.0.0",
+        "has-unicode": "^2.0.0",
+        "object-assign": "^4.1.0",
+        "signal-exit": "^3.0.0",
+        "string-width": "^1.0.1",
+        "strip-ansi": "^3.0.1",
+        "wide-align": "^1.1.0"
+      }
+    },
+    "gaze": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
+      "integrity": "sha1-xEFzPhO5J6yMD/C0w7Az8ogSkko=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "globule": "^1.0.0"
+      }
+    },
+    "genfun": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz",
+      "integrity": "sha1-ndlxCgaQClxKW/V6yl2k5S/nZTc=",
+      "dev": true
+    },
+    "get-caller-file": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
+      "integrity": "sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o=",
+      "dev": true
+    },
+    "get-stdin": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+      "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+      "dev": true,
+      "optional": true
+    },
+    "get-stream": {
+      "version": "3.0.0",
+      "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+      "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+      "dev": true
+    },
+    "get-value": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+      "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+      "dev": true
+    },
+    "getpass": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+      "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0"
+      }
+    },
+    "gettext-parser": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/gettext-parser/-/gettext-parser-1.2.2.tgz",
+      "integrity": "sha1-HvDadcHnWa4wicc++k0Z5AKYdI4=",
+      "dev": true,
+      "requires": {
+        "encoding": "0.1.12"
+      }
+    },
+    "glob": {
+      "version": "7.1.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+      "integrity": "sha1-OWCDLT8VdBCDQtr9OmezMsCWnfE=",
+      "dev": true,
+      "requires": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.0.4",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      }
+    },
+    "glob-base": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
+      "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
+      "dev": true,
+      "requires": {
+        "glob-parent": "^2.0.0",
+        "is-glob": "^2.0.0"
+      },
+      "dependencies": {
+        "glob-parent": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
+          "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
+          "dev": true,
+          "requires": {
+            "is-glob": "^2.0.0"
+          }
+        },
+        "is-extglob": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+          "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+          "dev": true
+        },
+        "is-glob": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+          "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^1.0.0"
+          }
+        }
+      }
+    },
+    "glob-parent": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+      "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+      "dev": true,
+      "requires": {
+        "is-glob": "^3.1.0",
+        "path-dirname": "^1.0.0"
+      },
+      "dependencies": {
+        "is-glob": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
+          "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^2.1.0"
+          }
+        }
+      }
+    },
+    "globals": {
+      "version": "9.18.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+      "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=",
+      "dev": true
+    },
+    "globby": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz",
+      "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
+      "dev": true,
+      "requires": {
+        "array-union": "^1.0.1",
+        "dir-glob": "^2.0.0",
+        "glob": "^7.1.2",
+        "ignore": "^3.3.5",
+        "pify": "^3.0.0",
+        "slash": "^1.0.0"
+      }
+    },
+    "globule": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz",
+      "integrity": "sha1-Xf+xsZHyLSB5epNptJ6rTpg5aW0=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "glob": "~7.1.1",
+        "lodash": "~4.17.10",
+        "minimatch": "~3.0.2"
+      }
+    },
+    "graceful-fs": {
+      "version": "4.1.15",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
+      "integrity": "sha1-/7cD4QZuig7qpMi4C6klPu77+wA=",
+      "dev": true
+    },
+    "handle-thing": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz",
+      "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==",
+      "dev": true
+    },
+    "handlebars": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.0.tgz",
+      "integrity": "sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w==",
+      "dev": true,
+      "requires": {
+        "async": "^2.5.0",
+        "optimist": "^0.6.1",
+        "source-map": "^0.6.1",
+        "uglify-js": "^3.1.4"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "har-schema": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+      "dev": true
+    },
+    "har-validator": {
+      "version": "5.1.3",
+      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
+      "integrity": "sha1-HvievT5JllV2de7ZiTEQ3DUPoIA=",
+      "dev": true,
+      "requires": {
+        "ajv": "^6.5.5",
+        "har-schema": "^2.0.0"
+      }
+    },
+    "has-ansi": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+      "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+      "dev": true,
+      "requires": {
+        "ansi-regex": "^2.0.0"
+      }
+    },
+    "has-binary2": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz",
+      "integrity": "sha1-d3asYn8+p3JQz8My2rfd9eT10R0=",
+      "dev": true,
+      "requires": {
+        "isarray": "2.0.1"
+      },
+      "dependencies": {
+        "isarray": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz",
+          "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=",
+          "dev": true
+        }
+      }
+    },
+    "has-cors": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz",
+      "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=",
+      "dev": true
+    },
+    "has-flag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+    },
+    "has-unicode": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+      "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
+      "dev": true
+    },
+    "has-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+      "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+      "dev": true,
+      "requires": {
+        "get-value": "^2.0.6",
+        "has-values": "^1.0.0",
+        "isobject": "^3.0.0"
+      }
+    },
+    "has-values": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+      "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+      "dev": true,
+      "requires": {
+        "is-number": "^3.0.0",
+        "kind-of": "^4.0.0"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+          "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "hash-base": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+      "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "hash.js": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
+      "integrity": "sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.3",
+        "minimalistic-assert": "^1.0.1"
+      }
+    },
+    "hasha": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz",
+      "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=",
+      "dev": true,
+      "requires": {
+        "is-stream": "^1.0.1",
+        "pinkie-promise": "^2.0.0"
+      }
+    },
+    "hmac-drbg": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+      "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+      "dev": true,
+      "requires": {
+        "hash.js": "^1.0.3",
+        "minimalistic-assert": "^1.0.0",
+        "minimalistic-crypto-utils": "^1.0.1"
+      }
+    },
+    "hosted-git-info": {
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
+      "integrity": "sha1-l/I2l3vW4SVAiTD/bePuxigewEc=",
+      "dev": true
+    },
+    "hpack.js": {
+      "version": "2.1.6",
+      "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
+      "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
+      "dev": true,
+      "requires": {
+        "inherits": "^2.0.1",
+        "obuf": "^1.0.0",
+        "readable-stream": "^2.0.1",
+        "wbuf": "^1.1.0"
+      }
+    },
+    "html-entities": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
+      "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=",
+      "dev": true
+    },
+    "htmlparser2": {
+      "version": "3.10.1",
+      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+      "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
+      "dev": true,
+      "requires": {
+        "domelementtype": "^1.3.1",
+        "domhandler": "^2.3.0",
+        "domutils": "^1.5.1",
+        "entities": "^1.1.1",
+        "inherits": "^2.0.1",
+        "readable-stream": "^3.1.1"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "3.2.0",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.2.0.tgz",
+          "integrity": "sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw==",
+          "dev": true,
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        }
+      }
+    },
+    "http-cache-semantics": {
+      "version": "3.8.1",
+      "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz",
+      "integrity": "sha1-ObDhat2bYFvwqe89nar0hDtMrNI=",
+      "dev": true
+    },
+    "http-deceiver": {
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
+      "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
+      "dev": true
+    },
+    "http-errors": {
+      "version": "1.6.3",
+      "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+      "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+      "dev": true,
+      "requires": {
+        "depd": "~1.1.2",
+        "inherits": "2.0.3",
+        "setprototypeof": "1.1.0",
+        "statuses": ">= 1.4.0 < 2"
+      }
+    },
+    "http-parser-js": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz",
+      "integrity": "sha1-1l7b7ehDSdDcMDIIFaFdOcw8u9g=",
+      "dev": true
+    },
+    "http-proxy": {
+      "version": "1.17.0",
+      "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz",
+      "integrity": "sha1-etOElGWPhGBeL220Q230EPTlvpo=",
+      "dev": true,
+      "requires": {
+        "eventemitter3": "^3.0.0",
+        "follow-redirects": "^1.0.0",
+        "requires-port": "^1.0.0"
+      }
+    },
+    "http-proxy-agent": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz",
+      "integrity": "sha1-5IIb7vWyFCogJr1zkm/lN2McVAU=",
+      "dev": true,
+      "requires": {
+        "agent-base": "4",
+        "debug": "3.1.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        }
+      }
+    },
+    "http-proxy-middleware": {
+      "version": "0.18.0",
+      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz",
+      "integrity": "sha1-CYfmu1pWBuWmkWjY+WeofxXdiqs=",
+      "dev": true,
+      "requires": {
+        "http-proxy": "^1.16.2",
+        "is-glob": "^4.0.0",
+        "lodash": "^4.17.5",
+        "micromatch": "^3.1.9"
+      }
+    },
+    "http-signature": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+      "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0",
+        "jsprim": "^1.2.2",
+        "sshpk": "^1.7.0"
+      }
+    },
+    "https-browserify": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
+      "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
+      "dev": true
+    },
+    "https-proxy-agent": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz",
+      "integrity": "sha1-UVUpcPoE1yPgTFbQQXjD+SWSu8A=",
+      "dev": true,
+      "requires": {
+        "agent-base": "^4.1.0",
+        "debug": "^3.1.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "ms": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+          "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=",
+          "dev": true
+        }
+      }
+    },
+    "humanize-ms": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
+      "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=",
+      "dev": true,
+      "requires": {
+        "ms": "^2.0.0"
+      }
+    },
+    "iconv-lite": {
+      "version": "0.4.23",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
+      "integrity": "sha1-KXhx9jvlB63Pv8pxXQzQ7thOmmM=",
+      "dev": true,
+      "requires": {
+        "safer-buffer": ">= 2.1.2 < 3"
+      }
+    },
+    "ieee754": {
+      "version": "1.1.12",
+      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz",
+      "integrity": "sha1-UL8k5bnIu5ivSWTJQc2wkY2ntgs=",
+      "dev": true
+    },
+    "iferr": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+      "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
+      "dev": true
+    },
+    "ignore": {
+      "version": "3.3.10",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
+      "integrity": "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=",
+      "dev": true
+    },
+    "ignore-walk": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz",
+      "integrity": "sha1-qD5i59JyrA47VRqqgoMaGbafgvg=",
+      "dev": true,
+      "requires": {
+        "minimatch": "^3.0.4"
+      }
+    },
+    "image-size": {
+      "version": "0.5.5",
+      "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
+      "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
+      "dev": true,
+      "optional": true
+    },
+    "immediate": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+      "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=",
+      "dev": true
+    },
+    "import-cwd": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
+      "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=",
+      "dev": true,
+      "requires": {
+        "import-from": "^2.1.0"
+      }
+    },
+    "import-from": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz",
+      "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
+      "dev": true,
+      "requires": {
+        "resolve-from": "^3.0.0"
+      }
+    },
+    "import-local": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
+      "integrity": "sha1-VQcL44pZk88Y72236WH1vuXFoJ0=",
+      "dev": true,
+      "requires": {
+        "pkg-dir": "^3.0.0",
+        "resolve-cwd": "^2.0.0"
+      },
+      "dependencies": {
+        "find-up": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+          "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
+          "dev": true,
+          "requires": {
+            "locate-path": "^3.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+          "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=",
+          "dev": true,
+          "requires": {
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "p-limit": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz",
+          "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==",
+          "dev": true,
+          "requires": {
+            "p-try": "^2.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+          "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.0.0"
+          }
+        },
+        "p-try": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
+          "integrity": "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": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=",
+          "dev": true,
+          "requires": {
+            "find-up": "^3.0.0"
+          }
+        }
+      }
+    },
+    "imurmurhash": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+      "dev": true
+    },
+    "in-publish": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz",
+      "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=",
+      "dev": true,
+      "optional": true
+    },
+    "indent-string": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+      "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "repeating": "^2.0.0"
+      }
+    },
+    "indexof": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+      "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
+      "dev": true
+    },
+    "inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+      "dev": true,
+      "requires": {
+        "once": "^1.3.0",
+        "wrappy": "1"
+      }
+    },
+    "inherits": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+      "dev": true
+    },
+    "ini": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+      "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=",
+      "dev": true
+    },
+    "inquirer": {
+      "version": "6.2.1",
+      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz",
+      "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==",
+      "dev": true,
+      "requires": {
+        "ansi-escapes": "^3.0.0",
+        "chalk": "^2.0.0",
+        "cli-cursor": "^2.1.0",
+        "cli-width": "^2.0.0",
+        "external-editor": "^3.0.0",
+        "figures": "^2.0.0",
+        "lodash": "^4.17.10",
+        "mute-stream": "0.0.7",
+        "run-async": "^2.2.0",
+        "rxjs": "^6.1.0",
+        "string-width": "^2.1.0",
+        "strip-ansi": "^5.0.0",
+        "through": "^2.3.6"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+          "dev": true
+        },
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+          "dev": true
+        },
+        "string-width": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+          "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=",
+          "dev": true,
+          "requires": {
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^4.0.0"
+          },
+          "dependencies": {
+            "strip-ansi": {
+              "version": "4.0.0",
+              "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+              "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+              "dev": true,
+              "requires": {
+                "ansi-regex": "^3.0.0"
+              }
+            }
+          }
+        },
+        "strip-ansi": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz",
+          "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==",
+          "dev": true,
+          "requires": {
+            "ansi-regex": "^4.0.0"
+          },
+          "dependencies": {
+            "ansi-regex": {
+              "version": "4.0.0",
+              "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz",
+              "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==",
+              "dev": true
+            }
+          }
+        }
+      }
+    },
+    "internal-ip": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-3.0.1.tgz",
+      "integrity": "sha1-31yZh24dLrLqLXT1IOP2aaAOzic=",
+      "dev": true,
+      "requires": {
+        "default-gateway": "^2.6.0",
+        "ipaddr.js": "^1.5.2"
+      }
+    },
+    "interpret": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
+      "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==",
+      "dev": true
+    },
+    "invariant": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+      "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=",
+      "dev": true,
+      "requires": {
+        "loose-envify": "^1.0.0"
+      }
+    },
+    "invert-kv": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+      "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+      "dev": true
+    },
+    "ip": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
+      "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+      "dev": true
+    },
+    "ip-regex": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
+      "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
+      "dev": true
+    },
+    "ipaddr.js": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz",
+      "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=",
+      "dev": true
+    },
+    "is-accessor-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+      "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "is-arrayish": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+      "dev": true
+    },
+    "is-binary-path": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
+      "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+      "dev": true,
+      "requires": {
+        "binary-extensions": "^1.0.0"
+      }
+    },
+    "is-buffer": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+      "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
+      "dev": true
+    },
+    "is-data-descriptor": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+      "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "is-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+      "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=",
+      "dev": true,
+      "requires": {
+        "is-accessor-descriptor": "^0.1.6",
+        "is-data-descriptor": "^0.1.4",
+        "kind-of": "^5.0.0"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+          "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=",
+          "dev": true
+        }
+      }
+    },
+    "is-directory": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+      "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
+      "dev": true
+    },
+    "is-dotfile": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz",
+      "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
+      "dev": true
+    },
+    "is-equal-shallow": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz",
+      "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
+      "dev": true,
+      "requires": {
+        "is-primitive": "^2.0.0"
+      }
+    },
+    "is-extendable": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+      "dev": true
+    },
+    "is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+      "dev": true
+    },
+    "is-finite": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+      "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+      "dev": true,
+      "requires": {
+        "number-is-nan": "^1.0.0"
+      }
+    },
+    "is-fullwidth-code-point": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+      "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+      "dev": true,
+      "requires": {
+        "number-is-nan": "^1.0.0"
+      }
+    },
+    "is-glob": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+      "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+      "dev": true,
+      "requires": {
+        "is-extglob": "^2.1.1"
+      }
+    },
+    "is-number": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+      "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "is-path-cwd": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+      "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+      "dev": true
+    },
+    "is-path-in-cwd": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz",
+      "integrity": "sha1-WsSLNF72dTOb1sekipEhELJBz1I=",
+      "dev": true,
+      "requires": {
+        "is-path-inside": "^1.0.0"
+      }
+    },
+    "is-path-inside": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
+      "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
+      "dev": true,
+      "requires": {
+        "path-is-inside": "^1.0.1"
+      }
+    },
+    "is-plain-object": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+      "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=",
+      "dev": true,
+      "requires": {
+        "isobject": "^3.0.1"
+      }
+    },
+    "is-posix-bracket": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz",
+      "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
+      "dev": true
+    },
+    "is-primitive": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz",
+      "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
+      "dev": true
+    },
+    "is-promise": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+      "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+      "dev": true
+    },
+    "is-stream": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+      "dev": true
+    },
+    "is-typedarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+      "dev": true
+    },
+    "is-utf8": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+      "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+      "dev": true
+    },
+    "is-windows": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+      "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=",
+      "dev": true
+    },
+    "is-wsl": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+      "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+      "dev": true
+    },
+    "isarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+      "dev": true
+    },
+    "isbinaryfile": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz",
+      "integrity": "sha1-XW3vPt6/boyoyunDAYOoBLX4voA=",
+      "dev": true,
+      "requires": {
+        "buffer-alloc": "^1.2.0"
+      }
+    },
+    "isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+      "dev": true
+    },
+    "isobject": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+      "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+      "dev": true
+    },
+    "isstream": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+      "dev": true
+    },
+    "istanbul-api": {
+      "version": "1.3.7",
+      "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.7.tgz",
+      "integrity": "sha1-qGx3DSsD4R4/d4zXrt2C0nIgkqo=",
+      "dev": true,
+      "requires": {
+        "async": "^2.1.4",
+        "fileset": "^2.0.2",
+        "istanbul-lib-coverage": "^1.2.1",
+        "istanbul-lib-hook": "^1.2.2",
+        "istanbul-lib-instrument": "^1.10.2",
+        "istanbul-lib-report": "^1.1.5",
+        "istanbul-lib-source-maps": "^1.2.6",
+        "istanbul-reports": "^1.5.1",
+        "js-yaml": "^3.7.0",
+        "mkdirp": "^0.5.1",
+        "once": "^1.4.0"
+      }
+    },
+    "istanbul-instrumenter-loader": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-3.0.1.tgz",
+      "integrity": "sha1-mVe9WSUrNz+uXFK3tRiOb94qCUk=",
+      "dev": true,
+      "requires": {
+        "convert-source-map": "^1.5.0",
+        "istanbul-lib-instrument": "^1.7.3",
+        "loader-utils": "^1.1.0",
+        "schema-utils": "^0.3.0"
+      },
+      "dependencies": {
+        "ajv": {
+          "version": "5.5.2",
+          "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+          "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+          "dev": true,
+          "requires": {
+            "co": "^4.6.0",
+            "fast-deep-equal": "^1.0.0",
+            "fast-json-stable-stringify": "^2.0.0",
+            "json-schema-traverse": "^0.3.0"
+          }
+        },
+        "fast-deep-equal": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+          "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
+          "dev": true
+        },
+        "json-schema-traverse": {
+          "version": "0.3.1",
+          "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+          "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+          "dev": true
+        },
+        "loader-utils": {
+          "version": "1.2.3",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+          "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^2.0.0",
+            "json5": "^1.0.1"
+          }
+        },
+        "schema-utils": {
+          "version": "0.3.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz",
+          "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=",
+          "dev": true,
+          "requires": {
+            "ajv": "^5.0.0"
+          }
+        }
+      }
+    },
+    "istanbul-lib-coverage": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz",
+      "integrity": "sha1-zPftzQoLubj3Kf7rCTBHD5r2ZPA=",
+      "dev": true
+    },
+    "istanbul-lib-hook": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz",
+      "integrity": "sha1-vGvwfxKmQfvxyFOR0Nqo8K6mv4Y=",
+      "dev": true,
+      "requires": {
+        "append-transform": "^0.4.0"
+      }
+    },
+    "istanbul-lib-instrument": {
+      "version": "1.10.2",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz",
+      "integrity": "sha1-H1XtEKw8R/K93dUweTUSZ1TQqco=",
+      "dev": true,
+      "requires": {
+        "babel-generator": "^6.18.0",
+        "babel-template": "^6.16.0",
+        "babel-traverse": "^6.18.0",
+        "babel-types": "^6.18.0",
+        "babylon": "^6.18.0",
+        "istanbul-lib-coverage": "^1.2.1",
+        "semver": "^5.3.0"
+      }
+    },
+    "istanbul-lib-report": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz",
+      "integrity": "sha1-8qZX/GKC+WFwqvKB6zCkWPf0Fww=",
+      "dev": true,
+      "requires": {
+        "istanbul-lib-coverage": "^1.2.1",
+        "mkdirp": "^0.5.1",
+        "path-parse": "^1.0.5",
+        "supports-color": "^3.1.2"
+      },
+      "dependencies": {
+        "has-flag": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "3.2.3",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^1.0.0"
+          }
+        }
+      }
+    },
+    "istanbul-lib-source-maps": {
+      "version": "1.2.6",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz",
+      "integrity": "sha1-N7n/ZhWA+PyhEjJ1LuQuCMZnXY8=",
+      "dev": true,
+      "requires": {
+        "debug": "^3.1.0",
+        "istanbul-lib-coverage": "^1.2.1",
+        "mkdirp": "^0.5.1",
+        "rimraf": "^2.6.1",
+        "source-map": "^0.5.3"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "ms": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+          "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=",
+          "dev": true
+        },
+        "source-map": {
+          "version": "0.5.7",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+          "dev": true
+        }
+      }
+    },
+    "istanbul-reports": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.5.1.tgz",
+      "integrity": "sha1-l+Tb87UV6MSEyuoV1lJO69P/Tho=",
+      "dev": true,
+      "requires": {
+        "handlebars": "^4.0.3"
+      }
+    },
+    "jasmine-core": {
+      "version": "2.99.1",
+      "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz",
+      "integrity": "sha1-5kAN8ea1bhMLYcS80JPap/boyhU=",
+      "dev": true
+    },
+    "jasmine-spec-reporter": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-4.2.1.tgz",
+      "integrity": "sha1-HWMq7ANBZwrTJPkrqEtLMrNeniI=",
+      "dev": true,
+      "requires": {
+        "colors": "1.1.2"
+      }
+    },
+    "jasminewd2": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz",
+      "integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=",
+      "dev": true
+    },
+    "js-base64": {
+      "version": "2.5.1",
+      "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz",
+      "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==",
+      "dev": true,
+      "optional": true
+    },
+    "js-tokens": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+      "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+      "dev": true
+    },
+    "js-yaml": {
+      "version": "3.12.0",
+      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
+      "integrity": "sha1-6u1lbsg0TxD1J8a/obbiJE3hZ9E=",
+      "dev": true,
+      "requires": {
+        "argparse": "^1.0.7",
+        "esprima": "^4.0.0"
+      },
+      "dependencies": {
+        "esprima": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+          "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=",
+          "dev": true
+        }
+      }
+    },
+    "jsbn": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+      "dev": true
+    },
+    "jsesc": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+      "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+      "dev": true
+    },
+    "json-parse-better-errors": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+      "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=",
+      "dev": true
+    },
+    "json-schema": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+      "dev": true
+    },
+    "json-schema-traverse": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+      "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=",
+      "dev": true
+    },
+    "json-stringify-safe": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+      "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+      "dev": true
+    },
+    "json3": {
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
+      "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=",
+      "dev": true
+    },
+    "json5": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+      "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+      "dev": true,
+      "requires": {
+        "minimist": "^1.2.0"
+      }
+    },
+    "jsonfile": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
+      "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.6"
+      }
+    },
+    "jsonparse": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+      "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
+      "dev": true
+    },
+    "jsprim": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+      "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "1.0.0",
+        "extsprintf": "1.3.0",
+        "json-schema": "0.2.3",
+        "verror": "1.10.0"
+      }
+    },
+    "jszip": {
+      "version": "3.1.5",
+      "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz",
+      "integrity": "sha1-48KmxtcGrG5gMxQDbUPNQL7v3zc=",
+      "dev": true,
+      "requires": {
+        "core-js": "~2.3.0",
+        "es6-promise": "~3.0.2",
+        "lie": "~3.1.0",
+        "pako": "~1.0.2",
+        "readable-stream": "~2.0.6"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz",
+          "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=",
+          "dev": true
+        },
+        "es6-promise": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz",
+          "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=",
+          "dev": true
+        },
+        "process-nextick-args": {
+          "version": "1.0.7",
+          "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+          "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "2.0.6",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
+          "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
+          "dev": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.1",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~1.0.6",
+            "string_decoder": "~0.10.x",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "string_decoder": {
+          "version": "0.10.31",
+          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+          "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+          "dev": true
+        }
+      }
+    },
+    "karma": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/karma/-/karma-3.1.1.tgz",
+      "integrity": "sha512-NetT3wPCQMNB36uiL9LLyhrOt8SQwrEKt0xD3+KpTCfm0VxVyUJdPL5oTq2Ic5ouemgL/Iz4wqXEbF3zea9kQQ==",
+      "dev": true,
+      "requires": {
+        "bluebird": "^3.3.0",
+        "body-parser": "^1.16.1",
+        "chokidar": "^2.0.3",
+        "colors": "^1.1.0",
+        "combine-lists": "^1.0.0",
+        "connect": "^3.6.0",
+        "core-js": "^2.2.0",
+        "di": "^0.0.1",
+        "dom-serialize": "^2.2.0",
+        "expand-braces": "^0.1.1",
+        "glob": "^7.1.1",
+        "graceful-fs": "^4.1.2",
+        "http-proxy": "^1.13.0",
+        "isbinaryfile": "^3.0.0",
+        "lodash": "^4.17.4",
+        "log4js": "^3.0.0",
+        "mime": "^2.3.1",
+        "minimatch": "^3.0.2",
+        "optimist": "^0.6.1",
+        "qjobs": "^1.1.4",
+        "range-parser": "^1.2.0",
+        "rimraf": "^2.6.0",
+        "safe-buffer": "^5.0.1",
+        "socket.io": "2.1.1",
+        "source-map": "^0.6.1",
+        "tmp": "0.0.33",
+        "useragent": "2.2.1"
+      },
+      "dependencies": {
+        "mime": {
+          "version": "2.4.0",
+          "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz",
+          "integrity": "sha1-4FH9iBNYWF8yed8zP+aU2gvP/dY=",
+          "dev": true
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        }
+      }
+    },
+    "karma-chrome-launcher": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz",
+      "integrity": "sha1-zxudBxNswY/iOTJ9JGVMPbw2is8=",
+      "dev": true,
+      "requires": {
+        "fs-access": "^1.0.0",
+        "which": "^1.2.1"
+      }
+    },
+    "karma-coverage-istanbul-reporter": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.0.1.tgz",
+      "integrity": "sha512-UcgrHkFehI5+ivMouD8NH/UOHiX4oCAtwaANylzPFdcAuD52fnCUuelacq2gh8tZ4ydhU3+xiXofSq7j5Ehygw==",
+      "dev": true,
+      "requires": {
+        "istanbul-api": "^1.3.1",
+        "minimatch": "^3.0.4"
+      }
+    },
+    "karma-jasmine": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.2.tgz",
+      "integrity": "sha1-OU8rJf+0pkS5rabyLUQ+L9CIhsM=",
+      "dev": true
+    },
+    "karma-jasmine-html-reporter": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-0.2.2.tgz",
+      "integrity": "sha1-SKjl7xiAdhfuK14zwRlMNbQ5Ukw=",
+      "dev": true,
+      "requires": {
+        "karma-jasmine": "^1.0.2"
+      }
+    },
+    "karma-mocha-reporter": {
+      "version": "2.2.5",
+      "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz",
+      "integrity": "sha1-FRIAlejtgZGG5HoLAS8810GJVWA=",
+      "requires": {
+        "chalk": "^2.1.0",
+        "log-symbols": "^2.1.0",
+        "strip-ansi": "^4.0.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+        },
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "requires": {
+            "ansi-regex": "^3.0.0"
+          }
+        }
+      }
+    },
+    "karma-phantomjs-launcher": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz",
+      "integrity": "sha1-0jyjSAG9qYY60xjju0vUBisTrNI=",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.0.1",
+        "phantomjs-prebuilt": "^2.1.7"
+      }
+    },
+    "karma-source-map-support": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.3.0.tgz",
+      "integrity": "sha1-Nt1NjKFUtirOlWliNvrjfK8Kfd4=",
+      "dev": true,
+      "requires": {
+        "source-map-support": "^0.5.5"
+      }
+    },
+    "kew": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/kew/-/kew-0.7.0.tgz",
+      "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=",
+      "dev": true
+    },
+    "killable": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz",
+      "integrity": "sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI=",
+      "dev": true
+    },
+    "kind-of": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+      "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=",
+      "dev": true
+    },
+    "klaw": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
+      "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.9"
+      }
+    },
+    "lcid": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+      "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+      "dev": true,
+      "requires": {
+        "invert-kv": "^1.0.0"
+      }
+    },
+    "less": {
+      "version": "3.9.0",
+      "resolved": "https://registry.npmjs.org/less/-/less-3.9.0.tgz",
+      "integrity": "sha512-31CmtPEZraNUtuUREYjSqRkeETFdyEHSEPAGq4erDlUXtda7pzNmctdljdIagSb589d/qXGWiiP31R5JVf+v0w==",
+      "dev": true,
+      "requires": {
+        "clone": "^2.1.2",
+        "errno": "^0.1.1",
+        "graceful-fs": "^4.1.2",
+        "image-size": "~0.5.0",
+        "mime": "^1.4.1",
+        "mkdirp": "^0.5.0",
+        "promise": "^7.1.1",
+        "request": "^2.83.0",
+        "source-map": "~0.6.0"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "less-loader": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.1.0.tgz",
+      "integrity": "sha1-LBNSxbCaT4QQFJAnT9UWdN5BNj4=",
+      "dev": true,
+      "requires": {
+        "clone": "^2.1.1",
+        "loader-utils": "^1.1.0",
+        "pify": "^3.0.0"
+      },
+      "dependencies": {
+        "loader-utils": {
+          "version": "1.2.3",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+          "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^2.0.0",
+            "json5": "^1.0.1"
+          }
+        }
+      }
+    },
+    "license-webpack-plugin": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.1.0.tgz",
+      "integrity": "sha512-vDiBeMWxjE9n6TabQ9J4FH8urFdsRK0Nvxn1cit9biCiR9aq1zBR0X2BlAkEiIG6qPamLeU0GzvIgLkrFc398A==",
+      "dev": true,
+      "requires": {
+        "@types/webpack-sources": "^0.1.5",
+        "webpack-sources": "^1.2.0"
+      }
+    },
+    "lie": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz",
+      "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=",
+      "dev": true,
+      "requires": {
+        "immediate": "~3.0.5"
+      }
+    },
+    "load-json-file": {
+      "version": "1.1.0",
+      "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+      "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+      "dev": true,
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "parse-json": "^2.2.0",
+        "pify": "^2.0.0",
+        "pinkie-promise": "^2.0.0",
+        "strip-bom": "^2.0.0"
+      },
+      "dependencies": {
+        "pify": {
+          "version": "2.3.0",
+          "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+          "dev": true
+        }
+      }
+    },
+    "loader-runner": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
+      "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
+      "dev": true
+    },
+    "locate-path": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+      "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+      "dev": true,
+      "requires": {
+        "p-locate": "^2.0.0",
+        "path-exists": "^3.0.0"
+      }
+    },
+    "lodash": {
+      "version": "4.17.11",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+      "integrity": "sha1-s56mIp72B+zYniyN8SU2iRysm40=",
+      "dev": true
+    },
+    "lodash.assign": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
+      "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
+      "dev": true,
+      "optional": true
+    },
+    "lodash.clonedeep": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
+      "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
+      "dev": true
+    },
+    "lodash.debounce": {
+      "version": "4.0.8",
+      "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+      "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
+      "dev": true
+    },
+    "lodash.mergewith": {
+      "version": "4.6.1",
+      "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz",
+      "integrity": "sha1-Y5BX5ybDr72z59QnQcqo1uQzWSc=",
+      "dev": true,
+      "optional": true
+    },
+    "lodash.tail": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz",
+      "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=",
+      "dev": true
+    },
+    "log-symbols": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
+      "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+      "requires": {
+        "chalk": "^2.0.1"
+      }
+    },
+    "log4js": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/log4js/-/log4js-3.0.6.tgz",
+      "integrity": "sha1-5srO2Uln7uuc45n5+GgqSysoyP8=",
+      "dev": true,
+      "requires": {
+        "circular-json": "^0.5.5",
+        "date-format": "^1.2.0",
+        "debug": "^3.1.0",
+        "rfdc": "^1.1.2",
+        "streamroller": "0.7.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=",
+          "dev": true,
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "ms": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+          "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=",
+          "dev": true
+        }
+      }
+    },
+    "loglevel": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz",
+      "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=",
+      "dev": true
+    },
+    "loose-envify": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+      "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=",
+      "dev": true,
+      "requires": {
+        "js-tokens": "^3.0.0 || ^4.0.0"
+      }
+    },
+    "loud-rejection": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+      "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "currently-unhandled": "^0.4.1",
+        "signal-exit": "^3.0.0"
+      }
+    },
+    "lru-cache": {
+      "version": "4.1.5",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+      "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+      "dev": true,
+      "requires": {
+        "pseudomap": "^1.0.2",
+        "yallist": "^2.1.2"
+      }
+    },
+    "magic-string": {
+      "version": "0.25.2",
+      "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.2.tgz",
+      "integrity": "sha512-iLs9mPjh9IuTtRsqqhNGYcZXGei0Nh/A4xirrsqW7c+QhKVFL2vm7U09ru6cHRD22azaP/wMDgI+HCqbETMTtg==",
+      "dev": true,
+      "requires": {
+        "sourcemap-codec": "^1.4.4"
+      }
+    },
+    "make-dir": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+      "integrity": "sha1-ecEDO4BRW9bSTsmTPoYMp17ifww=",
+      "dev": true,
+      "requires": {
+        "pify": "^3.0.0"
+      }
+    },
+    "make-error": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz",
+      "integrity": "sha1-7+ToH22yjK3WBccPKcgxtY73dsg=",
+      "dev": true
+    },
+    "make-fetch-happen": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz",
+      "integrity": "sha1-FBSXy4ePJDupMTbIPYq6EsIWwIM=",
+      "dev": true,
+      "requires": {
+        "agentkeepalive": "^3.4.1",
+        "cacache": "^11.0.1",
+        "http-cache-semantics": "^3.8.1",
+        "http-proxy-agent": "^2.1.0",
+        "https-proxy-agent": "^2.2.1",
+        "lru-cache": "^4.1.2",
+        "mississippi": "^3.0.0",
+        "node-fetch-npm": "^2.0.2",
+        "promise-retry": "^1.1.1",
+        "socks-proxy-agent": "^4.0.0",
+        "ssri": "^6.0.0"
+      },
+      "dependencies": {
+        "cacache": {
+          "version": "11.3.2",
+          "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz",
+          "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==",
+          "dev": true,
+          "requires": {
+            "bluebird": "^3.5.3",
+            "chownr": "^1.1.1",
+            "figgy-pudding": "^3.5.1",
+            "glob": "^7.1.3",
+            "graceful-fs": "^4.1.15",
+            "lru-cache": "^5.1.1",
+            "mississippi": "^3.0.0",
+            "mkdirp": "^0.5.1",
+            "move-concurrently": "^1.0.1",
+            "promise-inflight": "^1.0.1",
+            "rimraf": "^2.6.2",
+            "ssri": "^6.0.1",
+            "unique-filename": "^1.1.1",
+            "y18n": "^4.0.0"
+          },
+          "dependencies": {
+            "lru-cache": {
+              "version": "5.1.1",
+              "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+              "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+              "dev": true,
+              "requires": {
+                "yallist": "^3.0.2"
+              }
+            }
+          }
+        },
+        "mississippi": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
+          "integrity": "sha1-6goykfl+C16HdrNj1fChLZTGcCI=",
+          "dev": true,
+          "requires": {
+            "concat-stream": "^1.5.0",
+            "duplexify": "^3.4.2",
+            "end-of-stream": "^1.1.0",
+            "flush-write-stream": "^1.0.0",
+            "from2": "^2.1.0",
+            "parallel-transform": "^1.1.0",
+            "pump": "^3.0.0",
+            "pumpify": "^1.3.3",
+            "stream-each": "^1.1.0",
+            "through2": "^2.0.0"
+          }
+        },
+        "pump": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+          "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=",
+          "dev": true,
+          "requires": {
+            "end-of-stream": "^1.1.0",
+            "once": "^1.3.1"
+          }
+        },
+        "ssri": {
+          "version": "6.0.1",
+          "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
+          "integrity": "sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg=",
+          "dev": true,
+          "requires": {
+            "figgy-pudding": "^3.5.1"
+          }
+        },
+        "yallist": {
+          "version": "3.0.3",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+          "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==",
+          "dev": true
+        }
+      }
+    },
+    "map-age-cleaner": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
+      "integrity": "sha1-fVg6cwZDTAVf5HSw9FB45uG0uSo=",
+      "dev": true,
+      "requires": {
+        "p-defer": "^1.0.0"
+      }
+    },
+    "map-cache": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+      "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+      "dev": true
+    },
+    "map-obj": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+      "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+      "dev": true,
+      "optional": true
+    },
+    "map-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+      "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+      "dev": true,
+      "requires": {
+        "object-visit": "^1.0.0"
+      }
+    },
+    "math-random": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz",
+      "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==",
+      "dev": true
+    },
+    "md5.js": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+      "integrity": "sha1-tdB7jjIW4+J81yjXL3DR5qNCAF8=",
+      "dev": true,
+      "requires": {
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.1.2"
+      }
+    },
+    "media-typer": {
+      "version": "0.3.0",
+      "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+      "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+      "dev": true
+    },
+    "mem": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/mem/-/mem-4.1.0.tgz",
+      "integrity": "sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==",
+      "dev": true,
+      "requires": {
+        "map-age-cleaner": "^0.1.1",
+        "mimic-fn": "^1.0.0",
+        "p-is-promise": "^2.0.0"
+      }
+    },
+    "memory-fs": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
+      "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
+      "dev": true,
+      "requires": {
+        "errno": "^0.1.3",
+        "readable-stream": "^2.0.1"
+      }
+    },
+    "meow": {
+      "version": "3.7.0",
+      "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+      "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "camelcase-keys": "^2.0.0",
+        "decamelize": "^1.1.2",
+        "loud-rejection": "^1.0.0",
+        "map-obj": "^1.0.1",
+        "minimist": "^1.1.3",
+        "normalize-package-data": "^2.3.4",
+        "object-assign": "^4.0.1",
+        "read-pkg-up": "^1.0.1",
+        "redent": "^1.0.0",
+        "trim-newlines": "^1.0.0"
+      }
+    },
+    "merge-descriptors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+      "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
+      "dev": true
+    },
+    "methods": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+      "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+      "dev": true
+    },
+    "micromatch": {
+      "version": "3.1.10",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+      "integrity": "sha1-cIWbyVyYQJUvNZoGij/En57PrCM=",
+      "dev": true,
+      "requires": {
+        "arr-diff": "^4.0.0",
+        "array-unique": "^0.3.2",
+        "braces": "^2.3.1",
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "extglob": "^2.0.4",
+        "fragment-cache": "^0.2.1",
+        "kind-of": "^6.0.2",
+        "nanomatch": "^1.2.9",
+        "object.pick": "^1.3.0",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.2"
+      }
+    },
+    "miller-rabin": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+      "integrity": "sha1-8IA1HIZbDcViqEYpZtqlNUPHik0=",
+      "dev": true,
+      "requires": {
+        "bn.js": "^4.0.0",
+        "brorand": "^1.0.1"
+      }
+    },
+    "mime": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+      "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=",
+      "dev": true,
+      "optional": true
+    },
+    "mime-db": {
+      "version": "1.37.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
+      "integrity": "sha1-C2oM5v2+lXbiXx8tL96IMNwK0Ng=",
+      "dev": true
+    },
+    "mime-types": {
+      "version": "2.1.21",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
+      "integrity": "sha1-KJlaoey3cHQv5q5+WPkYHHRLP5Y=",
+      "dev": true,
+      "requires": {
+        "mime-db": "~1.37.0"
+      }
+    },
+    "mimic-fn": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+      "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=",
+      "dev": true
+    },
+    "mini-css-extract-plugin": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz",
+      "integrity": "sha512-IuaLjruM0vMKhUUT51fQdQzBYTX49dLj8w68ALEAe2A4iYNpIC4eMac67mt3NzycvjOlf07/kYxJDc0RTl1Wqw==",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.1.0",
+        "schema-utils": "^1.0.0",
+        "webpack-sources": "^1.1.0"
+      },
+      "dependencies": {
+        "loader-utils": {
+          "version": "1.2.3",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+          "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^2.0.0",
+            "json5": "^1.0.1"
+          }
+        }
+      }
+    },
+    "minimalistic-assert": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+      "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=",
+      "dev": true
+    },
+    "minimalistic-crypto-utils": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+      "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=",
+      "dev": true
+    },
+    "minimatch": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+      "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
+      "dev": true,
+      "requires": {
+        "brace-expansion": "^1.1.7"
+      }
+    },
+    "minimist": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+      "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+      "dev": true
+    },
+    "minipass": {
+      "version": "2.3.5",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz",
+      "integrity": "sha1-ys6+SSAiSX9law8PUeJoKp7S2Eg=",
+      "dev": true,
+      "requires": {
+        "safe-buffer": "^5.1.2",
+        "yallist": "^3.0.0"
+      },
+      "dependencies": {
+        "yallist": {
+          "version": "3.0.3",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+          "integrity": "sha1-tLBJ4xS+VF486AIjbWzSLNkcPek=",
+          "dev": true
+        }
+      }
+    },
+    "minizlib": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz",
+      "integrity": "sha1-3SfqYTYkPHyIBoToZyuzpF/ZthQ=",
+      "dev": true,
+      "requires": {
+        "minipass": "^2.2.1"
+      }
+    },
+    "mississippi": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz",
+      "integrity": "sha1-NEKlCPr8KFAEhv7qmUCWduTuWm8=",
+      "dev": true,
+      "requires": {
+        "concat-stream": "^1.5.0",
+        "duplexify": "^3.4.2",
+        "end-of-stream": "^1.1.0",
+        "flush-write-stream": "^1.0.0",
+        "from2": "^2.1.0",
+        "parallel-transform": "^1.1.0",
+        "pump": "^2.0.1",
+        "pumpify": "^1.3.3",
+        "stream-each": "^1.1.0",
+        "through2": "^2.0.0"
+      }
+    },
+    "mixin-deep": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+      "integrity": "sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4=",
+      "dev": true,
+      "requires": {
+        "for-in": "^1.0.2",
+        "is-extendable": "^1.0.1"
+      },
+      "dependencies": {
+        "is-extendable": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+          "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=",
+          "dev": true,
+          "requires": {
+            "is-plain-object": "^2.0.4"
+          }
+        }
+      }
+    },
+    "mixin-object": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz",
+      "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=",
+      "dev": true,
+      "requires": {
+        "for-in": "^0.1.3",
+        "is-extendable": "^0.1.1"
+      },
+      "dependencies": {
+        "for-in": {
+          "version": "0.1.8",
+          "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz",
+          "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=",
+          "dev": true
+        }
+      }
+    },
+    "mkdirp": {
+      "version": "0.5.1",
+      "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+      "dev": true,
+      "requires": {
+        "minimist": "0.0.8"
+      },
+      "dependencies": {
+        "minimist": {
+          "version": "0.0.8",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+          "dev": true
+        }
+      }
+    },
+    "move-concurrently": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
+      "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+      "dev": true,
+      "requires": {
+        "aproba": "^1.1.1",
+        "copy-concurrently": "^1.0.0",
+        "fs-write-stream-atomic": "^1.0.8",
+        "mkdirp": "^0.5.1",
+        "rimraf": "^2.5.4",
+        "run-queue": "^1.0.3"
+      }
+    },
+    "ms": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+      "dev": true
+    },
+    "multicast-dns": {
+      "version": "6.2.3",
+      "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
+      "integrity": "sha1-oOx72QVcQoL3kMPIL04o2zsxsik=",
+      "dev": true,
+      "requires": {
+        "dns-packet": "^1.3.1",
+        "thunky": "^1.0.2"
+      }
+    },
+    "multicast-dns-service-types": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
+      "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
+      "dev": true
+    },
+    "mute-stream": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+      "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+      "dev": true
+    },
+    "nan": {
+      "version": "2.12.1",
+      "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz",
+      "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==",
+      "dev": true,
+      "optional": true
+    },
+    "nanomatch": {
+      "version": "1.2.13",
+      "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+      "integrity": "sha1-uHqKpPwN6P5r6IiVs4mD/yZb0Rk=",
+      "dev": true,
+      "requires": {
+        "arr-diff": "^4.0.0",
+        "array-unique": "^0.3.2",
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "fragment-cache": "^0.2.1",
+        "is-windows": "^1.0.2",
+        "kind-of": "^6.0.2",
+        "object.pick": "^1.3.0",
+        "regex-not": "^1.0.0",
+        "snapdragon": "^0.8.1",
+        "to-regex": "^3.0.1"
+      }
+    },
+    "negotiator": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
+      "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
+      "dev": true
+    },
+    "neo-async": {
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz",
+      "integrity": "sha1-udFeTXHGdikIZUtRg+04t1M0CDU=",
+      "dev": true
+    },
+    "ng2-split-pane": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/ng2-split-pane/-/ng2-split-pane-1.3.1.tgz",
+      "integrity": "sha1-FF2uiG6DPVVC4Y8vRaabotXtxEc="
+    },
+    "ngx-bootstrap": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/ngx-bootstrap/-/ngx-bootstrap-3.1.2.tgz",
+      "integrity": "sha1-9Gb2KQtFaAbawqm5WhL53El5eC8="
+    },
+    "nice-try": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+      "integrity": "sha1-ozeKdpbOfSI+iPybdkvX7xCJ42Y=",
+      "dev": true
+    },
+    "node-fetch-npm": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz",
+      "integrity": "sha1-cljJBGGC3KNFtCCO2pGNrzNpf/c=",
+      "dev": true,
+      "requires": {
+        "encoding": "^0.1.11",
+        "json-parse-better-errors": "^1.0.0",
+        "safe-buffer": "^5.1.1"
+      }
+    },
+    "node-forge": {
+      "version": "0.7.5",
+      "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz",
+      "integrity": "sha1-bBUsNFzhHFL0ZcKr2VfoY5zWdN8=",
+      "dev": true
+    },
+    "node-gyp": {
+      "version": "3.8.0",
+      "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
+      "integrity": "sha1-VAMEJhwzDoDQ1e3OJTpoyzlkIYw=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "fstream": "^1.0.0",
+        "glob": "^7.0.3",
+        "graceful-fs": "^4.1.2",
+        "mkdirp": "^0.5.0",
+        "nopt": "2 || 3",
+        "npmlog": "0 || 1 || 2 || 3 || 4",
+        "osenv": "0",
+        "request": "^2.87.0",
+        "rimraf": "2",
+        "semver": "~5.3.0",
+        "tar": "^2.0.0",
+        "which": "1"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.3.0",
+          "resolved": "http://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+          "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "node-libs-browser": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz",
+      "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==",
+      "dev": true,
+      "requires": {
+        "assert": "^1.1.1",
+        "browserify-zlib": "^0.2.0",
+        "buffer": "^4.3.0",
+        "console-browserify": "^1.1.0",
+        "constants-browserify": "^1.0.0",
+        "crypto-browserify": "^3.11.0",
+        "domain-browser": "^1.1.1",
+        "events": "^3.0.0",
+        "https-browserify": "^1.0.0",
+        "os-browserify": "^0.3.0",
+        "path-browserify": "0.0.0",
+        "process": "^0.11.10",
+        "punycode": "^1.2.4",
+        "querystring-es3": "^0.2.0",
+        "readable-stream": "^2.3.3",
+        "stream-browserify": "^2.0.1",
+        "stream-http": "^2.7.2",
+        "string_decoder": "^1.0.0",
+        "timers-browserify": "^2.0.4",
+        "tty-browserify": "0.0.0",
+        "url": "^0.11.0",
+        "util": "^0.11.0",
+        "vm-browserify": "0.0.4"
+      },
+      "dependencies": {
+        "punycode": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+          "dev": true
+        }
+      }
+    },
+    "node-releases": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.7.tgz",
+      "integrity": "sha512-bKdrwaqJUPHqlCzDD7so/R+Nk0jGv9a11ZhLrD9f6i947qGLrGAhU3OxRENa19QQmwzGy/g6zCDEuLGDO8HPvA==",
+      "dev": true,
+      "requires": {
+        "semver": "^5.3.0"
+      }
+    },
+    "node-sass": {
+      "version": "4.11.0",
+      "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.11.0.tgz",
+      "integrity": "sha512-bHUdHTphgQJZaF1LASx0kAviPH7sGlcyNhWade4eVIpFp6tsn7SV8xNMTbsQFpEV9VXpnwTTnNYlfsZXgGgmkA==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "async-foreach": "^0.1.3",
+        "chalk": "^1.1.1",
+        "cross-spawn": "^3.0.0",
+        "gaze": "^1.0.0",
+        "get-stdin": "^4.0.1",
+        "glob": "^7.0.3",
+        "in-publish": "^2.0.0",
+        "lodash.assign": "^4.2.0",
+        "lodash.clonedeep": "^4.3.2",
+        "lodash.mergewith": "^4.6.0",
+        "meow": "^3.7.0",
+        "mkdirp": "^0.5.1",
+        "nan": "^2.10.0",
+        "node-gyp": "^3.8.0",
+        "npmlog": "^4.0.0",
+        "request": "^2.88.0",
+        "sass-graph": "^2.2.4",
+        "stdout-stream": "^1.4.0",
+        "true-case-path": "^1.0.2"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+          "dev": true,
+          "optional": true
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
+    "nopt": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+      "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "abbrev": "1"
+      }
+    },
+    "normalize-package-data": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+      "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+      "dev": true,
+      "requires": {
+        "hosted-git-info": "^2.1.4",
+        "resolve": "^1.10.0",
+        "semver": "2 || 3 || 4 || 5",
+        "validate-npm-package-license": "^3.0.1"
+      }
+    },
+    "normalize-path": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+      "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+      "dev": true,
+      "requires": {
+        "remove-trailing-separator": "^1.0.1"
+      }
+    },
+    "normalize-range": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+      "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
+      "dev": true
+    },
+    "npm-bundled": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz",
+      "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==",
+      "dev": true
+    },
+    "npm-package-arg": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.0.tgz",
+      "integrity": "sha1-Fa4eJ1ilAn77TCUFVLhac323/ME=",
+      "dev": true,
+      "requires": {
+        "hosted-git-info": "^2.6.0",
+        "osenv": "^0.1.5",
+        "semver": "^5.5.0",
+        "validate-npm-package-name": "^3.0.0"
+      }
+    },
+    "npm-packlist": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.3.0.tgz",
+      "integrity": "sha512-qPBc6CnxEzpOcc4bjoIBJbYdy0D/LFFPUdxvfwor4/w3vxeE0h6TiOVurCEPpQ6trjN77u/ShyfeJGsbAfB3dA==",
+      "dev": true,
+      "requires": {
+        "ignore-walk": "^3.0.1",
+        "npm-bundled": "^1.0.1"
+      }
+    },
+    "npm-pick-manifest": {
+      "version": "2.2.3",
+      "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-2.2.3.tgz",
+      "integrity": "sha1-MhEdKpViY4uyyPK/J/fzCSyPrkA=",
+      "dev": true,
+      "requires": {
+        "figgy-pudding": "^3.5.1",
+        "npm-package-arg": "^6.0.0",
+        "semver": "^5.4.1"
+      }
+    },
+    "npm-registry-fetch": {
+      "version": "3.9.0",
+      "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-3.9.0.tgz",
+      "integrity": "sha512-srwmt8YhNajAoSAaDWndmZgx89lJwIZ1GWxOuckH4Coek4uHv5S+o/l9FLQe/awA+JwTnj4FJHldxhlXdZEBmw==",
+      "dev": true,
+      "requires": {
+        "JSONStream": "^1.3.4",
+        "bluebird": "^3.5.1",
+        "figgy-pudding": "^3.4.1",
+        "lru-cache": "^4.1.3",
+        "make-fetch-happen": "^4.0.1",
+        "npm-package-arg": "^6.1.0"
+      }
+    },
+    "npm-run-path": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+      "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+      "dev": true,
+      "requires": {
+        "path-key": "^2.0.0"
+      }
+    },
+    "npmlog": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
+      "integrity": "sha1-CKfyqL9zRgR3mp76StXMcXq7lUs=",
+      "dev": true,
+      "requires": {
+        "are-we-there-yet": "~1.1.2",
+        "console-control-strings": "~1.1.0",
+        "gauge": "~2.7.3",
+        "set-blocking": "~2.0.0"
+      }
+    },
+    "nth-check": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
+      "integrity": "sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw=",
+      "dev": true,
+      "requires": {
+        "boolbase": "~1.0.0"
+      }
+    },
+    "null-check": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz",
+      "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=",
+      "dev": true
+    },
+    "num2fraction": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
+      "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
+      "dev": true
+    },
+    "number-is-nan": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+      "dev": true
+    },
+    "oauth-sign": {
+      "version": "0.9.0",
+      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+      "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU=",
+      "dev": true
+    },
+    "object-assign": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+      "dev": true
+    },
+    "object-component": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
+      "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=",
+      "dev": true
+    },
+    "object-copy": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+      "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+      "dev": true,
+      "requires": {
+        "copy-descriptor": "^0.1.0",
+        "define-property": "^0.2.5",
+        "kind-of": "^3.0.3"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "dev": true,
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        },
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
+      }
+    },
+    "object-visit": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+      "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+      "dev": true,
+      "requires": {
+        "isobject": "^3.0.0"
+      }
+    },
+    "object.omit": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+      "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+      "dev": true,
+      "requires": {
+        "for-own": "^0.1.4",
+        "is-extendable": "^0.1.1"
+      },
+      "dependencies": {
+        "for-own": {
+          "version": "0.1.5",
+          "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+          "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+          "dev": true,
+          "requires": {
+            "for-in": "^1.0.1"
+          }
+        }
+      }
+    },
+    "object.pick": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+      "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+      "dev": true,
+      "requires": {
+        "isobject": "^3.0.1"
+      }
+    },
+    "obuf": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
+      "integrity": "sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4=",
+      "dev": true
+    },
+    "on-finished": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+      "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+      "dev": true,
+      "requires": {
+        "ee-first": "1.1.1"
+      }
+    },
+    "on-headers": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
+      "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=",
+      "dev": true
+    },
+    "once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+      "dev": true,
+      "requires": {
+        "wrappy": "1"
+      }
+    },
+    "onetime": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+      "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+      "dev": true,
+      "requires": {
+        "mimic-fn": "^1.0.0"
+      }
+    },
+    "opn": {
+      "version": "5.4.0",
+      "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz",
+      "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==",
+      "dev": true,
+      "requires": {
+        "is-wsl": "^1.1.0"
+      }
+    },
+    "optimist": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
+      "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
+      "dev": true,
+      "requires": {
+        "minimist": "~0.0.1",
+        "wordwrap": "~0.0.2"
+      },
+      "dependencies": {
+        "minimist": {
+          "version": "0.0.10",
+          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
+          "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
+          "dev": true
+        }
+      }
+    },
+    "original": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
+      "integrity": "sha1-5EKmHP/hxf0gpl8yYcJmY7MD8l8=",
+      "dev": true,
+      "requires": {
+        "url-parse": "^1.4.3"
+      }
+    },
+    "os-browserify": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
+      "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
+      "dev": true
+    },
+    "os-homedir": {
+      "version": "1.0.2",
+      "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+      "dev": true
+    },
+    "os-locale": {
+      "version": "1.4.0",
+      "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+      "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "lcid": "^1.0.0"
+      }
+    },
+    "os-tmpdir": {
+      "version": "1.0.2",
+      "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+      "dev": true
+    },
+    "osenv": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
+      "integrity": "sha1-hc36+uso6Gd/QW4odZK18/SepBA=",
+      "dev": true,
+      "requires": {
+        "os-homedir": "^1.0.0",
+        "os-tmpdir": "^1.0.0"
+      }
+    },
+    "p-defer": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
+      "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
+      "dev": true
+    },
+    "p-finally": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+      "dev": true
+    },
+    "p-is-promise": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz",
+      "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==",
+      "dev": true
+    },
+    "p-limit": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+      "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=",
+      "dev": true,
+      "requires": {
+        "p-try": "^1.0.0"
+      }
+    },
+    "p-locate": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+      "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+      "dev": true,
+      "requires": {
+        "p-limit": "^1.1.0"
+      }
+    },
+    "p-map": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
+      "integrity": "sha1-5OlPMR6rvIYzoeeZCBZfyiYkG2s=",
+      "dev": true
+    },
+    "p-try": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+      "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+      "dev": true
+    },
+    "pacote": {
+      "version": "9.4.0",
+      "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.4.0.tgz",
+      "integrity": "sha512-WQ1KL/phGMkedYEQx9ODsjj7xvwLSpdFJJdEXrLyw5SILMxcTNt5DTxT2Z93fXuLFYJBlZJdnwdalrQdB/rX5w==",
+      "dev": true,
+      "requires": {
+        "bluebird": "^3.5.3",
+        "cacache": "^11.3.2",
+        "figgy-pudding": "^3.5.1",
+        "get-stream": "^4.1.0",
+        "glob": "^7.1.3",
+        "lru-cache": "^5.1.1",
+        "make-fetch-happen": "^4.0.1",
+        "minimatch": "^3.0.4",
+        "minipass": "^2.3.5",
+        "mississippi": "^3.0.0",
+        "mkdirp": "^0.5.1",
+        "normalize-package-data": "^2.4.0",
+        "npm-package-arg": "^6.1.0",
+        "npm-packlist": "^1.1.12",
+        "npm-pick-manifest": "^2.2.3",
+        "npm-registry-fetch": "^3.8.0",
+        "osenv": "^0.1.5",
+        "promise-inflight": "^1.0.1",
+        "promise-retry": "^1.1.1",
+        "protoduck": "^5.0.1",
+        "rimraf": "^2.6.2",
+        "safe-buffer": "^5.1.2",
+        "semver": "^5.6.0",
+        "ssri": "^6.0.1",
+        "tar": "^4.4.8",
+        "unique-filename": "^1.1.1",
+        "which": "^1.3.1"
+      },
+      "dependencies": {
+        "cacache": {
+          "version": "11.3.2",
+          "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz",
+          "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==",
+          "dev": true,
+          "requires": {
+            "bluebird": "^3.5.3",
+            "chownr": "^1.1.1",
+            "figgy-pudding": "^3.5.1",
+            "glob": "^7.1.3",
+            "graceful-fs": "^4.1.15",
+            "lru-cache": "^5.1.1",
+            "mississippi": "^3.0.0",
+            "mkdirp": "^0.5.1",
+            "move-concurrently": "^1.0.1",
+            "promise-inflight": "^1.0.1",
+            "rimraf": "^2.6.2",
+            "ssri": "^6.0.1",
+            "unique-filename": "^1.1.1",
+            "y18n": "^4.0.0"
+          }
+        },
+        "get-stream": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+          "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=",
+          "dev": true,
+          "requires": {
+            "pump": "^3.0.0"
+          }
+        },
+        "lru-cache": {
+          "version": "5.1.1",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+          "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+          "dev": true,
+          "requires": {
+            "yallist": "^3.0.2"
+          }
+        },
+        "mississippi": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
+          "integrity": "sha1-6goykfl+C16HdrNj1fChLZTGcCI=",
+          "dev": true,
+          "requires": {
+            "concat-stream": "^1.5.0",
+            "duplexify": "^3.4.2",
+            "end-of-stream": "^1.1.0",
+            "flush-write-stream": "^1.0.0",
+            "from2": "^2.1.0",
+            "parallel-transform": "^1.1.0",
+            "pump": "^3.0.0",
+            "pumpify": "^1.3.3",
+            "stream-each": "^1.1.0",
+            "through2": "^2.0.0"
+          }
+        },
+        "pump": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+          "integrity": "sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=",
+          "dev": true,
+          "requires": {
+            "end-of-stream": "^1.1.0",
+            "once": "^1.3.1"
+          }
+        },
+        "semver": {
+          "version": "5.6.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+          "integrity": "sha1-fnQlb7qknHWqfHogXMInmcrIAAQ=",
+          "dev": true
+        },
+        "ssri": {
+          "version": "6.0.1",
+          "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
+          "integrity": "sha1-KjxBso3UW2K2Nnbst0ABJlrp7dg=",
+          "dev": true,
+          "requires": {
+            "figgy-pudding": "^3.5.1"
+          }
+        },
+        "tar": {
+          "version": "4.4.8",
+          "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz",
+          "integrity": "sha1-sZ7sP94qluZGZt+f20DFyhvDdH0=",
+          "dev": true,
+          "requires": {
+            "chownr": "^1.1.1",
+            "fs-minipass": "^1.2.5",
+            "minipass": "^2.3.4",
+            "minizlib": "^1.1.1",
+            "mkdirp": "^0.5.0",
+            "safe-buffer": "^5.1.2",
+            "yallist": "^3.0.2"
+          }
+        },
+        "yallist": {
+          "version": "3.0.3",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+          "integrity": "sha1-tLBJ4xS+VF486AIjbWzSLNkcPek=",
+          "dev": true
+        }
+      }
+    },
+    "pako": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.8.tgz",
+      "integrity": "sha512-6i0HVbUfcKaTv+EG8ZTr75az7GFXcLYk9UyLEg7Notv/Ma+z/UG3TCoz6GiNeOrn1E/e63I0X/Hpw18jHOTUnA==",
+      "dev": true
+    },
+    "parallel-transform": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz",
+      "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=",
+      "dev": true,
+      "requires": {
+        "cyclist": "~0.2.2",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.1.5"
+      }
+    },
+    "parse-asn1": {
+      "version": "5.1.3",
+      "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.3.tgz",
+      "integrity": "sha512-VrPoetlz7B/FqjBLD2f5wBVZvsZVLnRUrxVLfRYhGXCODa/NWE4p3Wp+6+aV3ZPL3KM7/OZmxDIwwijD7yuucg==",
+      "dev": true,
+      "requires": {
+        "asn1.js": "^4.0.0",
+        "browserify-aes": "^1.0.0",
+        "create-hash": "^1.1.0",
+        "evp_bytestokey": "^1.0.0",
+        "pbkdf2": "^3.0.3",
+        "safe-buffer": "^5.1.1"
+      }
+    },
+    "parse-glob": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
+      "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+      "dev": true,
+      "requires": {
+        "glob-base": "^0.3.0",
+        "is-dotfile": "^1.0.0",
+        "is-extglob": "^1.0.0",
+        "is-glob": "^2.0.0"
+      },
+      "dependencies": {
+        "is-extglob": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+          "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+          "dev": true
+        },
+        "is-glob": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+          "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+          "dev": true,
+          "requires": {
+            "is-extglob": "^1.0.0"
+          }
+        }
+      }
+    },
+    "parse-json": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+      "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+      "dev": true,
+      "requires": {
+        "error-ex": "^1.2.0"
+      }
+    },
+    "parse5": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz",
+      "integrity": "sha1-xZNByXI/QUxFKXVWTHwApo1YrNI=",
+      "optional": true
+    },
+    "parseqs": {
+      "version": "0.0.5",
+      "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
+      "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=",
+      "dev": true,
+      "requires": {
+        "better-assert": "~1.0.0"
+      }
+    },
+    "parseuri": {
+      "version": "0.0.5",
+      "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz",
+      "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=",
+      "dev": true,
+      "requires": {
+        "better-assert": "~1.0.0"
+      }
+    },
+    "parseurl": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
+      "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=",
+      "dev": true
+    },
+    "pascalcase": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+      "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+      "dev": true
+    },
+    "path": {
+      "version": "0.12.7",
+      "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz",
+      "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=",
+      "dev": true,
+      "requires": {
+        "process": "^0.11.1",
+        "util": "^0.10.3"
+      },
+      "dependencies": {
+        "util": {
+          "version": "0.10.4",
+          "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
+          "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
+          "dev": true,
+          "requires": {
+            "inherits": "2.0.3"
+          }
+        }
+      }
+    },
+    "path-browserify": {
+      "version": "0.0.0",
+      "resolved": "http://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz",
+      "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=",
+      "dev": true
+    },
+    "path-dirname": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+      "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
+      "dev": true
+    },
+    "path-exists": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+      "dev": true
+    },
+    "path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+      "dev": true
+    },
+    "path-is-inside": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+      "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+      "dev": true
+    },
+    "path-key": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+      "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+      "dev": true
+    },
+    "path-parse": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+      "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=",
+      "dev": true
+    },
+    "path-to-regexp": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
+      "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+      "dev": true
+    },
+    "path-type": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+      "integrity": "sha1-zvMdyOCho7sNEFwM2Xzzv0f0428=",
+      "dev": true,
+      "requires": {
+        "pify": "^3.0.0"
+      }
+    },
+    "pbkdf2": {
+      "version": "3.0.17",
+      "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
+      "integrity": "sha1-l2wgZTBhexTrsyEUI597CTNuk6Y=",
+      "dev": true,
+      "requires": {
+        "create-hash": "^1.1.2",
+        "create-hmac": "^1.1.4",
+        "ripemd160": "^2.0.1",
+        "safe-buffer": "^5.0.1",
+        "sha.js": "^2.4.8"
+      }
+    },
+    "pend": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+      "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
+      "dev": true
+    },
+    "performance-now": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+      "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+      "dev": true
+    },
+    "phantomjs-prebuilt": {
+      "version": "2.1.16",
+      "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz",
+      "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=",
+      "dev": true,
+      "requires": {
+        "es6-promise": "^4.0.3",
+        "extract-zip": "^1.6.5",
+        "fs-extra": "^1.0.0",
+        "hasha": "^2.2.0",
+        "kew": "^0.7.0",
+        "progress": "^1.1.8",
+        "request": "^2.81.0",
+        "request-progress": "^2.0.1",
+        "which": "^1.2.10"
+      }
+    },
+    "pify": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+      "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+      "dev": true
+    },
+    "pinkie": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+      "dev": true
+    },
+    "pinkie-promise": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+      "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+      "dev": true,
+      "requires": {
+        "pinkie": "^2.0.0"
+      }
+    },
+    "pkg-dir": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+      "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+      "dev": true,
+      "requires": {
+        "find-up": "^2.1.0"
+      }
+    },
+    "portfinder": {
+      "version": "1.0.20",
+      "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz",
+      "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==",
+      "dev": true,
+      "requires": {
+        "async": "^1.5.2",
+        "debug": "^2.2.0",
+        "mkdirp": "0.5.x"
+      },
+      "dependencies": {
+        "async": {
+          "version": "1.5.2",
+          "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+          "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
+          "dev": true
+        }
+      }
+    },
+    "posix-character-classes": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+      "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+      "dev": true
+    },
+    "postcss": {
+      "version": "7.0.14",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz",
+      "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==",
+      "dev": true,
+      "requires": {
+        "chalk": "^2.4.2",
+        "source-map": "^0.6.1",
+        "supports-color": "^6.1.0"
+      },
+      "dependencies": {
+        "chalk": {
+          "version": "2.4.2",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+          "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^3.2.1",
+            "escape-string-regexp": "^1.0.5",
+            "supports-color": "^5.3.0"
+          },
+          "dependencies": {
+            "supports-color": {
+              "version": "5.5.0",
+              "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+              "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+              "dev": true,
+              "requires": {
+                "has-flag": "^3.0.0"
+              }
+            }
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
+          "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "dev": true,
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-import": {
+      "version": "12.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz",
+      "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.1",
+        "postcss-value-parser": "^3.2.3",
+        "read-cache": "^1.0.0",
+        "resolve": "^1.1.7"
+      }
+    },
+    "postcss-load-config": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz",
+      "integrity": "sha1-8TEt2/WRLNdHF3CDxe96GdYu5IQ=",
+      "dev": true,
+      "requires": {
+        "cosmiconfig": "^4.0.0",
+        "import-cwd": "^2.0.0"
+      }
+    },
+    "postcss-loader": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz",
+      "integrity": "sha1-a5eUPkfHLYRfqeA/Jzdz1OjdbC0=",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.1.0",
+        "postcss": "^7.0.0",
+        "postcss-load-config": "^2.0.0",
+        "schema-utils": "^1.0.0"
+      },
+      "dependencies": {
+        "loader-utils": {
+          "version": "1.2.3",
+          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+          "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^2.0.0",
+            "json5": "^1.0.1"
+          }
+        }
+      }
+    },
+    "postcss-value-parser": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+      "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
+      "dev": true
+    },
+    "preserve": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
+      "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+      "dev": true
+    },
+    "primeicons": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-1.0.0.tgz",
+      "integrity": "sha512-p/hzIjUVccW4eJPhuORHI3AUkDpqfvCQVrjxbFEejnTEdWY4C8fomVfjiaA9jCu83fSQnBHuRIGB96iAR8R6uA=="
+    },
+    "primeng": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/primeng/-/primeng-7.0.1.tgz",
+      "integrity": "sha1-ChvqVAEWsRBbbnVBOqu3vmK5MRw="
+    },
+    "process": {
+      "version": "0.11.10",
+      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",