Merge "correct link"
authorSébastien Determe <sebastien.determe@intl.att.com>
Wed, 28 Aug 2019 18:59:10 +0000 (18:59 +0000)
committerGerrit Code Review <gerrit@onap.org>
Wed, 28 Aug 2019 18:59:10 +0000 (18:59 +0000)
67 files changed:
.gitignore
docs/swagger/swagger.pdf
extra/docker/clamp/clamp.env
extra/docker/clamp/docker-compose.yml
extra/sql/bulkload/create-tables.sql
pom.xml
src/main/docker/backend/backend-files.xml
src/main/docker/frontend/Dockerfile
src/main/docker/frontend/frontend-files.xml
src/main/docker/frontend/nginx/nginx.conf [moved from ui-react/nginx/nginx.conf with 52% similarity]
src/main/java/org/onap/clamp/clds/config/DefaultUserConfiguration.java
src/main/java/org/onap/clamp/clds/service/CldsDictionaryService.java
src/main/java/org/onap/clamp/loop/Loop.java
src/main/java/org/onap/clamp/loop/LoopCsarInstaller.java
src/main/java/org/onap/clamp/loop/components/external/ExternalComponent.java
src/main/java/org/onap/clamp/loop/components/external/ExternalComponentState.java
src/main/java/org/onap/clamp/loop/components/external/PolicyComponent.java
src/main/java/org/onap/clamp/policy/operational/LegacyOperationalPolicy.java
src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java
src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java [new file with mode: 0644]
src/main/resources/META-INF/resources/swagger.html
src/main/resources/application-noaaf.properties
src/main/resources/application.properties
src/main/resources/clds/aaf/ssl/clamp.key [new file with mode: 0644]
src/main/resources/clds/aaf/ssl/clamp.pem [new file with mode: 0644]
src/main/resources/clds/camel/routes/dcae-flows.xml
src/main/resources/clds/camel/routes/loop-flows.xml
src/main/resources/clds/camel/routes/policy-flows.xml
src/main/resources/clds/camel/routes/utils-flows.xml
src/main/resources/clds/json-schema/operational_policies/operational_policy.json [new file with mode: 0644]
src/test/java/org/onap/clamp/clds/it/CldsDictionaryServiceItCase.java
src/test/java/org/onap/clamp/loop/LoopToJsonTest.java
src/test/java/org/onap/clamp/policy/microservice/OperationalPolicyPayloadTest.java
src/test/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilderTest.java [new file with mode: 0644]
src/test/resources/clds/OperationalPolicyRepresentationBuilderTest.java [new file with mode: 0644]
src/test/resources/http-cache/third_party_proxy.py
src/test/resources/sql/loop-examples.sql
src/test/resources/tosca/guard1-policy-payload.json
src/test/resources/tosca/guard2-policy-payload.json
src/test/resources/tosca/operational-policy-json-schema.json [new file with mode: 0644]
src/test/resources/tosca/operational-policy-payload-legacy.yaml
src/test/resources/tosca/operational-policy-payload.json
src/test/resources/tosca/operational-policy-payload.yaml
src/test/resources/tosca/operational-policy-properties.json
src/test/resources/tosca/pdp-group-policy-payload.json
ui-react/package-lock.json [new file with mode: 0644]
ui-react/package.json
ui-react/public/index.html
ui-react/src/LoopUI.js
ui-react/src/__test__/LoopCache.test.js
ui-react/src/__test__/__snapshots__/OpenLoopModal.test.js.snap [new file with mode: 0644]
ui-react/src/api/LoopActionService.js
ui-react/src/api/LoopCache.js
ui-react/src/api/LoopService.js
ui-react/src/api/UserService.js
ui-react/src/components/dialogs/ConfigurationPolicy/ConfigurationPolicyModal.js
ui-react/src/components/dialogs/DeployLoop.js [new file with mode: 0644]
ui-react/src/components/dialogs/LoopProperties.js
ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicy.css [deleted file]
ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicyModal.js
ui-react/src/components/dialogs/PerformActions.js [new file with mode: 0644]
ui-react/src/components/dialogs/RefreshStatus.js [new file with mode: 0644]
ui-react/src/components/dialogs/UserInfo.js
ui-react/src/components/loop_viewer/svg/LoopSvg.js
ui-react/src/components/menu/MenuBar.js
ui-react/src/index.js
ui-react/src/theme/globalStyle.js

index fbdcf4a..235ece2 100644 (file)
@@ -7,7 +7,6 @@ target
 *.iml
 ui-react/node_modules
 ui-react/build
-**/package-lock.json
 **/.evosuite/
 **/debug-logs/
 *.log
index 0ef34fe..a2cf79b 100644 (file)
@@ -4,8 +4,8 @@
 << /Title (Clamp Rest API)
 /Creator (Asciidoctor PDF 1.5.0.alpha.10, based on Prawn 1.3.0)
 /Producer (Asciidoctor PDF 1.5.0.alpha.10, based on Prawn 1.3.0)
-/CreationDate (D:20190613105324+02'00')
-/ModDate (D:20190613105324+02'00')
+/CreationDate (D:20190820073408-07'00')
+/ModDate (D:20190820073408-07'00')
 >>
 endobj
 2 0 obj
index fee3152..ae6dbec 100644 (file)
@@ -1,2 +1,2 @@
 ### Be careful, this must be in one line only ###
-SPRING_APPLICATION_JSON={"spring.datasource.cldsdb.url":"jdbc:mariadb:sequential://db:3306/cldsdb4?autoReconnect=true&connectTimeout=10000&socketTimeout=10000&retriesAllDown=3"}
\ No newline at end of file
+SPRING_APPLICATION_JSON={"spring.datasource.cldsdb.url":"jdbc:mariadb:sequential://db:3306/cldsdb4?autoReconnect=true&connectTimeout=10000&socketTimeout=10000&retriesAllDown=3","spring.profiles.active":"clamp-default,clamp-default-user,clamp-sdc-controller-new","clamp.config.policy.api.url":"http4://third-party-proxy:8085","clamp.config.policy.pap.url":"http4://third-party-proxy:8085","clamp.config.dcae.inventory.url":"http://third-party-proxy:8085","clamp.config.dcae.deployment.url":"http4://third-party-proxy:8085"}
index 5daca05..7026de9 100644 (file)
@@ -1,6 +1,12 @@
-version: '2'
+version: '3.1'
 
 services:
+  clamp-frontend:
+    image: onap/clamp-frontend
+    depends_on:
+      - clamp-backend
+    ports:
+      - "443:443"
   db:
     image: mariadb:10.3.12
     volumes:
@@ -12,23 +18,21 @@ services:
     ports:
       - "3306:3306"
 
-  clamp:
-    image: onap/clamp
-    volumes:
-      - "./config/:/opt/clamp/config:rw"
+  clamp-backend:
+    image: onap/clamp-backend
     depends_on:
       - db
+      - third-party-proxy
     env_file:
       - clamp.env
     ports:
-      - "8080:8080"
       - "8443:8443"
-
-  third_party_proxy:
+      
+  third-party-proxy:
     image: python:2-slim
     volumes:
       - "../../../src/test/resources/http-cache/example/:/thirdparty:rw"
       - "../../../src/test/resources/http-cache/:/script/:ro"
     ports:
       - "8085:8085"
-    command: /bin/sh -c "pip install requests &&  pip install simplejson && python -u /script/third_party_proxy.py -v true --port 8085 --root /thirdparty --proxyaddress third_party_proxy:8085"
+    command: /bin/sh -c "pip install requests &&  pip install simplejson && python -u /script/third_party_proxy.py -v true --port 8085 --root /thirdparty --proxyaddress third-party-proxy:8085"
index 121c5e6..0e15d4d 100644 (file)
@@ -24,6 +24,7 @@
         global_properties_json json,
         last_computed_state varchar(255) not null,
         model_properties_json json,
+        operational_policy_schema json,
         svg_representation MEDIUMTEXT,
         primary key (name)
     ) engine=InnoDB;
diff --git a/pom.xml b/pom.xml
index 841917b..ca20dfc 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
   ============LICENSE_START=======================================================
   ONAP CLAMP
   ================================================================================
-  Copyright (C) 2017-2018 AT&T Intellectual Property. All rights
+  Copyright (C) 2017-2019 AT&T Intellectual Property. All rights
                               reserved.
   ================================================================================
   Licensed under the Apache License, Version 2.0 (the "License");
@@ -24,7 +24,7 @@
                <modelVersion>4.0.0</modelVersion>
                <groupId>org.onap.clamp</groupId>
                <artifactId>clds</artifactId>
-               <version>4.1.0-SNAPSHOT</version>
+               <version>4.1.1-SNAPSHOT</version>
                <name>clamp</name>
 
 
@@ -87,6 +87,8 @@
                                <skip.staging.artifacts>false</skip.staging.artifacts>
                                <python.http.proxy.param/>
                                <tomcat.version>9.0.20</tomcat.version>
+                               <ui.react.src>ui-react</ui.react.src>
+                               <npm.publish.url>https://nexus3.onap.org/repository/npm.snapshot/</npm.publish.url>
                </properties>
 
                <profiles>
                                                                </includes>
                                                </resource>
                                                <resource>
-                                                               <directory>src/main/docker</directory>
-                                                               <includes>
-                                                                               <include>**/*</include>
-                                                               </includes>
-                                                               <filtering>true</filtering>
+                                                       <directory>${ui.react.src}</directory>
+                                                       <includes>
+                                                               <include>src/**</include>
+                                                               <include>public/**</include>
+                                                               <include>package.json</include>
+                                                               <include>package-lock.json</include>
+                                                       </includes>
+                                                       <filtering>false</filtering>
+                                                       <targetPath>${project.build.directory}/${ui.react.src}</targetPath>
                                                </resource>
                                </resources>
 
                                        <plugin>
                                                <groupId>com.github.eirslett</groupId>
                                                <artifactId>frontend-maven-plugin</artifactId>
-                                               <version>1.6</version>
+                                               <version>1.8.0</version>
                                                <configuration>
-                                                       <installDirectory>${project.build.directory}/clamp-ui</installDirectory>
-                                                       <workingDirectory>${project.build.directory}/clamp-ui</workingDirectory>
-                                                       <skip>${maven.test.skip}</skip>
+                                                       <installDirectory>${project.build.directory}/${ui.react.src}</installDirectory>
+                                                       <workingDirectory>${project.build.directory}/${ui.react.src}</workingDirectory>
                                                </configuration>
-
                                                <executions>
                                                        <execution>
                                                                <id>install_node_and_npm</id>
                                                                <goals>
                                                                        <goal>install-node-and-npm</goal>
                                                                </goals>
-                                                               <phase>test</phase>
+                                                               <phase>generate-sources</phase>
                                                                <configuration>
                                                                        <nodeVersion>v8.11.1</nodeVersion>
                                                                        <npmVersion>5.6.0</npmVersion>
                                                                <goals>
                                                                        <goal>npm</goal>
                                                                </goals>
-                                                               <phase>test</phase>
+                                                               <phase>compile</phase>
                                                                <configuration>
                                                                        <arguments>install</arguments>
                                                                </configuration>
                                                                </goals>
                                                                <phase>test</phase>
                                                                <configuration>
-                                                                       <arguments>run-script test:coverage</arguments>
+                                                                       <arguments>run-script test</arguments>
                                                                </configuration>
                                                        </execution>
-
+                                                               <execution>
+                                                                       <id>npm_publish</id>
+                                                                       <goals>
+                                                                               <goal>npm</goal>
+                                                                       </goals>
+                                                                       <phase>deploy</phase>
+                                                                       <configuration>
+                                                                               <arguments>publish --registry ${npm.publish.url}</arguments>
+                                                                       </configuration>
+                                                               </execution>
                                                </executions>
                                        </plugin>
                                </plugins>
index 7a9c6f5..c73c47f 100644 (file)
@@ -36,7 +36,7 @@
                                <include>${project.build.finalName}.jar</include>
                        </includes>
                        <directory>${project.build.directory}</directory>
-                       <outputDirectory>/</outputDirectory>
+                       <outputDirectory></outputDirectory>
                </fileSet>
        </fileSets>
 
index 8c755b0..8cdad30 100644 (file)
@@ -46,7 +46,9 @@ RUN mkdir /var/log/onap
 RUN chmod a+rwx /var/log/onap\r
 \r
 COPY --from=build /app/build /usr/share/nginx/html\r
+COPY --from=build /app/ssl /etc/ssl\r
 RUN rm /etc/nginx/conf.d/default.conf\r
-COPY onap-clamp-frontend/nginx/nginx.conf /etc/nginx/conf.d\r
-EXPOSE 80\r
+#COPY onap-clamp-frontend/nginx/nginx.conf /etc/nginx/conf.d\r
+COPY nginx/nginx.conf /etc/nginx/conf.d\r
+EXPOSE 443\r
 CMD ["nginx", "-g", "daemon off;"]
\ No newline at end of file
index 2610e82..aaf32be 100644 (file)
@@ -17,7 +17,7 @@
   limitations under the License.
   ============LICENSE_END=========================================================
   -->
-
+  
 <assembly
        xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        <excludes>
                                <exclude>node_modules</exclude>
                        </excludes>
-                       <directory>${project.basedir}/ui-react</directory>
-                       <outputDirectory>/</outputDirectory>
+                       <directory>${project.build.directory}/${ui.react.src}</directory>
+                       <outputDirectory></outputDirectory>
+               </fileSet>
+               <!-- include ssl certificates files obtain from aaf p12 -->
+               <fileSet>
+                       <directory>${project.basedir}/src/main/resources/clds/aaf/ssl</directory>
+                       <outputDirectory>ssl</outputDirectory>
                </fileSet>
        </fileSets>
 
similarity index 52%
rename from ui-react/nginx/nginx.conf
rename to src/main/docker/frontend/nginx/nginx.conf
index 758a646..5bcac5c 100644 (file)
@@ -1,7 +1,13 @@
 server {
 
-  listen 80;
-
+  listen 443 default ssl;
+  ssl_protocols TLSv1.2;
+  ssl_certificate /etc/ssl/clamp.pem;
+  ssl_certificate_key /etc/ssl/clamp.key;
+    location /restservices/clds/ {
+        proxy_pass https://clamp-backend:8443;
+    }
+  
   location / {
     root   /usr/share/nginx/html;
     index  index.html index.htm;
index a8ff120..9d4e7d0 100644 (file)
@@ -75,8 +75,10 @@ public class DefaultUserConfiguration extends WebSecurityConfigurerAdapter {
     protected void configure(HttpSecurity http) {
         try {
             http.csrf().disable().httpBasic().and().authorizeRequests().antMatchers("/restservices/clds/v1/user/**")
-            .authenticated().anyRequest().permitAll().and().logout().and().sessionManagement().maximumSessions(1)
-            .and().invalidSessionUrl("/designer/timeout.html");
+                    .authenticated().anyRequest().permitAll().and().logout()
+                    .logoutUrl("/restservices/clds/v1/user/logout").logoutSuccessUrl("/index.html")
+                    .invalidateHttpSession(true).deleteCookies("JSESSIONID").and().sessionManagement()
+                    .maximumSessions(1);
 
         } catch (Exception e) {
             logger.error(SETUP_WEB_USERS_EXCEPTION_MSG, e);
@@ -105,7 +107,7 @@ public class DefaultUserConfiguration extends WebSecurityConfigurerAdapter {
             }
             for (CldsUser user : usersList) {
                 auth.inMemoryAuthentication().withUser(user.getUser()).password(user.getPassword())
-                .authorities(user.getPermissionsString()).and().passwordEncoder(passwordEncoder);
+                        .authorities(user.getPermissionsString()).and().passwordEncoder(passwordEncoder);
             }
         } catch (Exception e) {
             logger.error(SETUP_WEB_USERS_EXCEPTION_MSG, e);
@@ -118,8 +120,7 @@ public class DefaultUserConfiguration extends WebSecurityConfigurerAdapter {
      * CldsUser.
      *
      * @return The array of CldsUser
-     * @throws IOException
-     *         In case of the file is not found
+     * @throws IOException In case of the file is not found
      */
     private CldsUser[] loadUsers() throws IOException {
         logger.info("Load from clds-users.properties");
@@ -134,7 +135,7 @@ public class DefaultUserConfiguration extends WebSecurityConfigurerAdapter {
             return new BCryptPasswordEncoder(cldsBcryptEncoderStrength);
         } else {
             throw new CldsConfigException(
-                "Invalid clamp.config.security.encoder value. 'bcrypt' is the only option at this time.");
+                    "Invalid clamp.config.security.encoder value. 'bcrypt' is the only option at this time.");
         }
     }
 }
\ No newline at end of file
index c228e17..454056c 100644 (file)
@@ -60,47 +60,73 @@ public class CldsDictionaryService extends SecureServiceBase {
 
 
     @PostConstruct
-    private final void initConstruct() {
+    private void initConstruct() {
         permissionReadTosca = SecureServicePermission.create(cldsPermissionTypeTosca, cldsPermissionInstance, "read");
         permissionUpdateTosca = SecureServicePermission.create(cldsPermissionTypeTosca, cldsPermissionInstance,
                 "update");
     }
 
     /**
-     * REST Service that creates or Updates a Dictionary.
-     * 
+     * REST Service that creates a Dictionary.
+     *
      * @param dictionaryName dictionary name
-     * @param cldsDictionary clds dictionary
      * @return CldsDictionary that was created in DB.
      */
+    public CldsDictionary createDictionary(String dictionaryName) {
+        CldsDictionary cldsDictionary = new CldsDictionary();
+        cldsDictionary.setDictionaryName(dictionaryName);
+        cldsDictionary.save(cldsDictionary.getDictionaryName(), cldsDao, getUserId());
+        return cldsDictionary;
+    }
+
+    /**
+     * REST Service that creates or Updates a Dictionary.
+     * Used in clds-services.xml
+     *
+     * @param cldsDictionary clds dictionary
+     * @return ResponseEntity with CldsDictionary that was created in DB.
+     */
     public ResponseEntity<CldsDictionary> createOrUpdateDictionary(String dictionaryName,
-            CldsDictionary cldsDictionary) {
-        final Date startTime = new Date();
+                                                                   CldsDictionary cldsDictionary) {
+
+        Date startTime = new Date();
         LoggingUtils.setRequestContext("CldsDictionaryService: createOrUpdateDictionary", getPrincipalName());
         // TODO revisit based on new permissions
         isAuthorized(permissionUpdateTosca);
+
         if (cldsDictionary == null) {
-            cldsDictionary = new CldsDictionary();
-            cldsDictionary.setDictionaryName(dictionaryName);
+
+            cldsDictionary = createDictionary(dictionaryName);
+        } else {
+
+            if (cldsDictionary.getDictionaryName() == null) {
+                cldsDictionary.setDictionaryName(dictionaryName);
+            }
+
+            cldsDictionary.save(cldsDictionary.getDictionaryName(), cldsDao, getUserId());
         }
-        cldsDictionary.save(dictionaryName, cldsDao, getUserId());
-        auditLogInfo("createOrUpdateDictionary", startTime);
+
+        LoggingUtils.setTimeContext(startTime, new Date());
+        LoggingUtils.setResponseContext("0", "createOrUpdateDictionary success", this.getClass().getName());
+        auditLogger.info("createOrUpdateDictionary completed");
+
         return new ResponseEntity<>(cldsDictionary, HttpStatus.OK);
     }
 
     /**
      * REST Service that creates or Updates a Dictionary Elements for dictionary
      * in DB.
-     * 
+     *
      * @param dictionaryName dictionary name
      * @param dictionaryItem dictionary item
      * @return CldsDictionaryItem A dictionary items that was created or updated
      *         in DB
      */
     public ResponseEntity<CldsDictionaryItem> createOrUpdateDictionaryElements(String dictionaryName,
-            CldsDictionaryItem dictionaryItem) {
+                                                                               CldsDictionaryItem dictionaryItem) {
         final Date startTime = new Date();
-        LoggingUtils.setRequestContext("CldsDictionaryService: createOrUpdateDictionaryElements", getPrincipalName());
+        LoggingUtils.setRequestContext("CldsDictionaryService: createOrUpdateDictionaryElements",
+            getPrincipalName());
         // TODO revisit based on new permissions
         isAuthorized(permissionUpdateTosca);
         dictionaryItem.save(dictionaryName, cldsDao, getUserId());
@@ -110,7 +136,7 @@ public class CldsDictionaryService extends SecureServiceBase {
 
     /**
      * Rest Service that retrieves all CLDS dictionary in DB.
-     * 
+     *
      * @return CldsDictionary List List of CldsDictionary available in DB
      */
     public ResponseEntity<List<CldsDictionary>> getAllDictionaryNames() {
@@ -126,7 +152,7 @@ public class CldsDictionaryService extends SecureServiceBase {
     /**
      * Rest Service that retrieves all CLDS dictionary items in DB for a give
      * dictionary name.
-     * 
+     *
      * @param dictionaryName dictionary name
      * @return CldsDictionaryItem list List of CLDS Dictionary items for a given
      *         dictionary name
@@ -150,4 +176,4 @@ public class CldsDictionaryService extends SecureServiceBase {
         util = utilP;
     }
 
-}
+}
\ No newline at end of file
index 2393f24..37d597e 100644 (file)
 
 package org.onap.clamp.loop;
 
+import com.att.eelf.configuration.EELFLogger;
+import com.att.eelf.configuration.EELFManager;
 import com.google.gson.JsonObject;
+import com.google.gson.JsonSyntaxException;
 import com.google.gson.annotations.Expose;
 
+import java.io.IOException;
 import java.io.Serializable;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -59,6 +63,7 @@ import org.onap.clamp.loop.components.external.PolicyComponent;
 import org.onap.clamp.loop.log.LoopLog;
 import org.onap.clamp.policy.microservice.MicroServicePolicy;
 import org.onap.clamp.policy.operational.OperationalPolicy;
+import org.onap.clamp.policy.operational.OperationalPolicyRepresentationBuilder;
 
 @Entity
 @Table(name = "loops")
@@ -70,6 +75,9 @@ public class Loop implements Serializable {
      */
     private static final long serialVersionUID = -286522707701388642L;
 
+    @Transient
+    private static final EELFLogger logger = EELFManager.getInstance().getLogger(Loop.class);
+
     @Id
     @Expose
     @Column(nullable = false, name = "name", unique = true)
@@ -90,6 +98,11 @@ public class Loop implements Serializable {
     @Column(columnDefinition = "MEDIUMTEXT", name = "svg_representation")
     private String svgRepresentation;
 
+    @Expose
+    @Type(type = "json")
+    @Column(columnDefinition = "json", name = "operational_policy_schema")
+    private JsonObject operationalPolicySchema;
+
     @Expose
     @Type(type = "json")
     @Column(columnDefinition = "json", name = "global_properties_json")
@@ -131,6 +144,9 @@ public class Loop implements Serializable {
         this.addComponent(new DcaeComponent());
     }
 
+    /**
+     * Public constructor.
+     */
     public Loop() {
         initializeExternalComponents();
     }
@@ -256,6 +272,13 @@ public class Loop implements Serializable {
 
     void setModelPropertiesJson(JsonObject modelPropertiesJson) {
         this.modelPropertiesJson = modelPropertiesJson;
+        try {
+            this.operationalPolicySchema = OperationalPolicyRepresentationBuilder
+                    .generateOperationalPolicySchema(this.getModelPropertiesJson());
+        } catch (JsonSyntaxException | IOException | NullPointerException e) {
+            logger.error("Unable to generate the operational policy Schema ... ", e);
+            this.operationalPolicySchema = new JsonObject();
+        }
     }
 
     public Map<String, ExternalComponent> getComponents() {
@@ -273,20 +296,16 @@ public class Loop implements Serializable {
     /**
      * Generate the loop name.
      *
-     * @param serviceName
-     *        The service name
-     * @param serviceVersion
-     *        The service version
-     * @param resourceName
-     *        The resource name
-     * @param blueprintFileName
-     *        The blueprint file name
+     * @param serviceName       The service name
+     * @param serviceVersion    The service version
+     * @param resourceName      The resource name
+     * @param blueprintFileName The blueprint file name
      * @return The generated loop name
      */
     static String generateLoopName(String serviceName, String serviceVersion, String resourceName,
-        String blueprintFilename) {
+            String blueprintFilename) {
         StringBuilder buffer = new StringBuilder("LOOP_").append(serviceName).append("_v").append(serviceVersion)
-            .append("_").append(resourceName).append("_").append(blueprintFilename.replaceAll(".yaml", ""));
+                .append("_").append(resourceName).append("_").append(blueprintFilename.replaceAll(".yaml", ""));
         return buffer.toString().replace('.', '_').replaceAll(" ", "");
     }
 
index ad13ad3..41d34a2 100644 (file)
@@ -99,10 +99,10 @@ public class LoopCsarInstaller implements CsarInstaller {
         boolean alreadyInstalled = true;
         for (Entry<String, BlueprintArtifact> blueprint : csar.getMapOfBlueprints().entrySet()) {
             alreadyInstalled = alreadyInstalled
-                && loopRepository.existsById(Loop.generateLoopName(csar.getSdcNotification().getServiceName(),
-                    csar.getSdcNotification().getServiceVersion(),
-                    blueprint.getValue().getResourceAttached().getResourceInstanceName(),
-                    blueprint.getValue().getBlueprintArtifactName()));
+                    && loopRepository.existsById(Loop.generateLoopName(csar.getSdcNotification().getServiceName(),
+                            csar.getSdcNotification().getServiceVersion(),
+                            blueprint.getValue().getResourceAttached().getResourceInstanceName(),
+                            blueprint.getValue().getBlueprintArtifactName()));
         }
         return alreadyInstalled;
     }
@@ -110,7 +110,7 @@ public class LoopCsarInstaller implements CsarInstaller {
     @Override
     @Transactional(propagation = Propagation.REQUIRED)
     public void installTheCsar(CsarHandler csar)
-        throws SdcArtifactInstallerException, InterruptedException, PolicyModelException {
+            throws SdcArtifactInstallerException, InterruptedException, PolicyModelException {
         try {
             logger.info("Installing the CSAR " + csar.getFilePath());
             for (Entry<String, BlueprintArtifact> blueprint : csar.getMapOfBlueprints().entrySet()) {
@@ -126,53 +126,53 @@ public class LoopCsarInstaller implements CsarInstaller {
     }
 
     private Loop createLoopFromBlueprint(CsarHandler csar, BlueprintArtifact blueprintArtifact)
-        throws IOException, ParseException, InterruptedException {
+            throws IOException, ParseException, InterruptedException {
         Loop newLoop = new Loop();
         newLoop.setBlueprint(blueprintArtifact.getDcaeBlueprint());
         newLoop.setName(Loop.generateLoopName(csar.getSdcNotification().getServiceName(),
-            csar.getSdcNotification().getServiceVersion(),
-            blueprintArtifact.getResourceAttached().getResourceInstanceName(),
-            blueprintArtifact.getBlueprintArtifactName()));
+                csar.getSdcNotification().getServiceVersion(),
+                blueprintArtifact.getResourceAttached().getResourceInstanceName(),
+                blueprintArtifact.getBlueprintArtifactName()));
         newLoop.setLastComputedState(LoopState.DESIGN);
 
         List<MicroService> microServicesChain = chainGenerator
-            .getChainOfMicroServices(blueprintParser.getMicroServices(blueprintArtifact.getDcaeBlueprint()));
+                .getChainOfMicroServices(blueprintParser.getMicroServices(blueprintArtifact.getDcaeBlueprint()));
         if (microServicesChain.isEmpty()) {
             microServicesChain = blueprintParser.fallbackToOneMicroService(blueprintArtifact.getDcaeBlueprint());
         }
-
-        newLoop
-            .setMicroServicePolicies(createMicroServicePolicies(microServicesChain, csar, blueprintArtifact, newLoop));
+        newLoop.setModelPropertiesJson(createModelPropertiesJson(csar));
+        newLoop.setMicroServicePolicies(
+                createMicroServicePolicies(microServicesChain, csar, blueprintArtifact, newLoop));
         newLoop.setOperationalPolicies(createOperationalPolicies(csar, blueprintArtifact, newLoop));
 
         newLoop.setSvgRepresentation(svgFacade.getSvgImage(microServicesChain));
         newLoop.setGlobalPropertiesJson(createGlobalPropertiesJson(blueprintArtifact, newLoop));
-        newLoop.setModelPropertiesJson(createModelPropertiesJson(csar));
+
         DcaeInventoryResponse dcaeResponse = queryDcaeToGetServiceTypeId(blueprintArtifact);
         newLoop.setDcaeBlueprintId(dcaeResponse.getTypeId());
         return newLoop;
     }
 
     private HashSet<OperationalPolicy> createOperationalPolicies(CsarHandler csar, BlueprintArtifact blueprintArtifact,
-        Loop newLoop) {
+            Loop newLoop) {
         return new HashSet<>(Arrays.asList(new OperationalPolicy(Policy.generatePolicyName("OPERATIONAL",
-            csar.getSdcNotification().getServiceName(), csar.getSdcNotification().getServiceVersion(),
-            blueprintArtifact.getResourceAttached().getResourceInstanceName(),
-            blueprintArtifact.getBlueprintArtifactName()), newLoop, new JsonObject())));
+                csar.getSdcNotification().getServiceName(), csar.getSdcNotification().getServiceVersion(),
+                blueprintArtifact.getResourceAttached().getResourceInstanceName(),
+                blueprintArtifact.getBlueprintArtifactName()), newLoop, new JsonObject())));
     }
 
     private HashSet<MicroServicePolicy> createMicroServicePolicies(List<MicroService> microServicesChain,
-        CsarHandler csar, BlueprintArtifact blueprintArtifact, Loop newLoop) throws IOException {
+            CsarHandler csar, BlueprintArtifact blueprintArtifact, Loop newLoop) throws IOException {
         HashSet<MicroServicePolicy> newSet = new HashSet<>();
 
         for (MicroService microService : microServicesChain) {
             MicroServicePolicy microServicePolicy = new MicroServicePolicy(
-                Policy.generatePolicyName(microService.getName(), csar.getSdcNotification().getServiceName(),
-                    csar.getSdcNotification().getServiceVersion(),
-                    blueprintArtifact.getResourceAttached().getResourceInstanceName(),
-                    blueprintArtifact.getBlueprintArtifactName()),
-                microService.getModelType(), csar.getPolicyModelYaml().orElse(""), false,
-                new HashSet<>(Arrays.asList(newLoop)));
+                    Policy.generatePolicyName(microService.getName(), csar.getSdcNotification().getServiceName(),
+                            csar.getSdcNotification().getServiceVersion(),
+                            blueprintArtifact.getResourceAttached().getResourceInstanceName(),
+                            blueprintArtifact.getBlueprintArtifactName()),
+                    microService.getModelType(), csar.getPolicyModelYaml().orElse(""), false,
+                    new HashSet<>(Arrays.asList(newLoop)));
 
             newSet.add(microServicePolicy);
             microService.setMappedNameJpa(microServicePolicy.getName());
@@ -191,8 +191,8 @@ public class LoopCsarInstaller implements CsarInstaller {
         // Loop on all Groups defined in the service (VFModule entries type:
         // org.openecomp.groups.VfModule)
         for (IEntityDetails entity : csar.getSdcCsarHelper().getEntity(
-            EntityQuery.newBuilder(EntityTemplateType.GROUP).build(),
-            TopologyTemplateQuery.newBuilder(SdcTypes.SERVICE).build(), false)) {
+                EntityQuery.newBuilder(EntityTemplateType.GROUP).build(),
+                TopologyTemplateQuery.newBuilder(SdcTypes.SERVICE).build(), false)) {
             // Get all metadata info
             JsonObject allVfProps = (JsonObject) JsonUtils.GSON.toJsonTree(entity.getMetadata().getAllProperties());
             vfModuleProps.add(entity.getMetadata().getAllProperties().get("vfModuleModelName"), allVfProps);
@@ -200,7 +200,7 @@ public class LoopCsarInstaller implements CsarInstaller {
             // volume_group, etc ... fields under the VFmodule name
             for (Entry<String, Property> additionalProp : entity.getProperties().entrySet()) {
                 allVfProps.add(additionalProp.getValue().getName(),
-                    JsonUtils.GSON.toJsonTree(additionalProp.getValue().getValue()));
+                        JsonUtils.GSON.toJsonTree(additionalProp.getValue().getValue()));
             }
         }
         return vfModuleProps;
@@ -214,7 +214,7 @@ public class LoopCsarInstaller implements CsarInstaller {
             // For each type, get the metadata of each nodetemplate
             for (NodeTemplate nodeTemplate : csar.getSdcCsarHelper().getServiceNodeTemplateBySdcType(type)) {
                 resourcesPropByType.add(nodeTemplate.getName(),
-                    JsonUtils.GSON.toJsonTree(nodeTemplate.getMetaData().getAllProperties()));
+                        JsonUtils.GSON.toJsonTree(nodeTemplate.getMetaData().getAllProperties()));
             }
             resourcesProp.add(type.getValue(), resourcesPropByType);
         }
@@ -225,7 +225,7 @@ public class LoopCsarInstaller implements CsarInstaller {
         JsonObject modelProperties = new JsonObject();
         // Add service details
         modelProperties.add("serviceDetails", JsonUtils.GSON.fromJson(
-            JsonUtils.GSON.toJson(csar.getSdcCsarHelper().getServiceMetadataAllProperties()), JsonObject.class));
+                JsonUtils.GSON.toJson(csar.getSdcCsarHelper().getServiceMetadataAllProperties()), JsonObject.class));
         // Add properties details for each type, VfModule, VF, VFC, ....
         JsonObject resourcesProp = createServicePropertiesByType(csar);
         resourcesProp.add("VFModule", createVfModuleProperties(csar));
@@ -237,7 +237,7 @@ public class LoopCsarInstaller implements CsarInstaller {
         JsonObject node = new JsonObject();
         Yaml yaml = new Yaml();
         Map<String, Object> inputsNodes = ((Map<String, Object>) ((Map<String, Object>) yaml
-            .load(blueprintArtifact.getDcaeBlueprint())).get("inputs"));
+                .load(blueprintArtifact.getDcaeBlueprint())).get("inputs"));
         inputsNodes.entrySet().stream().filter(e -> !e.getKey().contains("policy_id")).forEach(elem -> {
             Object defaultValue = ((Map<String, Object>) elem.getValue()).get("default");
             if (defaultValue != null) {
@@ -258,10 +258,10 @@ public class LoopCsarInstaller implements CsarInstaller {
      * @return The DcaeInventoryResponse object containing the dcae values
      */
     private DcaeInventoryResponse queryDcaeToGetServiceTypeId(BlueprintArtifact blueprintArtifact)
-        throws IOException, ParseException, InterruptedException {
+            throws IOException, ParseException, InterruptedException {
         return dcaeInventoryService.getDcaeInformation(blueprintArtifact.getBlueprintArtifactName(),
-            blueprintArtifact.getBlueprintInvariantServiceUuid(),
-            blueprintArtifact.getResourceAttached().getResourceInvariantUUID());
+                blueprintArtifact.getBlueprintInvariantServiceUuid(),
+                blueprintArtifact.getResourceAttached().getResourceInvariantUUID());
     }
 
     private void addPropertyToNode(JsonObject node, String key, Object value) {
index a8aae20..2be707f 100644 (file)
@@ -28,9 +28,7 @@ import com.google.gson.annotations.Expose;
 import org.apache.camel.Exchange;
 
 /**
- *
- * SHould be abstract but Gson can't instantiate it if it's an abstract
- *
+ * Should be abstract but Gson can't instantiate it if it's an abstract.
  */
 public class ExternalComponent {
     @Expose
@@ -49,7 +47,7 @@ public class ExternalComponent {
     }
 
     public ExternalComponentState computeState(Exchange camelExchange) {
-        return new ExternalComponentState("INIT", "no desc");
+        return new ExternalComponentState("INIT", "no desc", 0);
     }
 
     public ExternalComponent(ExternalComponentState initialState) {
index 6a723c2..a220ee1 100644 (file)
@@ -29,18 +29,26 @@ import com.google.gson.annotations.Expose;
  * This is a transient state reflecting the deployment status of a component. It
  * can be Policy, DCAE, or whatever... This is object is generic. Clamp is now
  * stateless, so it triggers the different components at runtime, the status per
- * component is stored here.
+ * component is stored here. The state level is used to re-compute the global
+ * state when multiple sub states are required for that computation (generally
+ * provided sequentially to the method computeState from the camel routes.
  *
  */
-public class ExternalComponentState {
+public class ExternalComponentState implements Comparable<ExternalComponentState> {
     @Expose
     private String stateName;
     @Expose
     private String description;
+    private int stateLevel;
 
-    public ExternalComponentState(String stateName, String description) {
+    public ExternalComponentState(String stateName, String description, int level) {
         this.stateName = stateName;
         this.description = description;
+        this.stateLevel = level;
+    }
+
+    public ExternalComponentState(String stateName, String description) {
+        this(stateName, description, 0);
     }
 
     public ExternalComponentState() {
@@ -58,4 +66,50 @@ public class ExternalComponentState {
     public String toString() {
         return stateName;
     }
+
+    public int getLevel() {
+        return stateLevel;
+    }
+
+    public void setLevel(int priority) {
+        this.stateLevel = priority;
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((stateName == null) ? 0 : stateName.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        ExternalComponentState other = (ExternalComponentState) obj;
+        if (stateName == null) {
+            if (other.stateName != null)
+                return false;
+        } else if (!stateName.equals(other.stateName))
+            return false;
+        return true;
+    }
+
+    /**
+     * This method compares this object by using the level of them.
+     * 
+     * @param stateToCompare The state to compare to the current object
+     * @return If the one given in input has a higher level than the current object
+     *         it returns -1, 1 otherwise and 0 if equals.
+     */
+    @Override
+    public int compareTo(ExternalComponentState stateToCompare) {
+        return Integer.compare(this.getLevel(), stateToCompare.getLevel());
+    }
+
 }
index acd6115..68d598b 100644 (file)
@@ -44,17 +44,22 @@ public class PolicyComponent extends ExternalComponent {
     @Transient
     private static final EELFLogger logger = EELFManager.getInstance().getLogger(PolicyComponent.class);
 
+    public static final ExternalComponentState IN_ERROR = new ExternalComponentState("IN_ERROR",
+            "There was an error during the sending to policy, the policy engine may be corrupted or inconsistent", 100);
     public static final ExternalComponentState NOT_SENT = new ExternalComponentState("NOT_SENT",
-        "The policies defined have NOT yet been created on the policy engine");
+            "The policies defined have NOT yet been created on the policy engine", 90);
     public static final ExternalComponentState SENT = new ExternalComponentState("SENT",
-        "The policies defined have been created but NOT deployed on the policy engine");
+            "The policies defined have been created but NOT deployed on the policy engine", 50);
     public static final ExternalComponentState SENT_AND_DEPLOYED = new ExternalComponentState("SENT_AND_DEPLOYED",
-        "The policies defined have been created and deployed on the policy engine");
-    public static final ExternalComponentState IN_ERROR = new ExternalComponentState("IN_ERROR",
-        "There was an error during the sending to policy, the policy engine may be corrupted or inconsistent");
+            "The policies defined have been created and deployed on the policy engine", 10);
 
     public PolicyComponent() {
-        super(NOT_SENT);
+        /*
+         * We assume it's good by default as we will receive the state for each policy
+         * on by one, each time we increase the level we can't decrease it anymore.
+         * That's why it starts with the lowest one SENT_AND_DEPLOYED.
+         */
+        super(SENT_AND_DEPLOYED);
     }
 
     @Override
@@ -103,21 +108,38 @@ public class PolicyComponent extends ExternalComponent {
         return policyNamesList;
     }
 
+    private static ExternalComponentState findNewState(boolean found, boolean deployed) {
+
+        ExternalComponentState newState = NOT_SENT;
+        if (found && deployed) {
+            newState = SENT_AND_DEPLOYED;
+        } else if (found) {
+            newState = SENT;
+        } else if (deployed) {
+            newState = IN_ERROR;
+        }
+        return newState;
+    }
+
+    private static ExternalComponentState mergeStates(ExternalComponentState oldState,
+            ExternalComponentState newState) {
+        return (oldState.compareTo(newState) < 0) ? newState : oldState;
+    }
+
+    /**
+     * This is a method that expect the results of the queries getPolicy and
+     * getPolicyDeployed for a unique policy (op,guard, config, etc ...). It
+     * re-computes the global policy state for each policy results given. Therefore
+     * this method is called multiple times from the camel route and must be reset
+     * for a new global policy state retrieval. The state to compute the global
+     * policy state is stored in this class.
+     * 
+     */
     @Override
     public ExternalComponentState computeState(Exchange camelExchange) {
-        boolean oneNotFound = (boolean) camelExchange.getIn().getExchange().getProperty("atLeastOnePolicyNotFound");
-        boolean oneNotDeployed = (boolean) camelExchange.getIn().getExchange()
-            .getProperty("atLeastOnePolicyNotDeployed");
-
-        if (oneNotFound && oneNotDeployed) {
-            this.setState(NOT_SENT);
-        } else if (!oneNotFound && oneNotDeployed) {
-            this.setState(SENT);
-        } else if (!oneNotFound && !oneNotDeployed) {
-            this.setState(SENT_AND_DEPLOYED);
-        } else {
-            this.setState(IN_ERROR);
-        }
+        this.setState(mergeStates(this.getState(),
+                findNewState((boolean) camelExchange.getIn().getExchange().getProperty("policyFound"),
+                        (boolean) camelExchange.getIn().getExchange().getProperty("policyDeployed"))));
         return this.getState();
     }
 }
index 33148f0..dd156d8 100644 (file)
@@ -25,6 +25,7 @@ package org.onap.clamp.policy.operational;
 
 import com.google.gson.GsonBuilder;
 import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -33,16 +34,15 @@ import java.util.Map.Entry;
 import java.util.TreeMap;
 
 import org.apache.commons.lang3.math.NumberUtils;
+import org.onap.clamp.loop.Loop;
 import org.yaml.snakeyaml.DumperOptions;
 import org.yaml.snakeyaml.DumperOptions.ScalarStyle;
 import org.yaml.snakeyaml.Yaml;
 
 /**
- *
  * This class contains the code required to support the sending of Legacy
  * operational payload to policy engine. This will probably disappear in El
  * Alto.
- *
  */
 public class LegacyOperationalPolicy {
 
@@ -76,6 +76,13 @@ public class LegacyOperationalPolicy {
         return jsonElement;
     }
 
+    /**
+     * This method rework the payload attribute (yaml) that is normally wrapped in a
+     * string when coming from the UI.
+     * 
+     * @param policyJson The operational policy json config
+     * @return The same object reference but modified
+     */
     public static JsonElement reworkPayloadAttributes(JsonElement policyJson) {
         for (JsonElement policy : policyJson.getAsJsonObject().get("policies").getAsJsonArray()) {
             JsonElement payloadElem = policy.getAsJsonObject().get("payload");
@@ -135,9 +142,15 @@ public class LegacyOperationalPolicy {
         return mapResult;
     }
 
+    /**
+     * This method transforms the configuration json to a Yaml format.
+     * 
+     * @param operationalPolicyJsonElement The operational policy json config
+     * @return The Yaml as string
+     */
     public static String createPolicyPayloadYamlLegacy(JsonElement operationalPolicyJsonElement) {
         JsonElement opPolicy = fulfillPoliciesTreeField(
-            removeAllQuotes(reworkPayloadAttributes(operationalPolicyJsonElement.getAsJsonObject().deepCopy())));
+                removeAllQuotes(reworkPayloadAttributes(operationalPolicyJsonElement.getAsJsonObject().deepCopy())));
         Map<?, ?> jsonMap = createMap(opPolicy);
         DumperOptions options = new DumperOptions();
         options.setDefaultScalarStyle(ScalarStyle.PLAIN);
@@ -147,4 +160,22 @@ public class LegacyOperationalPolicy {
         options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
         return (new Yaml(options)).dump(jsonMap);
     }
+
+    /**
+     * This method load mandatory field in the operational policy configuration
+     * JSON.
+     * 
+     * @param configurationsJson The operational policy JSON
+     * @param loop               The parent loop object
+     */
+    public static void preloadConfiguration(JsonObject configurationsJson, Loop loop) {
+        if (configurationsJson.entrySet().isEmpty()) {
+            JsonObject controlLoopName = new JsonObject();
+            controlLoopName.addProperty("controlLoopName",
+                    loop != null ? loop.getName() : "Empty (NO loop loaded yet)");
+            JsonObject controlLoop = new JsonObject();
+            controlLoop.add("controlLoop", controlLoopName);
+            configurationsJson.add("operational_policy", controlLoop);
+        }
+    }
 }
index 62c5a1e..86f8ac3 100644 (file)
@@ -38,7 +38,6 @@ import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Map.Entry;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
@@ -91,17 +90,16 @@ public class OperationalPolicy implements Serializable, Policy {
     /**
      * The constructor.
      *
-     * @param name
-     *        The name of the operational policy
-     * @param loop
-     *        The loop that uses this operational policy
-     * @param configurationsJson
-     *        The operational policy property in the format of json
+     * @param name               The name of the operational policy
+     * @param loop               The loop that uses this operational policy
+     * @param configurationsJson The operational policy property in the format of
+     *                           json
      */
     public OperationalPolicy(String name, Loop loop, JsonObject configurationsJson) {
         this.name = name;
         this.loop = loop;
         this.configurationsJson = configurationsJson;
+        LegacyOperationalPolicy.preloadConfiguration(this.configurationsJson, loop);
     }
 
     @Override
@@ -117,11 +115,6 @@ public class OperationalPolicy implements Serializable, Policy {
         return loop;
     }
 
-    @Override
-    public JsonObject getJsonRepresentation() {
-        return configurationsJson;
-    }
-
     public JsonObject getConfigurationsJson() {
         return configurationsJson;
     }
@@ -130,6 +123,11 @@ public class OperationalPolicy implements Serializable, Policy {
         this.configurationsJson = configurationsJson;
     }
 
+    @Override
+    public JsonObject getJsonRepresentation() {
+        return null;
+    }
+
     @Override
     public int hashCode() {
         final int prime = 31;
@@ -184,7 +182,7 @@ public class OperationalPolicy implements Serializable, Policy {
         metadata.addProperty("policy-id", this.name);
 
         operationalPolicyDetails.add("properties", LegacyOperationalPolicy
-            .reworkPayloadAttributes(this.configurationsJson.get("operational_policy").deepCopy()));
+                .reworkPayloadAttributes(this.configurationsJson.get("operational_policy").deepCopy()));
 
         Gson gson = new GsonBuilder().create();
 
@@ -204,9 +202,8 @@ public class OperationalPolicy implements Serializable, Policy {
         // Now using the legacy payload fo Dublin
         JsonObject payload = new JsonObject();
         payload.addProperty("policy-id", this.getName());
-        payload.addProperty("content", URLEncoder.encode(
-            LegacyOperationalPolicy.createPolicyPayloadYamlLegacy(this.configurationsJson.get("operational_policy")),
-            StandardCharsets.UTF_8.toString()));
+        payload.addProperty("content", URLEncoder.encode(LegacyOperationalPolicy.createPolicyPayloadYamlLegacy(
+                this.configurationsJson.get("operational_policy")), StandardCharsets.UTF_8.toString()));
         String opPayload = new GsonBuilder().setPrettyPrinting().create().toJson(payload);
         logger.info("Operational policy payload: " + opPayload);
         return opPayload;
@@ -222,11 +219,9 @@ public class OperationalPolicy implements Serializable, Policy {
 
         JsonElement guardsList = this.getConfigurationsJson().get("guard_policies");
         if (guardsList != null) {
-            for (Entry<String, JsonElement> guardElem : guardsList.getAsJsonObject().entrySet()) {
-                JsonObject guard = new JsonObject();
-                guard.addProperty("policy-id", guardElem.getKey());
-                guard.add("content", guardElem.getValue());
-                result.put(guardElem.getKey(), new GsonBuilder().create().toJson(guard));
+            for (JsonElement guardElem : guardsList.getAsJsonArray()) {
+                result.put(guardElem.getAsJsonObject().get("policy-id").getAsString(),
+                        new GsonBuilder().create().toJson(guardElem));
             }
         }
         logger.info("Guard policy payload: " + result);
diff --git a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilder.java
new file mode 100644 (file)
index 0000000..f6f3f49
--- /dev/null
@@ -0,0 +1,146 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights
+ *                             reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.policy.operational;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonSyntaxException;
+
+import java.io.IOException;
+import java.util.Map.Entry;
+
+import org.onap.clamp.clds.util.JsonUtils;
+import org.onap.clamp.clds.util.ResourceFileUtil;
+
+public class OperationalPolicyRepresentationBuilder {
+
+    /**
+     * This method generates the operational policy json representation that will be
+     * used by ui for rendering. It uses the model (VF and VFModule) defined in the
+     * loop object to do so, so it's dynamic. It also uses the operational policy
+     * schema template defined in the resource folder.
+     * 
+     * @param modelJson The loop model json
+     * @return The json representation
+     * @throws JsonSyntaxException If the schema template cannot be parsed
+     * @throws IOException         In case of issue when opening the schema template
+     */
+    public static JsonObject generateOperationalPolicySchema(JsonObject modelJson)
+            throws JsonSyntaxException, IOException {
+        JsonObject jsonSchema = JsonUtils.GSON.fromJson(
+                ResourceFileUtil.getResourceAsString("clds/json-schema/operational_policies/operational_policy.json"),
+                JsonObject.class);
+        jsonSchema.get("schema").getAsJsonObject().get("items").getAsJsonObject().get("properties").getAsJsonObject()
+                .get("configurationsJson").getAsJsonObject().get("properties").getAsJsonObject()
+                .get("operational_policy").getAsJsonObject().get("properties").getAsJsonObject().get("policies")
+                .getAsJsonObject().get("items").getAsJsonObject().get("properties").getAsJsonObject().get("target")
+                .getAsJsonObject().get("anyOf").getAsJsonArray().addAll(createAnyOfArray(modelJson));
+        return jsonSchema;
+    }
+
+    private static JsonObject createSchemaProperty(String title, String type, String defaultValue, String readOnlyFlag,
+            String[] enumArray) {
+        JsonObject property = new JsonObject();
+        property.addProperty("title", title);
+        property.addProperty("type", type);
+        property.addProperty("default", defaultValue);
+        property.addProperty("readOnly", readOnlyFlag);
+
+        if (enumArray != null) {
+            JsonArray jsonArray = new JsonArray();
+            property.add("enum", jsonArray);
+            for (String val : enumArray) {
+                jsonArray.add(val);
+            }
+        }
+        return property;
+    }
+
+    private static JsonArray createVnfSchema(JsonObject modelJson) {
+        JsonArray vnfSchemaArray = new JsonArray();
+        JsonObject modelVnfs = modelJson.get("resourceDetails").getAsJsonObject().get("VF").getAsJsonObject();
+
+        for (Entry<String, JsonElement> entry : modelVnfs.entrySet()) {
+            JsonObject vnfOneOfSchema = new JsonObject();
+            vnfOneOfSchema.addProperty("title", "VNF" + "-" + entry.getKey());
+            JsonObject properties = new JsonObject();
+            properties.add("type", createSchemaProperty("Type", "string", "VNF", "True", null));
+            properties.add("resourceID", createSchemaProperty("Resource ID", "string",
+                    modelVnfs.get(entry.getKey()).getAsJsonObject().get("name").getAsString(), "True", null));
+
+            vnfOneOfSchema.add("properties", properties);
+            vnfSchemaArray.add(vnfOneOfSchema);
+        }
+        return vnfSchemaArray;
+    }
+
+    private static JsonArray createVfModuleSchema(JsonObject modelJson) {
+        JsonArray vfModuleOneOfSchemaArray = new JsonArray();
+        JsonObject modelVfModules = modelJson.get("resourceDetails").getAsJsonObject().get("VFModule")
+                .getAsJsonObject();
+
+        for (Entry<String, JsonElement> entry : modelVfModules.entrySet()) {
+            JsonObject vfModuleOneOfSchema = new JsonObject();
+            vfModuleOneOfSchema.addProperty("title", "VFMODULE" + "-" + entry.getKey());
+            JsonObject properties = new JsonObject();
+            properties.add("type", createSchemaProperty("Type", "string", "VFMODULE", "True", null));
+            properties.add("resourceID",
+                    createSchemaProperty("Resource ID", "string",
+                            modelVfModules.get(entry.getKey()).getAsJsonObject().get("vfModuleModelName").getAsString(),
+                            "True", null));
+            properties.add("modelInvariantId",
+                    createSchemaProperty("Model Invariant Id (ModelInvariantUUID)", "string", modelVfModules
+                            .get(entry.getKey()).getAsJsonObject().get("vfModuleModelInvariantUUID").getAsString(),
+                            "True", null));
+            properties.add("modelVersionId",
+                    createSchemaProperty("Model Version Id (ModelUUID)", "string",
+                            modelVfModules.get(entry.getKey()).getAsJsonObject().get("vfModuleModelUUID").getAsString(),
+                            "True", null));
+            properties.add("modelName",
+                    createSchemaProperty("Model Name", "string",
+                            modelVfModules.get(entry.getKey()).getAsJsonObject().get("vfModuleModelName").getAsString(),
+                            "True", null));
+            properties.add("modelVersion", createSchemaProperty("Model Version", "string",
+                    modelVfModules.get(entry.getKey()).getAsJsonObject().get("vfModuleModelVersion").getAsString(),
+                    "True", null));
+            properties
+                    .add("modelCustomizationId",
+                            createSchemaProperty("Customization ID", "string", modelVfModules.get(entry.getKey())
+                                    .getAsJsonObject().get("vfModuleModelCustomizationUUID").getAsString(), "True",
+                                    null));
+
+            vfModuleOneOfSchema.add("properties", properties);
+            vfModuleOneOfSchemaArray.add(vfModuleOneOfSchema);
+        }
+        return vfModuleOneOfSchemaArray;
+    }
+
+    private static JsonArray createAnyOfArray(JsonObject modelJson) {
+        JsonArray targetOneOfStructure = new JsonArray();
+        targetOneOfStructure.addAll(createVnfSchema(modelJson));
+        targetOneOfStructure.addAll(createVfModuleSchema(modelJson));
+        return targetOneOfStructure;
+    }
+}
index 4809ffa..8257d87 100644 (file)
@@ -4509,7 +4509,7 @@ body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-b
 </div>
 <div id="footer">
 <div id="footer-text">
-Last updated 2018-07-06 11:58:45 CEST
+Last updated 2019-08-12 03:34:46 PDT
 </div>
 </div>
 </body>
index 52f79be..cec0257 100644 (file)
@@ -2,7 +2,7 @@
 # ============LICENSE_START=======================================================
 # ONAP CLAMP
 # ================================================================================
-# Copyright (C) 2017-2018 AT&T Intellectual Property. All rights
+# Copyright (C) 2017-2019 AT&T Intellectual Property. All rights
 #                             reserved.
 # ================================================================================
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -51,7 +51,21 @@ info.build.version=@project.version@
 ### server.ssl.key-store=file:/tmp/mykey.jks
 ### server.ssl.key-store-password=mypass
 ### server.ssl.key-password=mypass
-server.port=8080
+server.port=8443
+## Config part for Server certificates
+# Can be a classpath parameter instead of file:/
+server.ssl.key-store=classpath:/clds/aaf/org.onap.clamp.p12
+server.ssl.key-store-password=China in the Spring
+server.ssl.key-password=China in the Spring
+server.ssl.key-store-type=PKCS12
+server.ssl.key-alias=clamp@clamp.onap.org
+
+## Config part for Client certificates
+server.ssl.client-auth=want
+server.ssl.trust-store=classpath:/clds/aaf/truststoreONAPall.jks
+server.ssl.trust-store-password=changeit
+
+#server.http-to-https-redirection.port=8080
 
 server.servlet.context-path=/
 #Modified engine-rest applicationpath
@@ -141,6 +155,7 @@ clamp.config.policy.api.password=zb!XztG34
 clamp.config.policy.pap.url=http4://policy.api.simpledemo.onap.org:6969
 clamp.config.policy.pap.userName=healthcheck
 clamp.config.policy.pap.password=zb!XztG34
+
 clamp.config.policy.pdpUrl1=http://policy.api.simpledemo.onap.org:8081/pdp/ , testpdp, alpha123
 clamp.config.policy.pdpUrl2=http://policy.api.simpledemo.onap.org:8081/pdp/ , testpdp, alpha123
 clamp.config.policy.papUrl=http://policy.api.simpledemo.onap.org:8081/pap/ , testpap, alpha123
index 534dc48..dcad32e 100644 (file)
@@ -255,5 +255,5 @@ clamp.config.cadi.cadiTruststorePassword=enc:Mj0YQqNCUKbKq2lPp1kTFQWeqLxaBXKNwd5
 #clamp.config.cadi.oauthTokenUrl=https://AAF_LOCATE_URL/AAF_NS.token:2.0/token
 #clamp.config.cadi.oauthIntrospectUrll=https://AAF_LOCATE_URL/AAF_NS.introspect:2.0/introspect
 clamp.config.cadi.aafEnv=DEV
-clamp.config.cadi.aafUrl=https://AAF_LOCATE_URL/AAF_NS.service:2.0
+clamp.config.cadi.aafUrl=https://AAF_LOCATE_URL/onap.org.osaaf.aaf.service:2.1
 clamp.config.cadi.cadiX509Issuers=CN=intermediateCA_9, OU=OSAAF, O=ONAP, C=US:CN=intermediateCA_1, OU=OSAAF, O=ONAP, C=US
diff --git a/src/main/resources/clds/aaf/ssl/clamp.key b/src/main/resources/clds/aaf/ssl/clamp.key
new file mode 100644 (file)
index 0000000..fcf68bf
--- /dev/null
@@ -0,0 +1,32 @@
+Bag Attributes
+    friendlyName: clamp@clamp.onap.org
+    localKeyID: 54 69 6D 65 20 31 35 35 33 37 38 37 35 31 38 33 30 33 
+Key Attributes: <No Attributes>
+-----BEGIN PRIVATE KEY-----
+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC4nLg3HAYzgJTr
+C9WdZypwz0UzcQcCFXwEUUA8StwtMwx0OahJiEJRdFY6fmydq4MzFgZ6HQt/M7dY
+0l8phLHpGTVdrFMgW8yZer8bwNcSSiPVRy8j0s8lBHdR+KofG+yA19xg6lCYDX78
+yfeA2jZ52FhVWavyGHS4whWlw8T1EGbZZqXZCFgc7zHjUXuG1mo2ropppJkouf9g
+WEH2Vx16YiosgZzftRW1N3KJ7JozcEtS/j4w/pNyS7HOQDWWGTDk6Us4bt8Zg4gd
+1FeID0FmnEEGRKP+XscsGNwMd06MBsCAOutHkpFtS+UT3cr8xIKewL7uPq24X3ke
+W148togFAgMBAAECggEATncV+R5pKFS7dteV2IvzxvTh1cZxkxoslu0t3zJ2OKPc
+5D1pYK+QeGx5Be2cHru6TOlMoXRc4ZjKke8AUXY74/Y573GB91vtL0KznYkuIHDw
+oALcb153eqVWTbniHMzSjcSxv2N4E9iQo8L39oVI6CrjCIvPgFuSqMCdUNJPkVTI
+4nsarTfLK4fzi7IbWzi9JdE1QRNIxcCMcYJRnLZMdneMLBleR0UL82Xc2KOy5SEt
+zyKYCQ8zS247FKolnOrDkhKxXI5fzdDpRK5AQSsAykUPWlYq7pzKjY/dU9rMRohx
+YSltFjPZ3sQ3UKqqIqhZS+GoVuZoc925WyhViPsqtQKBgQDsL4LFfPWN8nnsusQp
+VR3T7HvvwXuEVAydlaJMwZU0cRYN+L7RHHjDoXZZrNJDIDzNoWnBLKRGx3mtLmgJ
+9Pa6SxN6Oc8oo6jzv2D59g1PVjNOMOYTCTb/2Xum4LMLaeeF57HkWxzeA3Ws47++
+gXwzQpbE90tp1Ys4uXD3JoivvwKBgQDIGZTwLGhLSegdAjG83WEgmdtzT1kjvx0Q
+A8IR2jkgkTJHdKiuslJ8Z3/XufHEwWMWwfs1XLwxYluoo1y9eNvNeHZXjLqjL62c
+I3034F9IvvTUqFcxam2WdoklXbAiSvLUo/9exPgOuVxok6Zv1imRgGb/vYV9vyG7
+86MRuQu5OwKBgQC9E3fcA6JMpY3H3uhEsngzfMDm+fyYvfRvfyezzNFWbyWZv8V6
+gBGJg0vMlFarGDa044BW/hbw9qXI5zqwpeOS1aFdGsRlo0cRAuduk/Spy7c85FZ7
+bMgT4BZmTMHo5DpNb2NxDSO59AkThCuvJde47ZjnS5WavzI6EfKGWNnZ3wKBgQCF
+QiwjCp/mS/DtqLFxAsmVSYGROG231aXILYiIFRloa+ndFn7j4NP4D4FfLHErRFL2
+K/ddIUYfaU57b1fqwts26ht90LXWyYDH9AaHOMCcFLe+C+INgcA7rPNG1C7hl6JC
+JHmEJo7AV4eICZSU9D44rRdrB08oYCpaHjYiLmb1UwKBgQCWCDJ4p2DrNL9hzj3K
+kzvM5saXrfI4aVBXVt9rw9s1d/WG8JOpnmHcnLPb6Tj59rDktrLCLv0sVstMwNVJ
+sOO+qsgn1VoZalcVhhjdONm5YvhJQgz0F7Y2xkr6g/AuMPz2YigGfm7fe/z7rc+L
+q9Ua2HmUS8DDBy7W89MNZJNkDQ==
+-----END PRIVATE KEY-----
diff --git a/src/main/resources/clds/aaf/ssl/clamp.pem b/src/main/resources/clds/aaf/ssl/clamp.pem
new file mode 100644 (file)
index 0000000..ccb0097
--- /dev/null
@@ -0,0 +1,64 @@
+Bag Attributes
+    friendlyName: clamp@clamp.onap.org
+    localKeyID: 54 69 6D 65 20 31 35 35 33 37 38 37 35 31 38 33 30 33 
+subject=CN = clamp, emailAddress = , OU = clamp@clamp.onap.org, OU = OSAAF, O = ONAP, C = US
+
+issuer=C = US, O = ONAP, OU = OSAAF, CN = intermediateCA_9
+
+-----BEGIN CERTIFICATE-----
+MIIEKDCCAxCgAwIBAgIIWY+5kgf/UG4wDQYJKoZIhvcNAQELBQAwRzELMAkGA1UE
+BhMCVVMxDTALBgNVBAoMBE9OQVAxDjAMBgNVBAsMBU9TQUFGMRkwFwYDVQQDDBBp
+bnRlcm1lZGlhdGVDQV85MB4XDTE5MDMyMTE2MTY1OFoXDTIwMDMyMTE2MTY1OFow
+bDEOMAwGA1UEAwwFY2xhbXAxDzANBgkqhkiG9w0BCQEWADEdMBsGA1UECwwUY2xh
+bXBAY2xhbXAub25hcC5vcmcxDjAMBgNVBAsMBU9TQUFGMQ0wCwYDVQQKDARPTkFQ
+MQswCQYDVQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALic
+uDccBjOAlOsL1Z1nKnDPRTNxBwIVfARRQDxK3C0zDHQ5qEmIQlF0Vjp+bJ2rgzMW
+BnodC38zt1jSXymEsekZNV2sUyBbzJl6vxvA1xJKI9VHLyPSzyUEd1H4qh8b7IDX
+3GDqUJgNfvzJ94DaNnnYWFVZq/IYdLjCFaXDxPUQZtlmpdkIWBzvMeNRe4bWajau
+immkmSi5/2BYQfZXHXpiKiyBnN+1FbU3consmjNwS1L+PjD+k3JLsc5ANZYZMOTp
+Szhu3xmDiB3UV4gPQWacQQZEo/5exywY3Ax3TowGwIA660eSkW1L5RPdyvzEgp7A
+vu4+rbhfeR5bXjy2iAUCAwEAAaOB8jCB7zAJBgNVHRMEAjAAMA4GA1UdDwEB/wQE
+AwIF4DAgBgNVHSUBAf8EFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwVAYDVR0jBE0w
+S4AUgfeZWxC5yIze81Je6k5poEM+rN2hMKQuMCwxDjAMBgNVBAsMBU9TQUFGMQ0w
+CwYDVQQKDARPTkFQMQswCQYDVQQGEwJVU4IBBzAdBgNVHQ4EFgQU+GZ6wmWDPrmq
+Wd1/NtMYiCQ8Dg4wOwYDVR0RBDQwMoIFY2xhbXCCHWNsYW1wLmFwaS5zaW1wbGVk
+ZW1vLm9uYXAub3JnggpjbGFtcC5vbmFwMA0GCSqGSIb3DQEBCwUAA4IBAQCFZdhB
+U6xm6l0vj4q89onLx4opTPvwGNRc0n402lifkPYXseFtphZSHIf2Sg0mFTH4KHb4
+FdMyBzq1+f5WLU+xRC1nT4eGJ0FvRR6204/fGVrzJTS67phnRnxr2WZzLPW0wPJe
+K8SzN6tkUgE7/a/s0T/htE/blDxWh75+tA2jQlgj1Ri0y9A1J8wx++REKjGlHjFN
+53aiipsB+wC/oEMzYL4qEPiYPI0Lr3Lsay1F7f6cvDT4+EYzBLMFuwCvpcnHgSMS
+4fFj2ROmUG2+CC23B88Q0WNxjLPq/CrmHZZBsqwruPJ0cSuCQxfshTQ6uZhcjtu8
+6TRYkIcL0x9r/AHP
+-----END CERTIFICATE-----
+Bag Attributes
+    friendlyName: CN=intermediateCA_9,OU=OSAAF,O=ONAP,C=US
+subject=C = US, O = ONAP, OU = OSAAF, CN = intermediateCA_9
+
+issuer=OU = OSAAF, O = ONAP, C = US
+
+-----BEGIN CERTIFICATE-----
+MIIEdTCCAl2gAwIBAgIBBzANBgkqhkiG9w0BAQsFADAsMQ4wDAYDVQQLDAVPU0FB
+RjENMAsGA1UECgwET05BUDELMAkGA1UEBhMCVVMwHhcNMTgwODE3MTg1MTM3WhcN
+MjMwODE3MTg1MTM3WjBHMQswCQYDVQQGEwJVUzENMAsGA1UECgwET05BUDEOMAwG
+A1UECwwFT1NBQUYxGTAXBgNVBAMMEGludGVybWVkaWF0ZUNBXzkwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCv0HHUkba3uNtNI3jPKimUcd6RNwmhSCJL
+neMWpnjqp5/A+HCKyNsEaT4y177hNLmCm/aMm1u2JIfikc+8wEqLCSBBPz+P0h+d
+o+sZ7U+4oeQizdYYpEdzHJ2SieHHa8vtu80rU3nO2NEIkuYC20HcKSEtl8fFKsk3
+nqlhY+tGfYJPTXcDOQAO40BTcgat3C3uIJHkWJJ4RivunE4LEuRv9QyKgAw7rkJV
+v+f7guqpZlXy6dzAkuU7XULWcgo55MkZlssoiErMvEZJad5aWKvRY3g7qUjaQ6wO
+15wOAUoRBW96eeZZbytgn8kybcBy++Ue49gPtgm1MF/KlAsp0MD5AgMBAAGjgYYw
+gYMwHQYDVR0OBBYEFIH3mVsQuciM3vNSXupOaaBDPqzdMB8GA1UdIwQYMBaAFFNV
+M/JL69BRscF4msEoMXvv6u1JMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/
+BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0B
+AQsFAAOCAgEADxNymiCNr2e37iLReoaxKmZvwox0cTiNAaj7iafRzmwIoY3VXO8Q
+ix5IYcp4FaQ7fV1jyp/AmaSnyHf6Osl0sx8PxsQkO7ALttxKUrjfbvNSVUA2C/vl
+u5m7UVJLIUtFDZBWanzUSmkTsYLHpiANFQKd2c/cU1qXcyzgJVFEFVyyHNkF7Is+
++pjG9M1hwQHOoTnEuU013P7X1mHek+RXEfhJWwe7UsZnBKZaZKbQZu7hEtqKWYp/
+QsHgnjoLYXsh0WD5rz/mBxdTdDLGpFqWDzDqb8rsYnqBzoowvsasV8X8OSkov0Ht
+8Yka0ckFH9yf8j1Cwmbl6ttuonOhky3N/gwLEozuhy7TPcZGVyzevF70kXy7g1CX
+kpFGJyEHXoprlNi8FR4I+NFzbDe6a2cFow1JN19AJ9Z5Rk5m7M0mQPaQ4RcikjB3
+aoLsASCJTm1OpOFHfxEKiBW4Lsp3Uc5/Rb9ZNbfLrwqWZRM7buW1e3ekLqntgbky
+uKKISHqVJuw/vXHl1jNibEo9+JuQ88VNuAcm7WpGUogeCa2iAlPTckPZei+MwZ8w
+tpvxTyYlZEC8DWzY1VC29+W2N5cvh01e2E3Ql08W1zL63dqrgdEZ3VWjzooYi4ep
+BmMXTvouW+Flyvcw/0oTcfN0biDIt0mCkZ5CQVjfGL9DTOYteR5hw+k=
+-----END CERTIFICATE-----
index 395077a..4693581 100644 (file)
@@ -2,19 +2,16 @@
        <route id="deploy-loop">
                <from uri="direct:deploy-loop" />
                <doTry>
-                       <log
-                               loggingLevel="INFO"
+                       <log loggingLevel="INFO"
                                message="Deploying the loop: ${exchangeProperty[loopObject].getName()}" />
                        <to
                                uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Deploying the loop')" />
                        <setBody>
-                               <method
-                                       ref="org.onap.clamp.loop.components.external.DcaeComponent"
+                               <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
                                        method="getDeployPayload(${exchangeProperty[loopObject]})" />
                        </setBody>
                        <setProperty propertyName="dcaeDeploymentId">
-                               <method
-                                       ref="org.onap.clamp.loop.components.external.DcaeComponent"
+                               <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
                                        method="generateDeploymentId()" />
                        </setProperty>
                        <setHeader headerName="CamelHttpMethod">
                                <simple>${exchangeProperty[X-ONAP-PartnerName]}
                                </simple>
                        </setHeader>
-                       <log
-                               loggingLevel="INFO"
+                       <log loggingLevel="INFO"
                                message="Endpoint to deploy loop: {{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[dcaeDeploymentId]}"></log>
                        <toD
                                uri="{{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[dcaeDeploymentId]}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=300000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
                        <convertBodyTo type="java.lang.String" />
                        <setProperty propertyName="dcaeResponse">
-                               <method
-                                       ref="org.onap.clamp.loop.components.external.DcaeComponent"
+                               <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
                                        method="convertDcaeResponse(${body})" />
                        </setProperty>
                        <setProperty propertyName="dcaeStatusUrl">
-                               <method
-                                       ref="org.onap.clamp.loop.components.external.DcaeComponent"
+                               <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
                                        method="getStatusUrl(${exchangeProperty[dcaeResponse]})" />
                        </setProperty>
                        <to
@@ -63,6 +57,9 @@
                                                StatusUrl:${exchangeProperty[dcaeStatusUrl]})
                                        </simple>
                                </setProperty>
+                               <setProperty propertyName="logComponent">
+                                       <simple>DCAE</simple>
+                               </setProperty>
                                <to uri="direct:dump-loop-log-http-response" />
                        </doFinally>
                </doTry>
@@ -70,8 +67,7 @@
 
        <route id="undeploy-loop">
                <from uri="direct:undeploy-loop" />
-               <log
-                       loggingLevel="INFO"
+               <log loggingLevel="INFO"
                        message="Undeploying the loop: ${exchangeProperty[loopObject].getName()} : ${exchangeProperty[loopObject].getDcaeDeploymentId()}" />
                <to
                        uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Undeploying the loop')" />
@@ -82,8 +78,7 @@
                                </simple>
                                <doTry>
                                        <setBody>
-                                               <method
-                                                       ref="org.onap.clamp.loop.components.external.DcaeComponent"
+                                               <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
                                                        method="getUndeployPayload(${exchangeProperty[loopObject]})" />
                                        </setBody>
                                        <setHeader headerName="CamelHttpMethod">
                                                <simple>${exchangeProperty[X-ONAP-PartnerName]}
                                                </simple>
                                        </setHeader>
-                                       <log
-                                               loggingLevel="INFO"
+                                       <log loggingLevel="INFO"
                                                message="Endpoint to undeploy loop: {{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[loopObject].getDcaeDeploymentId()}"></log>
                                        <toD
                                                uri="{{clamp.config.dcae.deployment.url}}/dcae-deployments/${exchangeProperty[loopObject].getDcaeDeploymentId()}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=300000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
                                        <convertBodyTo type="java.lang.String" />
                                        <setProperty propertyName="dcaeResponse">
-                                               <method
-                                                       ref="org.onap.clamp.loop.components.external.DcaeComponent"
+                                               <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
                                                        method="convertDcaeResponse(${body})" />
                                        </setProperty>
                                        <setProperty propertyName="dcaeStatusUrl">
-                                               <method
-                                                       ref="org.onap.clamp.loop.components.external.DcaeComponent"
+                                               <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
                                                        method="getStatusUrl(${exchangeProperty[dcaeResponse]})" />
                                        </setProperty>
                                        <to
                                                <setProperty propertyName="logMessage">
                                                        <simple>UNDEPLOY loop status</simple>
                                                </setProperty>
+                                               <setProperty propertyName="logComponent">
+                                                       <simple>DCAE</simple>
+                                               </setProperty>
                                                <to uri="direct:dump-loop-log-http-response" />
                                        </doFinally>
                                </doTry>
                        </when>
                        <otherwise>
-                               <log
-                                       loggingLevel="WARNING"
+                               <log loggingLevel="WARNING"
                                        message="Cannot Undeploy for the loop: ${exchangeProperty[loopObject].getName()}, the Deployment ID does not exist !" />
                                <to
                                        uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('Cannot Undeploy for the loop: ${exchangeProperty[loopObject].getName()}, the Deployment ID does not exist !','WARNING',${exchangeProperty[loopObject]})" />
        </route>
        <route id="get-dcae-deployment-status">
                <from uri="direct:get-dcae-deployment-status" />
-               <log
-                       loggingLevel="INFO"
+               <log loggingLevel="INFO"
                        message="Getting DCAE deployment status for loop: ${exchangeProperty[loopObject].getName()}" />
                <to
                        uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('DCAE', 'Getting Deployment status')" />
                                <simple>${exchangeProperty[X-ONAP-PartnerName]}
                                </simple>
                        </setHeader>
-                       <log
-                               loggingLevel="INFO"
+                       <log loggingLevel="INFO"
                                message="Endpoint to query Closed Loop status: ${exchangeProperty[loopObject].getDcaeDeploymentStatusUrl()}"></log>
                        <toD
                                uri="${exchangeProperty[loopObject].getDcaeDeploymentStatusUrl()}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.dcae.deployment.userName}}&amp;authPassword={{clamp.config.dcae.deployment.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=30000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
                                <setProperty propertyName="logMessage">
                                        <simple>DCAE deployment status</simple>
                                </setProperty>
+                               <setProperty propertyName="logComponent">
+                                       <simple>DCAE</simple>
+                               </setProperty>
                                <to uri="direct:dump-loop-log-http-response" />
                        </doFinally>
                </doTry>
index ede899e..036e8ef 100644 (file)
@@ -5,9 +5,7 @@
                        <simple>${header.loopName}</simple>
                </setBody>
                <setProperty propertyName="loopObject">
-                       <method
-                               ref="org.onap.clamp.loop.LoopService"
-                               method="getLoop" />
+                       <method ref="org.onap.clamp.loop.LoopService" method="getLoop" />
                </setProperty>
 
                <when>
                        <setHeader headerName="CamelHttpResponseCode">
                                <constant>404</constant>
                        </setHeader>
-                       <log
-                               loggingLevel="WARNING"
-                               message="Loop not found in database: ${body}" />
+                       <log loggingLevel="WARN" message="Loop not found in database: ${body}" />
                        <stop />
                </when>
        </route>
+
        <route id="update-policy-status-for-loop">
                <from uri="direct:update-policy-status-for-loop" />
-               <setProperty propertyName="atLeastOnePolicyNotFound">
-                       <simple resultType="java.lang.Boolean">false</simple>
-               </setProperty>
-               <setProperty propertyName="atLeastOnePolicyNotDeployed">
-                       <simple resultType="java.lang.Boolean">false</simple>
-               </setProperty>
                <setProperty propertyName="policyComponent">
                        <simple>${exchangeProperty[loopObject].getComponent('POLICY')}
                        </simple>
                </setProperty>
-               <log
-                       loggingLevel="INFO"
+               <setProperty propertyName="policyFound">
+                       <simple resultType="java.lang.Boolean">true</simple>
+               </setProperty>
+               <setProperty propertyName="policyDeployed">
+                       <simple resultType="java.lang.Boolean">true</simple>
+               </setProperty>
+               <log loggingLevel="INFO"
                        message="Processing all MICRO-SERVICES policies defined in loop ${exchangeProperty[loopObject].getName()}" />
                <split>
                        <simple>${exchangeProperty[loopObject].getMicroServicePolicies()}
                        <setProperty propertyName="policyType">
                                <simple>${body.getModelType()}</simple>
                        </setProperty>
+                       <setProperty propertyName="policyVersion">
+                               <simple>1.0.0</simple>
+                       </setProperty>
                        <setBody>
                                <constant>null</constant>
                        </setBody>
-                       <log
-                               loggingLevel="INFO"
+                       <log loggingLevel="INFO"
                                message="Processing Micro Service Policy: ${exchangeProperty[policyName]} of type ${exchangeProperty[policyType]}" />
-                       <setProperty propertyName="raiseHttpExceptionFlag">
-                               <simple resultType="java.lang.Boolean">false</simple>
-                       </setProperty>
-                       <to uri="direct:get-policy" />
-                       <when>
-                               <simple> ${header.CamelHttpResponseCode} != 200 </simple>
-                               <setProperty propertyName="atLeastOnePolicyNotFound">
-                                       <simple resultType="java.lang.Boolean">true</simple>
-                               </setProperty>
-                       </when>
-                       <to uri="direct:get-deployment-policy" />
-                       <when>
-                               <simple> ${header.CamelHttpResponseCode} != 200 </simple>
-                               <setProperty propertyName="atLeastOnePolicyNotDeployed">
-                                       <simple resultType="java.lang.Boolean">true</simple>
-                               </setProperty>
-                       </when>
+                       <to uri="direct:verify-one-policy" />
                </split>
-               <log
-                       loggingLevel="INFO"
+               <log loggingLevel="INFO"
                        message="Processing all OPERATIONAL policies defined in loop ${exchangeProperty[loopObject].getName()}" />
                <split>
                        <simple>${exchangeProperty[loopObject].getOperationalPolicies()}
                        <setProperty propertyName="policyType">
                                <simple>onap.policies.controlloop.Operational</simple>
                        </setProperty>
+                       <setProperty propertyName="policyVersion">
+                               <simple>1</simple>
+                       </setProperty>
                        <setProperty propertyName="operationalPolicy">
                                <simple>${body}</simple>
                        </setProperty>
                        <setBody>
                                <constant>null</constant>
                        </setBody>
-                       <log
-                               loggingLevel="INFO"
+                       <log loggingLevel="INFO"
                                message="Processing Micro Service Policy: ${exchangeProperty[policyName]} of type ${exchangeProperty[policyType]}" />
-                       <setProperty propertyName="raiseHttpExceptionFlag">
-                               <simple resultType="java.lang.Boolean">false</simple>
-                       </setProperty>
-                       <to uri="direct:get-policy" />
-                       <when>
-                               <simple> ${header.CamelHttpResponseCode} != 200 </simple>
-                               <setProperty propertyName="atLeastOnePolicyNotFound">
-                                       <simple resultType="java.lang.Boolean">true</simple>
-                               </setProperty>
-                       </when>
-                       <to uri="direct:get-deployment-policy" />
-                       <when>
-                               <simple> ${header.CamelHttpResponseCode} != 200 </simple>
-                               <setProperty propertyName="atLeastOnePolicyNotDeployed">
-                                       <simple resultType="java.lang.Boolean">true</simple>
-                               </setProperty>
-                       </when>
-
-                       <log
-                               loggingLevel="INFO"
+                       <to uri="direct:verify-one-policy" />
+                       <log loggingLevel="INFO"
                                message="Processing all GUARD policies defined in loop ${exchangeProperty[loopObject].getName()}" />
                        <split>
                                <simple>${exchangeProperty[operationalPolicy].createGuardPolicyPayloads().entrySet()}
                                <setProperty propertyName="policyType">
                                        <simple>onap.policies.controlloop.Guard</simple>
                                </setProperty>
+                               <setProperty propertyName="policyVersion">
+                                       <simple>1</simple>
+                               </setProperty>
                                <setBody>
                                        <constant>null</constant>
                                </setBody>
-                               <log
-                                       loggingLevel="INFO"
+                               <log loggingLevel="INFO"
                                        message="Processing Guard Policy: ${exchangeProperty[policyName]} of type ${exchangeProperty[policyType]}" />
-                               <setProperty propertyName="raiseHttpExceptionFlag">
-                                       <simple resultType="java.lang.Boolean">false</simple>
-                               </setProperty>
-                               <to uri="direct:get-policy" />
-                               <when>
-                                       <simple> ${header.CamelHttpResponseCode} != 200 </simple>
-                                       <setProperty propertyName="atLeastOnePolicyNotFound">
-                                               <simple resultType="java.lang.Boolean">true</simple>
-                                       </setProperty>
-                               </when>
-                               <to uri="direct:get-deployment-policy" />
-                               <when>
-                                       <simple> ${header.CamelHttpResponseCode} != 200 </simple>
-                                       <setProperty propertyName="atLeastOnePolicyNotDeployed">
-                                               <simple resultType="java.lang.Boolean">true</simple>
-                                       </setProperty>
-                               </when>
+                               <to uri="direct:verify-one-policy" />
                        </split>
                </split>
                <setProperty propertyName="policyState">
-                       <simple> ${exchangeProperty[policyComponent].computeState(*)}
+                       <simple> ${exchangeProperty[policyComponent].getState()}
                        </simple>
                </setProperty>
-               <log
-                       loggingLevel="INFO"
+               <log loggingLevel="INFO"
                        message="Policy state set to: ${exchangeProperty[policyState].getStateName()}" />
                <to
                        uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLogForComponent('Policy state set to: ${exchangeProperty[policyState].getStateName()}','INFO','POLICY',${exchangeProperty[loopObject]})" />
        </route>
        <route id="update-dcae-status-for-loop">
                <from uri="direct:update-dcae-status-for-loop" />
-               <log
-                       loggingLevel="INFO"
+               <log loggingLevel="INFO"
                        message="Updating DCAE status for loop: ${exchangeProperty[loopObject].getName()}" />
                <setProperty propertyName="dcaeComponent">
                        <simple>${exchangeProperty[loopObject].getComponent('DCAE')}</simple>
                                <simple> ${header.CamelHttpResponseCode} == 200 </simple>
                                <convertBodyTo type="java.lang.String" />
                                <setProperty propertyName="dcaeResponse">
-                                       <method
-                                               ref="org.onap.clamp.loop.components.external.DcaeComponent"
+                                       <method ref="org.onap.clamp.loop.components.external.DcaeComponent"
                                                method="convertDcaeResponse(${body})" />
                                </setProperty>
                        </when>
                        <simple> ${exchangeProperty[dcaeComponent].computeState(*)}
                        </simple>
                </setProperty>
-               <log
-                       loggingLevel="INFO"
+               <log loggingLevel="INFO"
                        message="DCAE state set to: ${exchangeProperty[dcaeState].getStateName()} - DCAE message: ${exchangeProperty[dcaeResponse].getError()}" />
                <to
                        uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLogForComponent('DCAE state set to: ${exchangeProperty[dcaeState].getStateName()} - message: ${exchangeProperty[dcaeResponse].getError()}','INFO','DCAE',${exchangeProperty[loopObject]})" />
        </route>
        <route id="direct:update-loop-state">
                <from uri="direct:update-loop-state" />
-               <log
-                       loggingLevel="INFO"
+               <log loggingLevel="INFO"
                        message="Updating status for loop: ${exchangeProperty[loopObject].getName()}" />
                <choice>
                        <when>
-                                <simple>${exchangeProperty['dcaeState'].getStateName()} == 'BLUEPRINT_DEPLOYED' and ${exchangeProperty['policyState'].getStateName()} == 'NOT_SENT'</simple>
+                               <simple>${exchangeProperty['dcaeState'].getStateName()} ==
+                                       'BLUEPRINT_DEPLOYED' and ${exchangeProperty['policyState'].getStateName()}
+                                       == 'NOT_SENT'
+                               </simple>
                                <to
                                        uri="bean:org.onap.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'DESIGN')" />
                        </when>
                        <when>
-                                <simple>${exchangeProperty['dcaeState'].getStateName()} == 'IN_ERROR' or ${exchangeProperty['dcaeState'].getStateName()} == 'MICROSERVICE_INSTALLATION_FAILED'</simple>
+                               <simple>${exchangeProperty['dcaeState'].getStateName()} == 'IN_ERROR' or
+                                       ${exchangeProperty['dcaeState'].getStateName()} ==
+                                       'MICROSERVICE_INSTALLATION_FAILED'
+                               </simple>
                                <to
                                        uri="bean:org.onap.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'IN_ERROR')" />
                        </when>
                        <when>
-                               <simple>${exchangeProperty['dcaeState'].getStateName()} == 'MICROSERVICE_UNINSTALLATION_FAILED' or ${exchangeProperty['policyState'].getStateName()} == 'IN_ERROR'</simple>
+                               <simple>${exchangeProperty['dcaeState'].getStateName()} ==
+                                       'MICROSERVICE_UNINSTALLATION_FAILED' or
+                                       ${exchangeProperty['policyState'].getStateName()} == 'IN_ERROR'
+                               </simple>
                                <to
                                        uri="bean:org.onap.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'IN_ERROR')" />
                        </when>
                        <when>
-                                <simple>${exchangeProperty['dcaeState'].getStateName()} == 'MICROSERVICE_INSTALLED_SUCCESSFULLY' and ${exchangeProperty['policyState'].getStateName()} == 'SENT_AND_DEPLOYED'</simple>
+                               <simple>${exchangeProperty['dcaeState'].getStateName()} ==
+                                       'MICROSERVICE_INSTALLED_SUCCESSFULLY' and
+                                       ${exchangeProperty['policyState'].getStateName()} == 'SENT_AND_DEPLOYED'
+                               </simple>
                                <to
                                        uri="bean:org.onap.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'RUNNING')" />
                        </when>
                        <when>
-                                <simple>${exchangeProperty['dcaeState'].getStateName()} == 'MICROSERVICE_INSTALLED_SUCCESSFULLY' and ${exchangeProperty['policyState'].getStateName()} == 'SENT'</simple>
+                               <simple>${exchangeProperty['dcaeState'].getStateName()} ==
+                                       'MICROSERVICE_INSTALLED_SUCCESSFULLY' and
+                                       ${exchangeProperty['policyState'].getStateName()} == 'SENT'
+                               </simple>
                                <to
                                        uri="bean:org.onap.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'STOPPED')" />
                        </when>
                        <when>
-                                <simple>${exchangeProperty['dcaeState'].getStateName()} == 'BLUEPRINT_DEPLOYED' or ${exchangeProperty['dcaeState'].getStateName()} == 'MICROSERVICE_UNINSTALLED_SUCCESSFULLY' and ${exchangeProperty['policyState'].getStateName()} == 'SENT_AND_DEPLOYED'</simple>
+                               <simple>${exchangeProperty['dcaeState'].getStateName()} ==
+                                       'BLUEPRINT_DEPLOYED' or ${exchangeProperty['dcaeState'].getStateName()} ==
+                                       'MICROSERVICE_UNINSTALLED_SUCCESSFULLY' and
+                                       ${exchangeProperty['policyState'].getStateName()} == 'SENT_AND_DEPLOYED'
+                               </simple>
                                <to
                                        uri="bean:org.onap.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'SUBMITTED')" />
                        </when>
                        <when>
-                                <simple>${exchangeProperty['dcaeState'].getStateName()} == 'PROCESSING_MICROSERVICE_INSTALLATION' or ${exchangeProperty['dcaeState'].getStateName()} == 'PROCESSING_MICROSERVICE_UNINSTALLATION' and ${exchangeProperty['policyState'].getStateName()} == 'SENT_AND_DEPLOYED'</simple>
+                               <simple>${exchangeProperty['dcaeState'].getStateName()} ==
+                                       'PROCESSING_MICROSERVICE_INSTALLATION' or
+                                       ${exchangeProperty['dcaeState'].getStateName()} ==
+                                       'PROCESSING_MICROSERVICE_UNINSTALLATION' and
+                                       ${exchangeProperty['policyState'].getStateName()} == 'SENT_AND_DEPLOYED'
+                               </simple>
                                <to
                                        uri="bean:org.onap.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'WAITING')" />
                        </when>
                        <when>
-                                <simple>${exchangeProperty['dcaeState'].getStateName()} == 'MICROSERVICE_INSTALLED_SUCCESSFULLY' and ${exchangeProperty['policyState'].getStateName()} != 'NOT_SENT'</simple>
+                               <simple>${exchangeProperty['dcaeState'].getStateName()} ==
+                                       'MICROSERVICE_INSTALLED_SUCCESSFULLY' and
+                                       ${exchangeProperty['policyState'].getStateName()} != 'NOT_SENT'
+                               </simple>
                                <to
                                        uri="bean:org.onap.clamp.loop.LoopService?method=updateLoopState(${exchangeProperty[loopObject]},'DEPLOYED')" />
                        </when>
                </choice>
-               <log
-                       loggingLevel="INFO"
+               <log loggingLevel="INFO"
                        message="New loop state is: ${exchangeProperty[loopObject].getLastComputedState().toString()}" />
                <to
                        uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('New loop state is: ${exchangeProperty[loopObject].getLastComputedState().toString()}','INFO',${exchangeProperty[loopObject]})" />
index 537354f..75ac66c 100644 (file)
@@ -1,10 +1,40 @@
 
 <routes xmlns="http://camel.apache.org/schema/spring">
+       <route id="verify-one-policy">
+               <from uri="direct:verify-one-policy" />
+               <setProperty propertyName="raiseHttpExceptionFlag">
+                       <simple resultType="java.lang.Boolean">false</simple>
+               </setProperty>
+               <to uri="direct:get-policy" />
+               <when>
+                       <simple> ${header.CamelHttpResponseCode} != 200 </simple>
+                       <setProperty propertyName="policyFound">
+                               <simple resultType="java.lang.Boolean">false</simple>
+                       </setProperty>
+                       <log loggingLevel="WARN"
+                               message="At least one policy has not been found on policy engine: ${exchangeProperty[policyName]}" />
+               </when>
+               <setProperty propertyName="raiseHttpExceptionFlag">
+                       <simple resultType="java.lang.Boolean">false</simple>
+               </setProperty>
+               <to uri="direct:get-deployment-policy" />
+               <when>
+                       <simple> ${header.CamelHttpResponseCode} != 200 </simple>
+                       <setProperty propertyName="policyDeployed">
+                               <simple resultType="java.lang.Boolean">false</simple>
+                       </setProperty>
+                       <log loggingLevel="WARN"
+                               message="At least one policy has not been deployed on policy engine: ${exchangeProperty[policyName]}" />
+               </when>
+               <setProperty propertyName="newPolicyState">
+                       <simple>${exchangeProperty[policyComponent].computeState(*)}</simple>
+               </setProperty>
+       </route>
+
        <route id="get-policy">
                <from uri="direct:get-policy" />
                <doTry>
-                       <log
-                               loggingLevel="INFO"
+                       <log loggingLevel="INFO"
                                message="Getting Policy: ${exchangeProperty[policyName]}" />
                        <to
                                uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Get Policy')" />
                                <simple>${exchangeProperty[X-ONAP-PartnerName]}
                                </simple>
                        </setHeader>
-                       <log
-                               loggingLevel="INFO"
-                               message="Endpoint to get policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyType]}/versions/1.0.0/policies/${exchangeProperty[policyName]}/versions/1.0.0"></log>
+                       <log loggingLevel="INFO"
+                               message="Endpoint to get policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyType]}/versions/1.0.0/policies/${exchangeProperty[policyName]}/versions/${exchangeProperty[policyVersion]}"></log>
                        <toD
-                               uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyType]}/versions/1.0.0/policies/${exchangeProperty[policyName]}/versions/1.0.0?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
+                               uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyType]}/versions/1.0.0/policies/${exchangeProperty[policyName]}/versions/${exchangeProperty[policyVersion]}?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
                        <doFinally>
                                <to uri="direct:reset-raise-http-exception-flag" />
                                <to
@@ -37,6 +66,9 @@
                                                Policy status
                                        </simple>
                                </setProperty>
+                               <setProperty propertyName="logComponent">
+                                       <simple>POLICY</simple>
+                               </setProperty>
                                <to uri="direct:dump-loop-log-http-response" />
                        </doFinally>
                </doTry>
@@ -45,8 +77,7 @@
        <route id="get-deployment-policy">
                <from uri="direct:get-deployment-policy" />
                <doTry>
-                       <log
-                               loggingLevel="INFO"
+                       <log loggingLevel="INFO"
                                message="Getting the policy deployment in PDP: ${exchangeProperty[policyName]}" />
                        <to
                                uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Getting the policy deployment in PDP')" />
@@ -65,8 +96,7 @@
                                <simple>${exchangeProperty[X-ONAP-PartnerName]}
                                </simple>
                        </setHeader>
-                       <log
-                               loggingLevel="INFO"
+                       <log loggingLevel="INFO"
                                message="Endpoint to get policy deployment status: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyType]}/versions/1.0.0/policies/${exchangeProperty[policyName]}/versions/deployed"></log>
                        <toD
                                uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[policyType]}/versions/1.0.0/policies/${exchangeProperty[policyName]}/versions/deployed?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authMethod=Basic&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
                                                status
                                        </simple>
                                </setProperty>
+                               <setProperty propertyName="logComponent">
+                                       <simple>POLICY</simple>
+                               </setProperty>
                                <to uri="direct:dump-loop-log-http-response" />
                        </doFinally>
                </doTry>
        <route id="create-micro-service-policy">
                <from uri="direct:create-micro-service-policy" />
                <doTry>
-                       <log
-                               loggingLevel="INFO"
+                       <log loggingLevel="INFO"
                                message="Creating Micro Service Policy: ${exchangeProperty[microServicePolicy].getName()}" />
                        <to
                                uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Create Micro Service Policy')" />
                                <simple>${exchangeProperty[X-ONAP-PartnerName]}
                                </simple>
                        </setHeader>
-                       <log
-                               loggingLevel="INFO"
+                       <log loggingLevel="INFO"
                                message="Endpoint to create microservice policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[microServicePolicy].getModelType()}/versions/1.0.0/policies"></log>
                        <toD
                                uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[microServicePolicy].getModelType()}/versions/1.0.0/policies?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
                                                status
                                        </simple>
                                </setProperty>
+                               <setProperty propertyName="logComponent">
+                                       <simple>POLICY</simple>
+                               </setProperty>
                                <to uri="direct:dump-loop-log-http-response" />
                        </doFinally>
                </doTry>
        <route id="delete-micro-service-policy">
                <from uri="direct:delete-micro-service-policy" />
                <doTry>
-                       <log
-                               loggingLevel="INFO"
+                       <log loggingLevel="INFO"
                                message="Deleting Micro Service Policy: ${exchangeProperty[microServicePolicy].getName()}" />
                        <to
                                uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Delete Micro Service Policy')" />
                                <simple>${exchangeProperty[X-ONAP-PartnerName]}
                                </simple>
                        </setHeader>
-                       <log
-                               loggingLevel="INFO"
+                       <log loggingLevel="INFO"
                                message="Endpoint to delete microservice policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[microServicePolicy].getModelType()}/versions/1.0.0/policies/${exchangeProperty[microServicePolicy].getName()}/versions/1.0.0"></log>
                        <toD
                                uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/${exchangeProperty[microServicePolicy].getModelType()}/versions/1.0.0/policies/${exchangeProperty[microServicePolicy].getName()}/versions/1.0.0?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;deleteWithBody=false&amp;mapHttpMessageBody=false&amp;mapHttpMessageFormUrlEncodedBody=false&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
                                                status
                                        </simple>
                                </setProperty>
+                               <setProperty propertyName="logComponent">
+                                       <simple>POLICY</simple>
+                               </setProperty>
                                <to uri="direct:dump-loop-log-http-response" />
                        </doFinally>
                </doTry>
        <route id="create-operational-policy">
                <from uri="direct:create-operational-policy" />
                <doTry>
-                       <log
-                               loggingLevel="INFO"
+                       <log loggingLevel="INFO"
                                message="Creating Operational Policy: ${exchangeProperty[operationalPolicy].getName()}" />
                        <to
                                uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Create Operational Policy')" />
                                <simple>${exchangeProperty[X-ONAP-PartnerName]}
                                </simple>
                        </setHeader>
-                       <log
-                               loggingLevel="INFO"
+                       <log loggingLevel="INFO"
                                message="Endpoint to create operational policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies"></log>
                        <toD
                                uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
                                                status
                                        </simple>
                                </setProperty>
+                               <setProperty propertyName="logComponent">
+                                       <simple>POLICY</simple>
+                               </setProperty>
                                <to uri="direct:dump-loop-log-http-response" />
                        </doFinally>
                </doTry>
        <route id="delete-operational-policy">
                <from uri="direct:delete-operational-policy" />
                <doTry>
-                       <log
-                               loggingLevel="INFO"
+                       <log loggingLevel="INFO"
                                message="Deleting Operational Policy: ${exchangeProperty[operationalPolicy].getName()}" />
                        <to
                                uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Delete Operational Policy')" />
                                <simple>${exchangeProperty[X-ONAP-PartnerName]}
                                </simple>
                        </setHeader>
-                       <log
-                               loggingLevel="INFO"
+                       <log loggingLevel="INFO"
                                message="Endpoint to delete operational policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/${exchangeProperty[operationalPolicy].getName()}/versions/1"></log>
                        <toD
                                uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Operational/versions/1.0.0/policies/${exchangeProperty[operationalPolicy].getName()}/versions/1?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;deleteWithBody=false&amp;mapHttpMessageBody=false&amp;mapHttpMessageFormUrlEncodedBody=false&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
                                                status
                                        </simple>
                                </setProperty>
+                               <setProperty propertyName="logComponent">
+                                       <simple>POLICY</simple>
+                               </setProperty>
                                <to uri="direct:dump-loop-log-http-response" />
                        </doFinally>
                </doTry>
        <route id="create-guard-policy">
                <from uri="direct:create-guard-policy" />
                <doTry>
-                       <log
-                               loggingLevel="INFO"
+                       <log loggingLevel="INFO"
                                message="Creating Guard Policy: ${exchangeProperty[guardPolicy].getKey()}" />
                        <to
                                uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Create Guard Policy')" />
                                <simple>${exchangeProperty[X-ONAP-PartnerName]}
                                </simple>
                        </setHeader>
-                       <log
-                               loggingLevel="INFO"
+                       <log loggingLevel="INFO"
                                message="Endpoint to create guard policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies"></log>
                        <toD
                                uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
                                        <simple>${exchangeProperty[guardPolicy].getKey()} creation status
                                        </simple>
                                </setProperty>
+                               <setProperty propertyName="logComponent">
+                                       <simple>POLICY</simple>
+                               </setProperty>
                                <to uri="direct:dump-loop-log-http-response" />
                        </doFinally>
                </doTry>
        <route id="delete-guard-policy">
                <from uri="direct:delete-guard-policy" />
                <doTry>
-                       <log
-                               loggingLevel="INFO"
+                       <log loggingLevel="INFO"
                                message="Deleting Guard Policy: ${exchangeProperty[guardPolicy].getKey()}" />
                        <to
                                uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Delete Guard Policy')" />
                                <simple>${exchangeProperty[X-ONAP-PartnerName]}
                                </simple>
                        </setHeader>
-                       <log
-                               loggingLevel="INFO"
+                       <log loggingLevel="INFO"
                                message="Endpoint to delete guard policy: {{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/${exchangeProperty[guardPolicy].getKey()}/versions/1"></log>
                        <toD
                                uri="{{clamp.config.policy.api.url}}/policy/api/v1/policytypes/onap.policies.controlloop.Guard/versions/1.0.0/policies/${exchangeProperty[guardPolicy].getKey()}/versions/1?bridgeEndpoint=true&amp;useSystemProperties=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;deleteWithBody=false&amp;mapHttpMessageBody=false&amp;mapHttpMessageFormUrlEncodedBody=false&amp;authUsername={{clamp.config.policy.api.userName}}&amp;authPassword={{clamp.config.policy.api.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
                                        <simple>${exchangeProperty[guardPolicy].getKey()} removal status
                                        </simple>
                                </setProperty>
+                               <setProperty propertyName="logComponent">
+                                       <simple>POLICY</simple>
+                               </setProperty>
                                <to uri="direct:dump-loop-log-http-response" />
                        </doFinally>
                </doTry>
        <route id="add-all-to-active-pdp-group">
                <from uri="direct:add-all-to-active-pdp-group" />
                <doTry>
-                       <log
-                               loggingLevel="INFO"
+                       <log loggingLevel="INFO"
                                message="Adding loop policies to PDP Group: ${exchangeProperty[loopObject].getName()}" />
                        <to
                                uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Add policies to PDP group')" />
                                <simple>${exchangeProperty[X-ONAP-PartnerName]}
                                </simple>
                        </setHeader>
-                       <log
-                               loggingLevel="INFO"
+                       <log loggingLevel="INFO"
                                message="Endpoint to add policies to PDP Group: {{clamp.config.policy.pap.url}}/policy/pap/v1/pdps/policies"></log>
                        <toD
                                uri="{{clamp.config.policy.pap.url}}/policy/pap/v1/pdps/policies?bridgeEndpoint=true&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;useSystemProperties=true&amp;authUsername={{clamp.config.policy.pap.userName}}&amp;authPassword={{clamp.config.policy.pap.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
                                <setProperty propertyName="logMessage">
                                        <simple>PDP Group push ALL status</simple>
                                </setProperty>
+                               <setProperty propertyName="logComponent">
+                                       <simple>POLICY</simple>
+                               </setProperty>
                                <to uri="direct:dump-loop-log-http-response" />
                        </doFinally>
                </doTry>
        <route id="remove-all-policy-from-active-pdp-group">
                <from uri="direct:remove-all-policy-from-active-pdp-group" />
                <doTry>
-                       <log
-                               loggingLevel="INFO"
+                       <log loggingLevel="INFO"
                                message="Removing policies from active PDP group for loop: ${exchangeProperty[loopObject].getName()}" />
                        <to
                                uri="bean:org.onap.clamp.flow.log.FlowLogOperation?method=invokeLog('Policy', 'Removing policies PDP group')" />
                                        <simple>${exchangeProperty[X-ONAP-PartnerName]}
                                        </simple>
                                </setHeader>
-                               <log
-                                       loggingLevel="INFO"
+                               <log loggingLevel="INFO"
                                        message="Endpoint to delete policy from PDP Group: {{clamp.config.policy.pap.url}}/pdps/policies/${exchangeProperty[policyName]}/versions/1.0.0"></log>
                                <toD
                                        uri="{{clamp.config.policy.pap.url}}/policy/pap/v1/pdps/policies/${exchangeProperty[policyName]}/versions/1.0.0?bridgeEndpoint=true&amp;useSystemProperties=true&amp;mapHttpMessageHeaders=false&amp;throwExceptionOnFailure=${exchangeProperty[raiseHttpExceptionFlag]}&amp;authUsername={{clamp.config.policy.pap.userName}}&amp;authPassword={{clamp.config.policy.pap.password}}&amp;connectionTimeToLive=5000&amp;httpClient.connectTimeout=10000&amp;httpClient.socketTimeout=20000&amp;authenticationPreemptive=true&amp;connectionClose=true" />
                                        <simple>${exchangeProperty[policyName]} PDP Group removal status
                                        </simple>
                                </setProperty>
+                               <setProperty propertyName="logComponent">
+                                       <simple>POLICY</simple>
+                               </setProperty>
                                <to uri="direct:dump-loop-log-http-response" />
                        </split>
                        <doCatch>
                                <setProperty propertyName="logMessage">
                                        <simple>PDP Group removal, Error reported: ${exception}</simple>
                                </setProperty>
+                               <setProperty propertyName="logComponent">
+                                       <simple>POLICY</simple>
+                               </setProperty>
                                <to uri="direct:dump-loop-log-http-response" />
                        </doCatch>
                        <doFinally>
index adf843f..bbbc46a 100644 (file)
@@ -8,10 +8,21 @@
 
        <route id="dump-loop-log-http-response">
                <from uri="direct:dump-loop-log-http-response" />
-               <log
-                       loggingLevel="INFO"
+               <log loggingLevel="INFO"
                        message="${exchangeProperty[logMessage]} - ${header.CamelHttpResponseCode} : ${header.CamelHttpResponseText}" />
-               <to
-                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('${exchangeProperty[logMessage]} - ${header.CamelHttpResponseCode} : ${header.CamelHttpResponseText}','INFO',${exchangeProperty[loopObject]})" />
+               <choice>
+                       <when>
+                               <simple>${exchangeProperty[logComponent]} == null</simple>
+                               <to
+                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLog('${exchangeProperty[logMessage]} - ${header.CamelHttpResponseCode} : ${header.CamelHttpResponseText}','INFO',${exchangeProperty[loopObject]})" />
+                       </when>
+                       <otherwise>
+                               <to
+                                       uri="bean:org.onap.clamp.loop.log.LoopLogService?method=addLogForComponent('${exchangeProperty[logMessage]} - ${header.CamelHttpResponseCode} : ${header.CamelHttpResponseText}','INFO','${exchangeProperty[logComponent]}',${exchangeProperty[loopObject]})" />
+                               <setProperty propertyName="logComponent">
+                                       <constant>null</constant>
+                               </setProperty>
+                       </otherwise>
+               </choice>
        </route>
 </routes>
\ No newline at end of file
diff --git a/src/main/resources/clds/json-schema/operational_policies/operational_policy.json b/src/main/resources/clds/json-schema/operational_policies/operational_policy.json
new file mode 100644 (file)
index 0000000..93738c8
--- /dev/null
@@ -0,0 +1,362 @@
+{
+    "schema": {
+        "uniqueItems": "true",
+        "format": "tabs",
+        "type": "array",
+        "minItems": 1,
+        "maxItems": 1,
+        "title": "Operational policies",
+        "items": {
+            "type": "object",
+            "title": "Operational Policy Item",
+            "id": "operational_policy_item",
+            "headerTemplate": "{{self.name}}",
+            "required": [
+                "name",
+                "configurationsJson"
+            ],
+            "properties": {
+                "name": {
+                    "type": "string",
+                    "title": "Operational policy name",
+                    "readOnly": "True"
+                },
+                "configurationsJson": {
+                    "type": "object",
+                    "title": "Configuration",
+                    "required": [
+                        "operational_policy",
+                        "guard_policies"
+                    ],
+                    "properties": {
+                        "operational_policy": {
+                            "type": "object",
+                            "title": "Related Parameters",
+                            "required": [
+                                "controlLoop",
+                                "policies"
+                            ],
+                            "properties": {
+                                "controlLoop": {
+                                    "type": "object",
+                                    "title": "Control Loop details",
+                                    "required": [
+                                        "timeout",
+                                        "abatement",
+                                        "trigger_policy",
+                                        "controlLoopName"
+                                    ],
+                                    "properties": {
+                                        "timeout": {
+                                            "type": "string",
+                                            "title": "Overall Time Limit",
+                                            "default": "0",
+                                            "format": "number"
+                                        },
+                                        "abatement": {
+                                            "type": "string",
+                                            "title": "Abatement",
+                                            "enum": [
+                                                "True",
+                                                "False"
+                                            ]
+                                        },
+                                        "trigger_policy": {
+                                            "type": "string",
+                                            "title": "Policy Decision Entry"
+                                        },
+                                        "controlLoopName": {
+                                            "type": "string",
+                                            "title": "Control loop name",
+                                            "readOnly": "True"
+                                        }
+                                    }
+                                },
+                                "policies": {
+                                    "uniqueItems": "true",
+                                    "id": "policies_array",
+                                    "type": "array",
+                                    "title": "Policy Decision Tree",
+                                    "format": "tabs-top",
+                                    "items": {
+                                        "title": "Policy Decision",
+                                        "type": "object",
+                                        "id": "policy_item",
+                                        "headerTemplate": "{{self.id}} - {{self.recipe}}",
+                                        "format": "categories",
+                                        "basicCategoryTitle": "recipe",
+                                        "required": [
+                                            "id",
+                                            "recipe",
+                                            "retry",
+                                            "timeout",
+                                            "actor",
+                                            "success",
+                                            "failure",
+                                            "failure_timeout",
+                                            "failure_retries",
+                                            "failure_exception",
+                                            "failure_guard",
+                                            "target"
+                                        ],
+                                        "properties": {
+                                            "id": {
+                                                "default": "Policy 1",
+                                                "title": "Policy ID",
+                                                "type": "string"
+                                            },
+                                            "recipe": {
+                                                "title": "Recipe",
+                                                "type": "string",
+                                                "enum": [
+                                                    "Restart",
+                                                    "Rebuild",
+                                                    "Migrate",
+                                                    "Health-Check",
+                                                    "ModifyConfig",
+                                                    "VF Module Create",
+                                                    "VF Module Delete",
+                                                    "Reroute"
+                                                ]
+                                            },
+                                            "retry": {
+                                                "default": "0",
+                                                "title": "Number of Retry",
+                                                "type": "string",
+                                                "format": "number"
+                                            },
+                                            "timeout": {
+                                                "default": "0",
+                                                "title": "Timeout",
+                                                "type": "string",
+                                                "format": "number"
+                                            },
+                                            "actor": {
+                                                "title": "Actor",
+                                                "type": "string",
+                                                "enum": [
+                                                    "APPC",
+                                                    "SO",
+                                                    "VFC",
+                                                    "SDNC",
+                                                    "SDNR"
+                                                ]
+                                            },
+                                            "payload": {
+                                                "title": "Payload (YAML)",
+                                                "type": "string",
+                                                "format": "textarea"
+                                            },
+                                            "success": {
+                                                "default": "final_success",
+                                                "title": "When Success",
+                                                "type": "string"
+                                            },
+                                            "failure": {
+                                                "default": "final_failure",
+                                                "title": "When Failure",
+                                                "type": "string"
+                                            },
+                                            "failure_timeout": {
+                                                "default": "final_failure_timeout",
+                                                "title": "When Failure Timeout",
+                                                "type": "string"
+                                            },
+                                            "failure_retries": {
+                                                "default": "final_failure_retries",
+                                                "title": "When Failure Retries",
+                                                "type": "string"
+                                            },
+                                            "failure_exception": {
+                                                "default": "final_failure_exception",
+                                                "title": "When Failure Exception",
+                                                "type": "string"
+                                            },
+                                            "failure_guard": {
+                                                "default": "final_failure_guard",
+                                                "title": "When Failure Guard",
+                                                "type": "string"
+                                            },
+                                            "target": {
+                                                "type": "object",
+                                                "required": [
+                                                    "type",
+                                                    "resourceID"
+                                                ],
+                                                "anyOf": [
+                                                    {
+                                                        "title": "User Defined",
+                                                        "additionalProperties":"True",
+                                                        "properties": {
+                                                            "type": {
+                                                                "title": "Target type",
+                                                                "type": "string",
+                                                                "default": "",
+                                                                "enum": [
+                                                                    "VNF",
+                                                                    "VFMODULE",
+                                                                    "VM"
+                                                                ]
+                                                            },
+                                                            "resourceID": {
+                                                                "title": "Target type",
+                                                                "type": "string",
+                                                                "default": ""
+                                                            }
+                                                        }
+                                                    }
+                                                ]
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        },
+                        "guard_policies": {
+                            "type": "array",
+                            "format": "tabs-top",
+                            "title": "Associated Guard policies",
+                            "items": {
+                                "headerTemplate": "{{self.policy-id}} - {{self.content.recipe}}",
+                                "anyOf": [
+                                    {
+                                        "title": "Guard MinMax",
+                                        "type": "object",
+                                        "properties": {
+                                            "policy-id": {
+                                                "type": "string",
+                                                "default": "guard.minmax.new",
+                                                "pattern": "^(guard.minmax\\..*)$"
+                                            },
+                                            "content": {
+                                                "properties": {
+                                                    "actor": {
+                                                        "type": "string",
+                                                        "enum": [
+                                                            "APPC",
+                                                            "SO",
+                                                            "VFC",
+                                                            "SDNC",
+                                                            "SDNR"
+                                                        ]
+                                                    },
+                                                    "recipe": {
+                                                        "type": "string",
+                                                        "enum": [
+                                                            "Restart",
+                                                            "Rebuild",
+                                                            "Migrate",
+                                                            "Health-Check",
+                                                            "ModifyConfig",
+                                                            "VF Module Create",
+                                                            "VF Module Delete",
+                                                            "Reroute"
+                                                        ]
+                                                    },
+                                                    "targets": {
+                                                        "type": "string",
+                                                        "default": ".*"
+                                                    },
+                                                    "clname": {
+                                                        "type": "string",
+                                                        "template": "{{loopName}}",
+                                                        "watch": {
+                                                            "loopName": "operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName"
+                                                        }
+                                                    },
+                                                    "guardActiveStart": {
+                                                        "type": "string",
+                                                        "default": "00:00:00Z"
+                                                    },
+                                                    "guardActiveEnd": {
+                                                        "type": "string",
+                                                        "default": "10:00:00Z"
+                                                    },
+                                                    "min": {
+                                                        "type": "string",
+                                                        "default": "0"
+                                                    },
+                                                    "max": {
+                                                        "type": "string",
+                                                        "default": "1"
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    },
+                                    {
+                                        "title": "Guard Frequency",
+                                        "type": "object",
+                                        "properties": {
+                                            "policy-id": {
+                                                "type": "string",
+                                                "default": "guard.frequency.new",
+                                                "pattern": "^(guard.frequency\\..*)$"
+                                            },
+                                            "content": {
+                                                "properties": {
+                                                    "actor": {
+                                                        "type": "string",
+                                                        "enum": [
+                                                            "APPC",
+                                                            "SO",
+                                                            "VFC",
+                                                            "SDNC",
+                                                            "SDNR"
+                                                        ]
+                                                    },
+                                                    "recipe": {
+                                                        "type": "string",
+                                                        "enum": [
+                                                            "Restart",
+                                                            "Rebuild",
+                                                            "Migrate",
+                                                            "Health-Check",
+                                                            "ModifyConfig",
+                                                            "VF Module Create",
+                                                            "VF Module Delete",
+                                                            "Reroute"
+                                                        ]
+                                                    },
+                                                    "targets": {
+                                                        "type": "string",
+                                                        "default": ".*"
+                                                    },
+                                                    "clname": {
+                                                        "type": "string",
+                                                        "template": "{{loopName}}",
+                                                        "watch": {
+                                                            "loopName": "operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName"
+                                                        }
+                                                    },
+                                                    "guardActiveStart": {
+                                                        "type": "string",
+                                                        "default": "00:00:00Z"
+                                                    },
+                                                    "guardActiveEnd": {
+                                                        "type": "string",
+                                                        "default": "10:00:00Z"
+                                                    },
+                                                    "limit": {
+                                                        "type": "string"
+                                                    },
+                                                    "timeWindow": {
+                                                        "type": "string"
+                                                    },
+                                                    "timeUnits": {
+                                                        "type": "string",
+                                                        "enum":["minute","hour","day","week","month","year"]
+                                                    }
+                                                }
+                                            }
+                                        }
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
index d31d5a0..5218c92 100644 (file)
@@ -5,6 +5,8 @@
  * Copyright (C) 2018 AT&T Intellectual Property. All rights
  *                             reserved.
  * ================================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
@@ -29,7 +31,6 @@ import static org.junit.Assert.assertNotNull;
 import com.att.eelf.configuration.EELFLogger;
 import com.att.eelf.configuration.EELFManager;
 
-import java.io.IOException;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -63,23 +64,21 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
 public class CldsDictionaryServiceItCase {
 
-    protected static final EELFLogger logger = EELFManager.getInstance().getLogger(CldsDictionaryServiceItCase.class);
+    private static final EELFLogger logger = EELFManager.getInstance().getLogger(CldsDictionaryServiceItCase.class);
     @Autowired
     private CldsDictionaryService cldsDictionaryService;
-    private Authentication authentication;
     private CldsDictionary cldsDictionary;
     private CldsDictionaryItem cldsDictionaryItem;
-    private List<GrantedAuthority> authList = new LinkedList<GrantedAuthority>();
-    private LoggingUtils util;
+    private List<GrantedAuthority> authList = new LinkedList<>();
+
+    private static final String DICTIONARY_NAME = "TestDictionary";
 
     /**
      * Setup the variable before the tests execution.
      *
-     * @throws IOException
-     *         In case of issues when opening the files
      */
     @Before
-    public void setupBefore() throws IOException {
+    public void setupBefore() {
         authList.add(new SimpleGrantedAuthority("permission-type-cl|dev|read"));
         authList.add(new SimpleGrantedAuthority("permission-type-cl|dev|update"));
         authList.add(new SimpleGrantedAuthority("permission-type-template|dev|read"));
@@ -87,22 +86,19 @@ public class CldsDictionaryServiceItCase {
         authList.add(new SimpleGrantedAuthority("permission-type-filter-vf|dev|*"));
         authList.add(new SimpleGrantedAuthority("permission-type-tosca|dev|read"));
         authList.add(new SimpleGrantedAuthority("permission-type-tosca|dev|update"));
-        authentication = new UsernamePasswordAuthenticationToken(new User("admin", "", authList), "", authList);
 
+        Authentication authentication =
+            new UsernamePasswordAuthenticationToken(new User("admin", "", authList), "", authList);
         SecurityContext securityContext = Mockito.mock(SecurityContext.class);
         Mockito.when(securityContext.getAuthentication()).thenReturn(authentication);
 
-        util = Mockito.mock(LoggingUtils.class);
+        LoggingUtils util = Mockito.mock(LoggingUtils.class);
         Mockito.doNothing().when(util).entering(Matchers.any(HttpServletRequest.class), Matchers.any(String.class));
         cldsDictionaryService.setLoggingUtil(util);
 
         cldsDictionaryService.setSecurityContext(securityContext);
 
-        cldsDictionary = new CldsDictionary();
-
-        cldsDictionary.setDictionaryName("TestDictionary");
-        ResponseEntity entity = cldsDictionaryService.createOrUpdateDictionary("TestDictionary", cldsDictionary);
-        cldsDictionary = (CldsDictionary) entity.getBody();
+        cldsDictionary = cldsDictionaryService.createDictionary(DICTIONARY_NAME);
 
         cldsDictionaryItem = new CldsDictionaryItem();
         cldsDictionaryItem.setDictElementShortName("TestDictionaryItemShortName");
@@ -110,23 +106,43 @@ public class CldsDictionaryServiceItCase {
         cldsDictionaryItem.setDictElementType("string");
         cldsDictionaryItem.setDictionaryId(cldsDictionary.getDictionaryId());
         cldsDictionaryItem.setDictElementDesc("TestDictionaryItemDesc");
-        cldsDictionaryService.createOrUpdateDictionaryElements("TestDictionary", cldsDictionaryItem);
+        cldsDictionaryService.createOrUpdateDictionaryElements(DICTIONARY_NAME, cldsDictionaryItem);
 
         logger.info("Initial Clds Dictionary uploaded in DB:" + cldsDictionaryItem);
     }
 
     @Test
-    public void testCreateOrUpdateDictionary() throws Exception {
-        ResponseEntity<CldsDictionary> responseEntity = cldsDictionaryService.createOrUpdateDictionary("TestDictionary",
-            cldsDictionary);
-        CldsDictionary dictionary = responseEntity.getBody();
+    public void testCreateDictionaryFromString() {
+        String dictionaryName = "TestDefaultDictionary";
+        CldsDictionary dictionary = cldsDictionaryService.createDictionary(dictionaryName);
         assertNotNull(dictionary);
-        logger.info("CLDS Dictionary is:" + dictionary);
-        assertEquals("TestDictionary", dictionary.getDictionaryName());
+        logger.info("CLDS Default Dictionary is:" + dictionary);
+        assertEquals(dictionaryName, dictionary.getDictionaryName());
+    }
+
+    @Test
+    public void testCreateOrUpdateDictionaryUsedByFrontend() {
+        ResponseEntity<CldsDictionary> responseEntity =
+                cldsDictionaryService.createOrUpdateDictionary(DICTIONARY_NAME, null);
+        CldsDictionary dictionary1 = responseEntity.getBody();
+
+        responseEntity = cldsDictionaryService.createOrUpdateDictionary(DICTIONARY_NAME, cldsDictionary);
+        CldsDictionary dictionary2 = responseEntity.getBody();
+
+        responseEntity = cldsDictionaryService.createOrUpdateDictionary(DICTIONARY_NAME, new CldsDictionary());
+        CldsDictionary dictionary3 = responseEntity.getBody();
+
+        assertNotNull(dictionary1);
+        assertNotNull(dictionary2);
+        assertNotNull(dictionary3);
+        assertEquals(DICTIONARY_NAME, dictionary1.getDictionaryName());
+        assertEquals(DICTIONARY_NAME, dictionary2.getDictionaryName());
+        assertNotNull(dictionary3.getDictionaryName());
+        assertEquals(DICTIONARY_NAME, dictionary3.getDictionaryName());
     }
 
     @Test
-    public void testCreateOrUpdateDictionaryElements() throws Exception {
+    public void testCreateOrUpdateDictionaryElements() {
         cldsDictionaryItem = new CldsDictionaryItem();
         cldsDictionaryItem.setDictElementShortName("TestDictionaryItemShortName1");
         cldsDictionaryItem.setDictElementName("TestDictionaryItemName1");
@@ -135,7 +151,7 @@ public class CldsDictionaryServiceItCase {
         cldsDictionaryItem.setDictElementDesc("TestDictionaryItemDesc1");
 
         ResponseEntity<CldsDictionaryItem> responseEntity = cldsDictionaryService
-            .createOrUpdateDictionaryElements("TestDictionary", cldsDictionaryItem);
+                .createOrUpdateDictionaryElements(DICTIONARY_NAME, cldsDictionaryItem);
         CldsDictionaryItem dictionaryItem = responseEntity.getBody();
         assertNotNull(dictionaryItem);
         logger.info("CLDS Dictionary Item is:" + dictionaryItem);
@@ -143,7 +159,7 @@ public class CldsDictionaryServiceItCase {
     }
 
     @Test
-    public void testGetAllDictionaryNames() throws Exception {
+    public void testGetAllDictionaryNames() {
         ResponseEntity<List<CldsDictionary>> responseEntity = cldsDictionaryService.getAllDictionaryNames();
         List<CldsDictionary> dictionaries = responseEntity.getBody();
         assertNotNull(dictionaries);
@@ -151,11 +167,11 @@ public class CldsDictionaryServiceItCase {
     }
 
     @Test
-    public void testGetDictionaryElementsByName() throws Exception {
+    public void testGetDictionaryElementsByName() {
         ResponseEntity<List<CldsDictionaryItem>> responseEntity = cldsDictionaryService
-            .getDictionaryElementsByName("TestDictionary");
+                .getDictionaryElementsByName(DICTIONARY_NAME);
         List<CldsDictionaryItem> dictionaryItems = responseEntity.getBody();
         assertNotNull(dictionaryItems);
         logger.info("CLDS Dictionary Item LIst is:" + dictionaryItems);
     }
-}
+}
\ No newline at end of file
index c9350c6..3010fe5 100644 (file)
@@ -54,7 +54,7 @@ public class LoopToJsonTest {
     }
 
     private Loop getLoop(String name, String svgRepresentation, String blueprint, String globalPropertiesJson,
-        String dcaeId, String dcaeUrl, String dcaeBlueprintId) {
+            String dcaeId, String dcaeUrl, String dcaeBlueprintId) {
         Loop loop = new Loop(name, blueprint, svgRepresentation);
         loop.setGlobalPropertiesJson(new Gson().fromJson(globalPropertiesJson, JsonObject.class));
         loop.setLastComputedState(LoopState.DESIGN);
@@ -65,9 +65,9 @@ public class LoopToJsonTest {
     }
 
     private MicroServicePolicy getMicroServicePolicy(String name, String modelType, String jsonRepresentation,
-        String policyTosca, String jsonProperties, boolean shared) {
+            String policyTosca, String jsonProperties, boolean shared) {
         MicroServicePolicy microService = new MicroServicePolicy(name, modelType, policyTosca, shared,
-            gson.fromJson(jsonRepresentation, JsonObject.class), new HashSet<>());
+                gson.fromJson(jsonRepresentation, JsonObject.class), new HashSet<>());
         microService.setProperties(new Gson().fromJson(jsonProperties, JsonObject.class));
 
         return microService;
@@ -82,13 +82,13 @@ public class LoopToJsonTest {
     @Test
     public void loopGsonTest() throws IOException {
         Loop loopTest = getLoop("ControlLoopTest", "<xml></xml>", "yamlcontent", "{\"testname\":\"testvalue\"}",
-            "123456789", "https://dcaetest.org", "UUID-blueprint");
+                "123456789", "https://dcaetest.org", "UUID-blueprint");
         OperationalPolicy opPolicy = this.getOperationalPolicy(
-            ResourceFileUtil.getResourceAsString("tosca/operational-policy-properties.json"), "GuardOpPolicyTest");
+                ResourceFileUtil.getResourceAsString("tosca/operational-policy-properties.json"), "GuardOpPolicyTest");
         loopTest.addOperationalPolicy(opPolicy);
         MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "",
-            "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0",
-            "{\"param1\":\"value1\"}", true);
+                "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0",
+                "{\"param1\":\"value1\"}", true);
         loopTest.addMicroServicePolicy(microServicePolicy);
         LoopLog loopLog = getLoopLog(LogType.INFO, "test message", loopTest);
         loopTest.addLog(loopLog);
@@ -99,11 +99,11 @@ public class LoopToJsonTest {
         Loop loopTestDeserialized = JsonUtils.GSON_JPA_MODEL.fromJson(jsonSerialized, Loop.class);
         assertNotNull(loopTestDeserialized);
         assertThat(loopTestDeserialized).isEqualToIgnoringGivenFields(loopTest, "svgRepresentation", "blueprint",
-            "components");
+                "components");
         assertThat(loopTestDeserialized.getComponent("DCAE").getState())
-            .isEqualToComparingFieldByField(loopTest.getComponent("DCAE").getState());
-        assertThat(loopTestDeserialized.getComponent("POLICY").getState())
-            .isEqualToComparingFieldByField(loopTest.getComponent("POLICY").getState());
+                .isEqualToComparingFieldByField(loopTest.getComponent("DCAE").getState());
+        assertThat(loopTestDeserialized.getComponent("POLICY").getState()).isEqualToComparingOnlyGivenFields(
+                loopTest.getComponent("POLICY").getState(), "stateName", "description");
         // svg and blueprint not exposed so wont be deserialized
         assertThat(loopTestDeserialized.getBlueprint()).isEqualTo(null);
         assertThat(loopTestDeserialized.getSvgRepresentation()).isEqualTo(null);
@@ -112,22 +112,22 @@ public class LoopToJsonTest {
         assertThat(loopTestDeserialized.getMicroServicePolicies()).containsExactly(microServicePolicy);
         assertThat(loopTestDeserialized.getLoopLogs()).containsExactly(loopLog);
         assertThat((LoopLog) loopTestDeserialized.getLoopLogs().toArray()[0]).isEqualToIgnoringGivenFields(loopLog,
-            "loop");
+                "loop");
     }
 
     @Test
     public void createPoliciesPayloadPdpGroupTest() throws IOException {
         Loop loopTest = getLoop("ControlLoopTest", "<xml></xml>", "yamlcontent", "{\"testname\":\"testvalue\"}",
-            "123456789", "https://dcaetest.org", "UUID-blueprint");
+                "123456789", "https://dcaetest.org", "UUID-blueprint");
         OperationalPolicy opPolicy = this.getOperationalPolicy(
-            ResourceFileUtil.getResourceAsString("tosca/operational-policy-properties.json"), "GuardOpPolicyTest");
+                ResourceFileUtil.getResourceAsString("tosca/operational-policy-properties.json"), "GuardOpPolicyTest");
         loopTest.addOperationalPolicy(opPolicy);
         MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "",
-            "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0",
-            "{\"param1\":\"value1\"}", true);
+                "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0",
+                "{\"param1\":\"value1\"}", true);
         loopTest.addMicroServicePolicy(microServicePolicy);
 
         JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/pdp-group-policy-payload.json"),
-            PolicyComponent.createPoliciesPayloadPdpGroup(loopTest), false);
+                PolicyComponent.createPoliciesPayloadPdpGroup(loopTest), false);
     }
 }
index 8972e51..728b61c 100644 (file)
@@ -42,29 +42,29 @@ public class OperationalPolicyPayloadTest {
     @Test
     public void testOperationalPolicyPayloadConstruction() throws IOException {
         JsonObject jsonConfig = new GsonBuilder().create().fromJson(
-            ResourceFileUtil.getResourceAsString("tosca/operational-policy-properties.json"), JsonObject.class);
+                ResourceFileUtil.getResourceAsString("tosca/operational-policy-properties.json"), JsonObject.class);
         OperationalPolicy policy = new OperationalPolicy("testPolicy", null, jsonConfig);
 
         assertThat(policy.createPolicyPayloadYaml())
-            .isEqualTo(ResourceFileUtil.getResourceAsString("tosca/operational-policy-payload.yaml"));
+                .isEqualTo(ResourceFileUtil.getResourceAsString("tosca/operational-policy-payload.yaml"));
 
         assertThat(policy.createPolicyPayload())
-            .isEqualTo(ResourceFileUtil.getResourceAsString("tosca/operational-policy-payload.json"));
+                .isEqualTo(ResourceFileUtil.getResourceAsString("tosca/operational-policy-payload.json"));
     }
 
     @Test
     public void testLegacyOperationalPolicyPayloadConstruction() throws IOException {
         JsonObject jsonConfig = new GsonBuilder().create().fromJson(
-            ResourceFileUtil.getResourceAsString("tosca/operational-policy-properties.json"), JsonObject.class);
+                ResourceFileUtil.getResourceAsString("tosca/operational-policy-properties.json"), JsonObject.class);
         assertThat(LegacyOperationalPolicy.createPolicyPayloadYamlLegacy(jsonConfig.get("operational_policy")))
-            .isEqualTo(ResourceFileUtil.getResourceAsString("tosca/operational-policy-payload-legacy.yaml"));
+                .isEqualTo(ResourceFileUtil.getResourceAsString("tosca/operational-policy-payload-legacy.yaml"));
     }
 
     @Test
     public void testGuardPolicyEmptyPayloadConstruction() throws IOException {
         JsonObject jsonConfig = new GsonBuilder().create().fromJson(
-            ResourceFileUtil.getResourceAsString("tosca/operational-policy-no-guard-properties.json"),
-            JsonObject.class);
+                ResourceFileUtil.getResourceAsString("tosca/operational-policy-no-guard-properties.json"),
+                JsonObject.class);
         OperationalPolicy policy = new OperationalPolicy("testPolicy", null, jsonConfig);
         Map<String, String> guardsMap = policy.createGuardPolicyPayloads();
         assertThat(guardsMap).isEmpty();
@@ -74,15 +74,15 @@ public class OperationalPolicyPayloadTest {
     @Test
     public void testGuardPolicyPayloadConstruction() throws IOException {
         JsonObject jsonConfig = new GsonBuilder().create().fromJson(
-            ResourceFileUtil.getResourceAsString("tosca/operational-policy-properties.json"), JsonObject.class);
+                ResourceFileUtil.getResourceAsString("tosca/operational-policy-properties.json"), JsonObject.class);
         OperationalPolicy policy = new OperationalPolicy("testPolicy", null, jsonConfig);
 
         Map<String, String> guardsMap = policy.createGuardPolicyPayloads();
 
         JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/guard1-policy-payload.json"),
-            guardsMap.get("guard1"), false);
+                guardsMap.get("guard.minmax.new"), false);
 
         JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/guard2-policy-payload.json"),
-            guardsMap.get("guard2"), false);
+                guardsMap.get("guard.frequency.new"), false);
     }
 }
diff --git a/src/test/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilderTest.java b/src/test/java/org/onap/clamp/policy/operational/OperationalPolicyRepresentationBuilderTest.java
new file mode 100644 (file)
index 0000000..904525b
--- /dev/null
@@ -0,0 +1,52 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights
+ *                             reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.policy.operational;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonObject;
+
+import java.io.IOException;
+
+import org.junit.Test;
+import org.onap.clamp.clds.util.ResourceFileUtil;
+import org.skyscreamer.jsonassert.JSONAssert;
+
+public class OperationalPolicyRepresentationBuilderTest {
+
+    @Test
+    public void testOperationalPolicyPayloadConstruction() throws IOException {
+        JsonObject jsonModel = new GsonBuilder().create()
+                .fromJson(ResourceFileUtil.getResourceAsString("tosca/model-properties.json"), JsonObject.class);
+
+        JsonObject jsonSchema = OperationalPolicyRepresentationBuilder.generateOperationalPolicySchema(jsonModel);
+
+        assertThat(jsonSchema).isNotNull();
+
+        JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/operational-policy-json-schema.json"),
+                new GsonBuilder().create().toJson(jsonSchema), false);
+    }
+
+}
diff --git a/src/test/resources/clds/OperationalPolicyRepresentationBuilderTest.java b/src/test/resources/clds/OperationalPolicyRepresentationBuilderTest.java
new file mode 100644 (file)
index 0000000..904525b
--- /dev/null
@@ -0,0 +1,52 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights
+ *                             reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END============================================
+ * ===================================================================
+ *
+ */
+
+package org.onap.clamp.policy.operational;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonObject;
+
+import java.io.IOException;
+
+import org.junit.Test;
+import org.onap.clamp.clds.util.ResourceFileUtil;
+import org.skyscreamer.jsonassert.JSONAssert;
+
+public class OperationalPolicyRepresentationBuilderTest {
+
+    @Test
+    public void testOperationalPolicyPayloadConstruction() throws IOException {
+        JsonObject jsonModel = new GsonBuilder().create()
+                .fromJson(ResourceFileUtil.getResourceAsString("tosca/model-properties.json"), JsonObject.class);
+
+        JsonObject jsonSchema = OperationalPolicyRepresentationBuilder.generateOperationalPolicySchema(jsonModel);
+
+        assertThat(jsonSchema).isNotNull();
+
+        JSONAssert.assertEquals(ResourceFileUtil.getResourceAsString("tosca/operational-policy-json-schema.json"),
+                new GsonBuilder().create().toJson(jsonSchema), false);
+    }
+
+}
index 0381ab1..5ec9f46 100755 (executable)
@@ -43,7 +43,7 @@ parser.add_argument("--temp",     "-t", default=tempfile.mkdtemp(), type=str, he
 parser.add_argument("--proxy"         , type=str, help="Url of the  Act as a proxy. If not set, this script only uses the cache and will return a 404 if files aren't found")
 parser.add_argument("--port",     "-P", type=int, default="8081", help="Port on which the proxy should listen to")
 parser.add_argument("--verbose",  "-v", type=bool, help="Print more information in case of error")
-parser.add_argument("--proxyaddress","-a", type=str, help="Address of this proxy, generally either third_party_proxy:8085 or localhost:8085 depending if started with docker-compose or not")
+parser.add_argument("--proxyaddress","-a", type=str, help="Address of this proxy, generally either third-party-proxy:8085 or localhost:8085 depending if started with docker-compose or not")
 options = parser.parse_args()
 
 
index 895f2b3..5694621 100644 (file)
@@ -55,7 +55,7 @@ UNLOCK TABLES;
 
 LOCK TABLES `hibernate_sequence` WRITE;
 /*!40000 ALTER TABLE `hibernate_sequence` DISABLE KEYS */;
-INSERT INTO `hibernate_sequence` VALUES (1);
+INSERT INTO `hibernate_sequence` VALUES (520);
 /*!40000 ALTER TABLE `hibernate_sequence` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -65,6 +65,525 @@ UNLOCK TABLES;
 
 LOCK TABLES `loop_logs` WRITE;
 /*!40000 ALTER TABLE `loop_logs` DISABLE KEYS */;
+INSERT INTO `loop_logs` VALUES (1,'CLAMP','2019-08-21 13:33:46','INFO','Micro Service policies UPDATED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (2,'CLAMP','2019-08-21 13:34:47','INFO','Operational and Guard policies UPDATED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (3,'CLAMP','2019-08-21 13:35:04','INFO','POLICY SUBMIT request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (4,'CLAMP','2019-08-21 13:35:08','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 404 : Not Found','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (5,'CLAMP','2019-08-21 13:35:09','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 404 : Not Found','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (6,'CLAMP','2019-08-21 13:35:11','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                             status - 404 : Not Found','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (7,'CLAMP','2019-08-21 13:35:14','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (8,'CLAMP','2019-08-21 13:35:16','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                             status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (9,'CLAMP','2019-08-21 13:35:19','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (10,'CLAMP','2019-08-21 13:35:24','INFO','PDP Group push ALL status -  : ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (11,'CLAMP','2019-08-21 13:35:24','ERROR','SUBMIT request failed, Error reported: org.apache.camel.http.common.HttpOperationFailedException: HTTP operation failed invoking https://10.12.6.112:32251/policy/pap/v1/pdps/policies?connectionTimeToLive=5000 with statusCode: 404 - Body: <html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n<title>Error 404 Not Found</title>\n</head>\n<body><h2>HTTP ERROR 404</h2>\n<p>Problem accessing /policy/pap/v1/pdps/policies. Reason:\n<pre>    Not Found</pre></p><hr><a href=\"http://eclipse.org/jetty\">Powered by Jetty:// 9.4.14.v20181114</a><hr/>\n\n</body>\n</html>\n','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (12,'CLAMP','2019-08-21 13:35:26','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (13,'CLAMP','2019-08-21 13:35:28','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                                Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (14,'CLAMP','2019-08-21 13:35:30','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                              status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (15,'CLAMP','2019-08-21 13:35:30','ERROR','Get Status request failed, Error reported: org.apache.camel.http.common.HttpOperationFailedException: HTTP operation failed invoking https://10.12.6.112:32251/policy/api/v1/policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/TCA_ejh5S_v1_0_ResourceInstanceName1_tca/versions/deployed?connectionTimeToLive=5000 with statusCode: 404 - Body: {\"code\":\"NOT_FOUND\",\"error\":\"could not find policy with ID TCA_ejh5S_v1_0_ResourceInstanceName1_tca and type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 deployed in any pdp group\",\"details\":[\"could not find policy with ID TCA_ejh5S_v1_0_ResourceInstanceName1_tca and type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 deployed in any pdp group\"]}','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (16,'CLAMP','2019-08-21 13:35:54','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (17,'CLAMP','2019-08-21 13:35:56','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                                Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (18,'CLAMP','2019-08-21 13:35:59','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                              status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (19,'CLAMP','2019-08-21 13:35:59','ERROR','Get Status request failed, Error reported: org.apache.camel.http.common.HttpOperationFailedException: HTTP operation failed invoking https://10.12.6.112:32251/policy/api/v1/policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/TCA_ejh5S_v1_0_ResourceInstanceName1_tca/versions/deployed?connectionTimeToLive=5000 with statusCode: 404 - Body: {\"code\":\"NOT_FOUND\",\"error\":\"could not find policy with ID TCA_ejh5S_v1_0_ResourceInstanceName1_tca and type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 deployed in any pdp group\",\"details\":[\"could not find policy with ID TCA_ejh5S_v1_0_ResourceInstanceName1_tca and type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 deployed in any pdp group\"]}','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (20,'CLAMP','2019-08-21 14:03:44','INFO','POLICY SUBMIT request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (21,'CLAMP','2019-08-21 14:03:48','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (22,'CLAMP','2019-08-21 14:03:49','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (23,'CLAMP','2019-08-21 14:03:51','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (24,'CLAMP','2019-08-21 14:03:53','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                           status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (25,'CLAMP','2019-08-21 14:03:55','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (26,'CLAMP','2019-08-21 14:03:57','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                           status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (27,'CLAMP','2019-08-21 14:04:02','INFO','PDP Group push ALL status -  : ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (28,'CLAMP','2019-08-21 14:04:02','ERROR','SUBMIT request failed, Error reported: org.apache.camel.http.common.HttpOperationFailedException: HTTP operation failed invoking https://10.12.6.1:31684/policy/pap/v1/pdps/policies?connectionTimeToLive=5000 with statusCode: 400 - Body: {\"errorDetails\":\"group defaultGroup subgroup xacml has no active PDPs\"}','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (29,'CLAMP','2019-08-21 14:04:05','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (30,'CLAMP','2019-08-21 14:04:06','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                                Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (31,'CLAMP','2019-08-21 14:04:09','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                              status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (32,'CLAMP','2019-08-21 14:04:09','ERROR','Get Status request failed, Error reported: org.apache.camel.http.common.HttpOperationFailedException: HTTP operation failed invoking https://10.12.6.112:32251/policy/api/v1/policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/TCA_ejh5S_v1_0_ResourceInstanceName1_tca/versions/deployed?connectionTimeToLive=5000 with statusCode: 404 - Body: {\"code\":\"NOT_FOUND\",\"error\":\"could not find policy with ID TCA_ejh5S_v1_0_ResourceInstanceName1_tca and type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 deployed in any pdp group\",\"details\":[\"could not find policy with ID TCA_ejh5S_v1_0_ResourceInstanceName1_tca and type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 deployed in any pdp group\"]}','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (33,'CLAMP','2019-08-21 14:13:39','INFO','Operational and Guard policies UPDATED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (34,'CLAMP','2019-08-21 14:13:43','INFO','POLICY SUBMIT request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (35,'CLAMP','2019-08-21 14:13:44','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (36,'CLAMP','2019-08-21 14:13:46','INFO','guard.minmax.new PDP Group removal status - 404 : Not Found','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (37,'CLAMP','2019-08-21 14:13:48','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (38,'CLAMP','2019-08-21 14:13:50','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (39,'CLAMP','2019-08-21 14:13:51','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                           status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (40,'CLAMP','2019-08-21 14:13:53','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (41,'CLAMP','2019-08-21 14:13:55','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                           status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (42,'CLAMP','2019-08-21 14:13:57','INFO','guard.minmax.new removal status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (43,'CLAMP','2019-08-21 14:13:58','INFO','guard.minmax.new creation status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (44,'CLAMP','2019-08-21 14:14:03','INFO','PDP Group push ALL status -  : ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (45,'CLAMP','2019-08-21 14:14:03','ERROR','SUBMIT request failed, Error reported: org.apache.camel.http.common.HttpOperationFailedException: HTTP operation failed invoking https://10.12.6.1:31684/policy/pap/v1/pdps/policies?connectionTimeToLive=5000 with statusCode: 400 - Body: {\"errorDetails\":\"group defaultGroup subgroup xacml has no active PDPs\"}','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (46,'CLAMP','2019-08-21 14:14:12','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (47,'CLAMP','2019-08-21 14:14:13','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                                Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (48,'CLAMP','2019-08-21 14:14:15','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                              status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (49,'CLAMP','2019-08-21 14:14:15','ERROR','Get Status request failed, Error reported: org.apache.camel.http.common.HttpOperationFailedException: HTTP operation failed invoking https://10.12.6.112:32251/policy/api/v1/policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/TCA_ejh5S_v1_0_ResourceInstanceName1_tca/versions/deployed?connectionTimeToLive=5000 with statusCode: 404 - Body: {\"code\":\"NOT_FOUND\",\"error\":\"could not find policy with ID TCA_ejh5S_v1_0_ResourceInstanceName1_tca and type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 deployed in any pdp group\",\"details\":[\"could not find policy with ID TCA_ejh5S_v1_0_ResourceInstanceName1_tca and type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 deployed in any pdp group\"]}','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (50,'CLAMP','2019-08-21 15:18:52','INFO','POLICY SUBMIT request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (51,'CLAMP','2019-08-21 15:18:56','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (52,'CLAMP','2019-08-21 15:18:58','INFO','guard.minmax.new PDP Group removal status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (53,'CLAMP','2019-08-21 15:19:00','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (54,'CLAMP','2019-08-21 15:19:02','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (55,'CLAMP','2019-08-21 15:19:05','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                           status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (56,'CLAMP','2019-08-21 15:19:07','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (57,'CLAMP','2019-08-21 15:19:11','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                           status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (58,'CLAMP','2019-08-21 15:19:13','INFO','guard.minmax.new removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (59,'CLAMP','2019-08-21 15:19:15','INFO','guard.minmax.new creation status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (60,'CLAMP','2019-08-21 15:19:20','INFO','PDP Group push ALL status -  : ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (61,'CLAMP','2019-08-21 15:19:20','ERROR','SUBMIT request failed, Error reported: org.apache.camel.http.common.HttpOperationFailedException: HTTP operation failed invoking https://10.12.6.1:31684/policy/pap/v1/pdps/policies?connectionTimeToLive=5000 with statusCode: 400 - Body: {\"errorDetails\":\"group defaultGroup subgroup xacml has no active PDPs\"}','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (62,'CLAMP','2019-08-21 15:19:27','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (63,'CLAMP','2019-08-21 15:19:29','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                                Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (64,'CLAMP','2019-08-21 15:19:31','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                              status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (65,'CLAMP','2019-08-21 15:19:31','ERROR','Get Status request failed, Error reported: org.apache.camel.http.common.HttpOperationFailedException: HTTP operation failed invoking https://10.12.6.112:32251/policy/api/v1/policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/TCA_ejh5S_v1_0_ResourceInstanceName1_tca/versions/deployed?connectionTimeToLive=5000 with statusCode: 404 - Body: {\"code\":\"NOT_FOUND\",\"error\":\"could not find policy with ID TCA_ejh5S_v1_0_ResourceInstanceName1_tca and type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 deployed in any pdp group\",\"details\":[\"could not find policy with ID TCA_ejh5S_v1_0_ResourceInstanceName1_tca and type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 deployed in any pdp group\"]}','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (66,'CLAMP','2019-08-21 15:25:38','INFO','POLICY SUBMIT request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (67,'POLICY','2019-08-21 15:25:42','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (68,'POLICY','2019-08-21 15:25:44','INFO','guard.minmax.new PDP Group removal status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (69,'POLICY','2019-08-21 15:25:45','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (70,'POLICY','2019-08-21 15:25:47','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                           status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (71,'POLICY','2019-08-21 15:25:50','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                          status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (72,'POLICY','2019-08-21 15:25:52','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                           status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (73,'POLICY','2019-08-21 15:25:54','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                          status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (74,'POLICY','2019-08-21 15:25:56','INFO','guard.minmax.new removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (75,'POLICY','2019-08-21 15:25:58','INFO','guard.minmax.new creation status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (76,'POLICY','2019-08-21 15:26:04','INFO','PDP Group push ALL status -  : ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (77,'CLAMP','2019-08-21 15:26:04','ERROR','SUBMIT request failed, Error reported: org.apache.camel.http.common.HttpOperationFailedException: HTTP operation failed invoking https://10.12.6.1:31684/policy/pap/v1/pdps/policies?connectionTimeToLive=5000 with statusCode: 400 - Body: {\"errorDetails\":\"group defaultGroup subgroup xacml has no active PDPs\"}','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (78,'CLAMP','2019-08-21 15:26:06','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (79,'POLICY','2019-08-21 15:26:08','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                               Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (80,'POLICY','2019-08-21 15:26:10','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                             status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (81,'CLAMP','2019-08-21 15:26:10','ERROR','Get Status request failed, Error reported: org.apache.camel.http.common.HttpOperationFailedException: HTTP operation failed invoking https://10.12.6.112:32251/policy/api/v1/policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/TCA_ejh5S_v1_0_ResourceInstanceName1_tca/versions/deployed?connectionTimeToLive=5000 with statusCode: 404 - Body: {\"code\":\"NOT_FOUND\",\"error\":\"could not find policy with ID TCA_ejh5S_v1_0_ResourceInstanceName1_tca and type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 deployed in any pdp group\",\"details\":[\"could not find policy with ID TCA_ejh5S_v1_0_ResourceInstanceName1_tca and type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 deployed in any pdp group\"]}','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (82,'CLAMP','2019-08-22 01:54:37','INFO','POLICY SUBMIT request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (83,'POLICY','2019-08-22 01:54:40','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 404 : Not Found','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (84,'POLICY','2019-08-22 01:54:41','INFO','guard.minmax.new PDP Group removal status - 404 : Not Found','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (85,'POLICY','2019-08-22 01:54:43','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 404 : Not Found','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (86,'POLICY','2019-08-22 01:54:46','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                           status - 404 : Not Found','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (87,'POLICY','2019-08-22 01:54:48','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                          status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (88,'POLICY','2019-08-22 01:54:50','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                           status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (89,'POLICY','2019-08-22 01:54:52','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                          status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (90,'POLICY','2019-08-22 01:54:54','INFO','guard.minmax.new removal status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (91,'POLICY','2019-08-22 01:54:55','INFO','guard.minmax.new creation status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (92,'POLICY','2019-08-22 01:55:00','INFO','PDP Group push ALL status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (93,'CLAMP','2019-08-22 01:55:00','INFO','SUBMIT request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (94,'CLAMP','2019-08-22 01:55:24','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (95,'POLICY','2019-08-22 01:55:25','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                               Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (96,'POLICY','2019-08-22 01:55:28','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                             status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (97,'POLICY','2019-08-22 01:55:30','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                               Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (98,'POLICY','2019-08-22 01:55:32','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                             status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (99,'POLICY','2019-08-22 01:55:34','INFO','guard.minmax.new GET\n                                               Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (100,'POLICY','2019-08-22 01:55:36','INFO','guard.minmax.new GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (101,'POLICY','2019-08-22 01:55:36','INFO','Policy state set to: SENT_AND_DEPLOYED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (102,'DCAE','2019-08-22 01:55:36','INFO','DCAE state set to: BLUEPRINT_DEPLOYED - message: ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (103,'CLAMP','2019-08-22 01:55:37','INFO','New loop state is: SUBMITTED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (104,'CLAMP','2019-08-22 01:55:37','INFO','Get Status request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (105,'CLAMP','2019-08-22 02:16:54','INFO','POLICY SUBMIT request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (106,'POLICY','2019-08-22 02:16:56','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (107,'POLICY','2019-08-22 02:16:58','INFO','guard.minmax.new PDP Group removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (108,'POLICY','2019-08-22 02:17:00','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (109,'POLICY','2019-08-22 02:17:02','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                          status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (110,'POLICY','2019-08-22 02:17:04','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                         status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (111,'POLICY','2019-08-22 02:17:07','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                          status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (112,'POLICY','2019-08-22 02:17:09','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                         status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (113,'POLICY','2019-08-22 02:17:11','INFO','guard.minmax.new removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (114,'POLICY','2019-08-22 02:17:13','INFO','guard.minmax.new creation status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (115,'POLICY','2019-08-22 02:17:18','INFO','PDP Group push ALL status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (116,'CLAMP','2019-08-22 02:17:18','INFO','SUBMIT request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (117,'CLAMP','2019-08-22 02:17:22','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (118,'POLICY','2019-08-22 02:17:24','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (119,'POLICY','2019-08-22 02:17:26','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (120,'POLICY','2019-08-22 02:17:28','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (121,'POLICY','2019-08-22 02:17:30','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (122,'POLICY','2019-08-22 02:17:31','INFO','guard.minmax.new GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (123,'POLICY','2019-08-22 02:17:34','INFO','guard.minmax.new GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (124,'POLICY','2019-08-22 02:17:34','INFO','Policy state set to: SENT_AND_DEPLOYED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (125,'DCAE','2019-08-22 02:17:34','INFO','DCAE state set to: BLUEPRINT_DEPLOYED - message: ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (126,'CLAMP','2019-08-22 02:17:35','INFO','New loop state is: SUBMITTED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (127,'CLAMP','2019-08-22 02:17:35','INFO','Get Status request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (128,'CLAMP','2019-08-22 02:31:15','INFO','POLICY SUBMIT request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (129,'POLICY','2019-08-22 02:31:17','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (130,'POLICY','2019-08-22 02:31:19','INFO','guard.minmax.new PDP Group removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (131,'POLICY','2019-08-22 02:31:20','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (132,'POLICY','2019-08-22 02:31:22','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                          status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (133,'POLICY','2019-08-22 02:31:24','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                         status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (134,'POLICY','2019-08-22 02:31:26','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                          status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (135,'POLICY','2019-08-22 02:31:28','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                         status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (136,'POLICY','2019-08-22 02:31:30','INFO','guard.minmax.new removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (137,'POLICY','2019-08-22 02:31:32','INFO','guard.minmax.new creation status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (138,'POLICY','2019-08-22 02:31:36','INFO','PDP Group push ALL status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (139,'CLAMP','2019-08-22 02:31:37','INFO','SUBMIT request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (140,'CLAMP','2019-08-22 02:31:41','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (141,'POLICY','2019-08-22 02:31:44','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (142,'POLICY','2019-08-22 02:31:46','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (143,'POLICY','2019-08-22 02:31:48','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (144,'POLICY','2019-08-22 02:31:50','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (145,'POLICY','2019-08-22 02:31:52','INFO','guard.minmax.new GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (146,'POLICY','2019-08-22 02:31:54','INFO','guard.minmax.new GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (147,'POLICY','2019-08-22 02:32:22','INFO','Policy state set to: SENT_AND_DEPLOYED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (148,'DCAE','2019-08-22 02:32:22','INFO','DCAE state set to: BLUEPRINT_DEPLOYED - message: ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (149,'CLAMP','2019-08-22 02:32:22','INFO','New loop state is: SUBMITTED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (150,'CLAMP','2019-08-22 02:32:22','INFO','Get Status request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (151,'CLAMP','2019-08-22 02:58:14','INFO','POLICY SUBMIT request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (152,'POLICY','2019-08-22 02:58:18','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (153,'POLICY','2019-08-22 02:58:20','INFO','guard.minmax.new PDP Group removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (154,'POLICY','2019-08-22 02:58:21','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (155,'POLICY','2019-08-22 02:58:23','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                          status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (156,'POLICY','2019-08-22 02:58:26','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                         status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (157,'POLICY','2019-08-22 02:58:29','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                          status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (158,'POLICY','2019-08-22 02:58:30','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                         status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (159,'POLICY','2019-08-22 02:58:32','INFO','guard.minmax.new removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (160,'POLICY','2019-08-22 02:58:34','INFO','guard.minmax.new creation status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (161,'POLICY','2019-08-22 02:58:39','INFO','PDP Group push ALL status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (162,'CLAMP','2019-08-22 02:58:39','INFO','SUBMIT request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (163,'CLAMP','2019-08-22 02:58:42','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (164,'POLICY','2019-08-22 02:58:44','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (165,'POLICY','2019-08-22 02:58:46','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (166,'POLICY','2019-08-22 02:58:48','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (167,'POLICY','2019-08-22 02:58:50','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (168,'POLICY','2019-08-22 02:58:51','INFO','guard.minmax.new GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (169,'POLICY','2019-08-22 02:58:53','INFO','guard.minmax.new GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (170,'POLICY','2019-08-22 02:58:53','INFO','Policy state set to: SENT_AND_DEPLOYED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (171,'DCAE','2019-08-22 02:58:53','INFO','DCAE state set to: BLUEPRINT_DEPLOYED - message: ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (172,'CLAMP','2019-08-22 02:58:54','INFO','New loop state is: SUBMITTED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (173,'CLAMP','2019-08-22 02:58:54','INFO','Get Status request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (174,'CLAMP','2019-08-22 05:25:59','INFO','POLICY SUBMIT request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (175,'POLICY','2019-08-22 05:26:03','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (176,'POLICY','2019-08-22 05:26:05','INFO','guard.minmax.new PDP Group removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (177,'POLICY','2019-08-22 05:26:07','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (178,'POLICY','2019-08-22 05:26:09','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                          status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (179,'POLICY','2019-08-22 05:26:12','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                         status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (180,'POLICY','2019-08-22 05:26:14','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                          status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (181,'POLICY','2019-08-22 05:26:15','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                         status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (182,'POLICY','2019-08-22 05:26:17','INFO','guard.minmax.new removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (183,'POLICY','2019-08-22 05:26:19','INFO','guard.minmax.new creation status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (184,'POLICY','2019-08-22 05:26:24','INFO','PDP Group push ALL status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (185,'CLAMP','2019-08-22 05:26:24','INFO','SUBMIT request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (186,'CLAMP','2019-08-22 05:26:26','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (187,'POLICY','2019-08-22 05:26:28','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (188,'POLICY','2019-08-22 05:26:30','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (189,'POLICY','2019-08-22 05:26:33','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (190,'POLICY','2019-08-22 05:26:35','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (191,'POLICY','2019-08-22 05:26:37','INFO','guard.minmax.new GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (192,'POLICY','2019-08-22 05:26:39','INFO','guard.minmax.new GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (193,'POLICY','2019-08-22 05:26:40','INFO','Policy state set to: SENT_AND_DEPLOYED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (194,'DCAE','2019-08-22 05:26:40','INFO','DCAE state set to: BLUEPRINT_DEPLOYED - message: ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (195,'CLAMP','2019-08-22 05:26:40','INFO','New loop state is: SUBMITTED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (196,'CLAMP','2019-08-22 05:26:40','INFO','Get Status request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (197,'CLAMP','2019-08-22 05:31:26','INFO','POLICY SUBMIT request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (198,'POLICY','2019-08-22 05:31:31','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (199,'POLICY','2019-08-22 05:31:32','INFO','guard.minmax.new PDP Group removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (200,'POLICY','2019-08-22 05:31:34','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (201,'POLICY','2019-08-22 05:31:36','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                          status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (202,'POLICY','2019-08-22 05:31:39','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                         status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (203,'POLICY','2019-08-22 05:31:40','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                          status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (204,'POLICY','2019-08-22 05:31:42','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                         status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (205,'POLICY','2019-08-22 05:31:44','INFO','guard.minmax.new removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (206,'POLICY','2019-08-22 05:31:46','INFO','guard.minmax.new creation status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (207,'POLICY','2019-08-22 05:31:51','INFO','PDP Group push ALL status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (208,'CLAMP','2019-08-22 05:31:51','INFO','SUBMIT request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (209,'CLAMP','2019-08-22 05:31:54','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (210,'POLICY','2019-08-22 05:31:56','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (211,'POLICY','2019-08-22 05:31:57','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (212,'POLICY','2019-08-22 05:31:59','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (213,'POLICY','2019-08-22 05:32:01','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (214,'POLICY','2019-08-22 05:32:04','INFO','guard.minmax.new GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (215,'POLICY','2019-08-22 05:32:06','INFO','guard.minmax.new GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (216,'POLICY','2019-08-22 05:32:06','INFO','Policy state set to: SENT_AND_DEPLOYED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (217,'DCAE','2019-08-22 05:32:06','INFO','DCAE state set to: BLUEPRINT_DEPLOYED - message: ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (218,'CLAMP','2019-08-22 05:32:06','INFO','New loop state is: SUBMITTED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (219,'CLAMP','2019-08-22 05:32:06','INFO','Get Status request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (220,'CLAMP','2019-08-22 05:48:50','INFO','POLICY SUBMIT request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (221,'POLICY','2019-08-22 05:48:52','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (222,'POLICY','2019-08-22 05:48:54','INFO','guard.minmax.new PDP Group removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (223,'POLICY','2019-08-22 05:48:55','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (224,'POLICY','2019-08-22 05:48:57','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                          status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (225,'POLICY','2019-08-22 05:48:59','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                         status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (226,'POLICY','2019-08-22 05:49:01','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                          status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (227,'POLICY','2019-08-22 05:49:04','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                         status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (228,'POLICY','2019-08-22 05:49:06','INFO','guard.minmax.new removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (229,'POLICY','2019-08-22 05:49:08','INFO','guard.minmax.new creation status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (230,'POLICY','2019-08-22 05:49:13','INFO','PDP Group push ALL status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (231,'CLAMP','2019-08-22 05:49:13','INFO','SUBMIT request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (232,'CLAMP','2019-08-22 05:50:27','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (233,'POLICY','2019-08-22 05:50:29','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (234,'POLICY','2019-08-22 05:50:31','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (235,'POLICY','2019-08-22 05:50:33','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (236,'POLICY','2019-08-22 05:50:35','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (237,'POLICY','2019-08-22 05:50:37','INFO','guard.minmax.new GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (238,'POLICY','2019-08-22 05:50:39','INFO','guard.minmax.new GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (239,'CLAMP','2019-08-22 05:52:27','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (240,'POLICY','2019-08-22 05:52:29','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (241,'POLICY','2019-08-22 05:52:31','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (242,'POLICY','2019-08-22 05:52:32','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (243,'POLICY','2019-08-22 05:52:34','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (244,'POLICY','2019-08-22 05:52:36','INFO','guard.minmax.new GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (245,'POLICY','2019-08-22 05:52:38','INFO','guard.minmax.new GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (246,'CLAMP','2019-08-22 05:54:27','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (247,'POLICY','2019-08-22 05:54:29','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (248,'POLICY','2019-08-22 05:54:31','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (249,'POLICY','2019-08-22 05:54:33','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (250,'POLICY','2019-08-22 05:54:35','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (251,'POLICY','2019-08-22 05:54:37','INFO','guard.minmax.new GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (252,'POLICY','2019-08-22 05:54:39','INFO','guard.minmax.new GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (253,'CLAMP','2019-08-22 05:56:27','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (254,'POLICY','2019-08-22 05:56:30','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (255,'POLICY','2019-08-22 05:56:31','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (256,'POLICY','2019-08-22 05:56:33','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (257,'POLICY','2019-08-22 05:56:35','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (258,'POLICY','2019-08-22 05:56:37','INFO','guard.minmax.new GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (259,'POLICY','2019-08-22 05:56:39','INFO','guard.minmax.new GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (260,'CLAMP','2019-08-22 05:58:27','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (261,'POLICY','2019-08-22 05:58:30','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (262,'POLICY','2019-08-22 05:58:32','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (263,'POLICY','2019-08-22 05:58:34','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (264,'POLICY','2019-08-22 05:58:36','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (265,'POLICY','2019-08-22 05:58:38','INFO','guard.minmax.new GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (266,'POLICY','2019-08-22 05:58:40','INFO','guard.minmax.new GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (267,'CLAMP','2019-08-22 06:00:27','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (268,'POLICY','2019-08-22 06:00:29','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (269,'POLICY','2019-08-22 06:00:31','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (270,'POLICY','2019-08-22 06:00:33','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (271,'POLICY','2019-08-22 06:00:34','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (272,'POLICY','2019-08-22 06:00:36','INFO','guard.minmax.new GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (273,'POLICY','2019-08-22 06:00:38','INFO','guard.minmax.new GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (274,'CLAMP','2019-08-22 06:02:27','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (275,'POLICY','2019-08-22 06:02:29','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (276,'POLICY','2019-08-22 06:02:31','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (277,'POLICY','2019-08-22 06:02:34','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (278,'POLICY','2019-08-22 06:02:36','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (279,'POLICY','2019-08-22 06:02:38','INFO','guard.minmax.new GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (280,'POLICY','2019-08-22 06:02:40','INFO','guard.minmax.new GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (281,'POLICY','2019-08-22 06:02:57','INFO','Policy state set to: SENT_AND_DEPLOYED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (282,'DCAE','2019-08-22 06:02:57','INFO','DCAE state set to: BLUEPRINT_DEPLOYED - message: ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (283,'CLAMP','2019-08-22 06:02:57','INFO','New loop state is: SUBMITTED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (284,'CLAMP','2019-08-22 06:02:58','INFO','Get Status request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (285,'POLICY','2019-08-22 06:03:00','INFO','Policy state set to: SENT_AND_DEPLOYED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (286,'DCAE','2019-08-22 06:03:00','INFO','DCAE state set to: BLUEPRINT_DEPLOYED - message: ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (287,'CLAMP','2019-08-22 06:03:00','INFO','New loop state is: SUBMITTED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (288,'CLAMP','2019-08-22 06:03:00','INFO','Get Status request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (289,'CLAMP','2019-08-22 06:04:27','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (290,'POLICY','2019-08-22 06:04:29','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (291,'POLICY','2019-08-22 06:04:31','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (292,'POLICY','2019-08-22 06:04:33','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (293,'POLICY','2019-08-22 06:04:35','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (294,'POLICY','2019-08-22 06:04:37','INFO','guard.minmax.new GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (295,'POLICY','2019-08-22 06:04:37','INFO','Policy state set to: SENT_AND_DEPLOYED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (296,'DCAE','2019-08-22 06:04:37','INFO','DCAE state set to: BLUEPRINT_DEPLOYED - message: ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (297,'CLAMP','2019-08-22 06:04:38','INFO','New loop state is: SUBMITTED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (298,'CLAMP','2019-08-22 06:04:38','INFO','Get Status request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (299,'POLICY','2019-08-22 06:04:39','INFO','guard.minmax.new GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (300,'POLICY','2019-08-22 06:04:39','INFO','Policy state set to: SENT_AND_DEPLOYED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (301,'DCAE','2019-08-22 06:04:39','INFO','DCAE state set to: BLUEPRINT_DEPLOYED - message: ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (302,'CLAMP','2019-08-22 06:04:39','INFO','New loop state is: SUBMITTED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (303,'CLAMP','2019-08-22 06:04:39','INFO','Get Status request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (304,'POLICY','2019-08-22 06:04:43','INFO','Policy state set to: SENT_AND_DEPLOYED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (305,'DCAE','2019-08-22 06:04:44','INFO','DCAE state set to: BLUEPRINT_DEPLOYED - message: ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (306,'CLAMP','2019-08-22 06:04:44','INFO','New loop state is: SUBMITTED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (307,'CLAMP','2019-08-22 06:04:44','INFO','Get Status request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (308,'POLICY','2019-08-22 06:04:46','INFO','Policy state set to: SENT_AND_DEPLOYED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (309,'DCAE','2019-08-22 06:04:46','INFO','DCAE state set to: BLUEPRINT_DEPLOYED - message: ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (310,'CLAMP','2019-08-22 06:04:47','INFO','New loop state is: SUBMITTED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (311,'CLAMP','2019-08-22 06:04:47','INFO','Get Status request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (312,'POLICY','2019-08-22 06:04:49','INFO','Policy state set to: SENT_AND_DEPLOYED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (313,'DCAE','2019-08-22 06:04:49','INFO','DCAE state set to: BLUEPRINT_DEPLOYED - message: ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (314,'CLAMP','2019-08-22 06:04:49','INFO','New loop state is: SUBMITTED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (315,'CLAMP','2019-08-22 06:04:49','INFO','Get Status request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (316,'POLICY','2019-08-22 06:04:50','INFO','Policy state set to: SENT_AND_DEPLOYED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (317,'DCAE','2019-08-22 06:04:50','INFO','DCAE state set to: BLUEPRINT_DEPLOYED - message: ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (318,'CLAMP','2019-08-22 06:04:50','INFO','New loop state is: SUBMITTED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (319,'CLAMP','2019-08-22 06:04:50','INFO','Get Status request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (320,'CLAMP','2019-08-22 06:24:58','INFO','POLICY SUBMIT request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (321,'POLICY','2019-08-22 06:25:04','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (322,'POLICY','2019-08-22 06:25:06','INFO','guard.minmax.new PDP Group removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (323,'POLICY','2019-08-22 06:25:08','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (324,'POLICY','2019-08-22 06:25:09','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                          status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (325,'POLICY','2019-08-22 06:25:13','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                         status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (326,'POLICY','2019-08-22 06:25:14','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                          status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (327,'POLICY','2019-08-22 06:25:16','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                         status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (328,'POLICY','2019-08-22 06:25:19','INFO','guard.minmax.new removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (329,'POLICY','2019-08-22 06:25:21','INFO','guard.minmax.new creation status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (330,'POLICY','2019-08-22 06:25:25','INFO','PDP Group push ALL status -  : ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (331,'CLAMP','2019-08-22 06:25:26','ERROR','SUBMIT request failed, Error reported: org.apache.camel.http.common.HttpOperationFailedException: HTTP operation failed invoking https://10.12.6.1:31684/policy/pap/v1/pdps/policies?connectionTimeToLive=5000 with statusCode: 400 - Body: {\"errorDetails\":\"group defaultGroup subgroup xacml has no active PDPs\"}','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (332,'CLAMP','2019-08-22 06:25:27','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (333,'POLICY','2019-08-22 06:25:29','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (334,'POLICY','2019-08-22 06:25:31','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (335,'CLAMP','2019-08-22 06:25:31','ERROR','Get Status request failed, Error reported: org.apache.camel.http.common.HttpOperationFailedException: HTTP operation failed invoking https://10.12.6.112:32251/policy/api/v1/policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app/versions/1.0.0/policies/TCA_ejh5S_v1_0_ResourceInstanceName1_tca/versions/deployed?connectionTimeToLive=5000 with statusCode: 404 - Body: {\"code\":\"NOT_FOUND\",\"error\":\"could not find policy with ID TCA_ejh5S_v1_0_ResourceInstanceName1_tca and type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 deployed in any pdp group\",\"details\":[\"could not find policy with ID TCA_ejh5S_v1_0_ResourceInstanceName1_tca and type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 deployed in any pdp group\"]}','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (336,'CLAMP','2019-08-22 06:26:37','INFO','POLICY SUBMIT request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (337,'POLICY','2019-08-22 06:26:39','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (338,'POLICY','2019-08-22 06:26:41','INFO','guard.minmax.new PDP Group removal status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (339,'POLICY','2019-08-22 06:26:42','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (340,'POLICY','2019-08-22 06:26:45','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                          status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (341,'POLICY','2019-08-22 06:26:46','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                         status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (342,'POLICY','2019-08-22 06:26:49','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                          status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (343,'POLICY','2019-08-22 06:26:51','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                         status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (344,'POLICY','2019-08-22 06:26:53','INFO','guard.minmax.new removal status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (345,'POLICY','2019-08-22 06:26:55','INFO','guard.minmax.new creation status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (346,'POLICY','2019-08-22 06:26:59','INFO','PDP Group push ALL status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (347,'CLAMP','2019-08-22 06:27:00','INFO','SUBMIT request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (348,'CLAMP','2019-08-22 06:27:21','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (349,'POLICY','2019-08-22 06:27:23','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (350,'POLICY','2019-08-22 06:27:25','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (351,'POLICY','2019-08-22 06:27:27','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (352,'POLICY','2019-08-22 06:28:35','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (353,'CLAMP','2019-08-22 06:29:21','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (354,'POLICY','2019-08-22 06:29:23','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (355,'POLICY','2019-08-22 06:29:25','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (356,'POLICY','2019-08-22 06:29:27','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (357,'POLICY','2019-08-22 06:29:46','INFO','guard.minmax.new GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (358,'POLICY','2019-08-22 06:29:49','INFO','guard.minmax.new GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (359,'POLICY','2019-08-22 06:29:55','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (360,'POLICY','2019-08-22 06:29:58','INFO','Policy state set to: SENT_AND_DEPLOYED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (361,'DCAE','2019-08-22 06:29:59','INFO','DCAE state set to: BLUEPRINT_DEPLOYED - message: ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (362,'CLAMP','2019-08-22 06:29:59','INFO','New loop state is: SUBMITTED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (363,'CLAMP','2019-08-22 06:29:59','INFO','Get Status request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (364,'POLICY','2019-08-22 06:30:06','INFO','guard.minmax.new GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (365,'POLICY','2019-08-22 06:30:07','INFO','guard.minmax.new GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (366,'POLICY','2019-08-22 06:30:15','INFO','Policy state set to: SENT_AND_DEPLOYED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (367,'DCAE','2019-08-22 06:30:15','INFO','DCAE state set to: BLUEPRINT_DEPLOYED - message: ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (368,'CLAMP','2019-08-22 06:30:16','INFO','New loop state is: SUBMITTED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (369,'CLAMP','2019-08-22 06:30:16','INFO','Get Status request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (370,'CLAMP','2019-08-22 06:34:26','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (371,'POLICY','2019-08-22 06:34:28','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (372,'POLICY','2019-08-22 06:34:30','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (373,'POLICY','2019-08-22 06:34:32','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (374,'POLICY','2019-08-22 06:34:44','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (375,'POLICY','2019-08-22 06:34:50','INFO','guard.minmax.new GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (376,'POLICY','2019-08-22 06:34:52','INFO','guard.minmax.new GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (377,'CLAMP','2019-08-22 06:36:26','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (378,'POLICY','2019-08-22 06:36:28','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (379,'POLICY','2019-08-22 06:36:30','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (380,'POLICY','2019-08-22 06:36:32','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (381,'POLICY','2019-08-22 06:36:37','INFO','Policy state set to: SENT_AND_DEPLOYED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (382,'DCAE','2019-08-22 06:36:37','INFO','DCAE state set to: BLUEPRINT_DEPLOYED - message: ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (383,'CLAMP','2019-08-22 06:36:38','INFO','New loop state is: SUBMITTED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (384,'CLAMP','2019-08-22 06:36:38','INFO','Get Status request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (385,'POLICY','2019-08-22 06:36:45','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (386,'POLICY','2019-08-22 06:36:51','INFO','guard.minmax.new GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (387,'POLICY','2019-08-22 06:36:53','INFO','guard.minmax.new GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (388,'POLICY','2019-08-22 06:36:56','INFO','Policy state set to: SENT_AND_DEPLOYED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (389,'DCAE','2019-08-22 06:36:56','INFO','DCAE state set to: BLUEPRINT_DEPLOYED - message: ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (390,'CLAMP','2019-08-22 06:36:57','INFO','New loop state is: SUBMITTED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (391,'CLAMP','2019-08-22 06:36:57','INFO','Get Status request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (392,'CLAMP','2019-08-23 06:09:13','INFO','POLICY SUBMIT request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (393,'POLICY','2019-08-23 06:09:17','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 404 : Not Found','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (394,'POLICY','2019-08-23 06:09:19','INFO','guard.minmax.new PDP Group removal status - 404 : Not Found','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (395,'POLICY','2019-08-23 06:09:20','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca PDP Group removal status - 404 : Not Found','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (396,'POLICY','2019-08-23 06:09:23','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                          status - 404 : Not Found','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (397,'POLICY','2019-08-23 06:09:26','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                         status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (398,'POLICY','2019-08-23 06:09:28','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca removal\n                                          status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (399,'POLICY','2019-08-23 06:09:30','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca creation\n                                         status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (400,'POLICY','2019-08-23 06:09:32','INFO','guard.minmax.new removal status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (401,'POLICY','2019-08-23 06:09:33','INFO','guard.minmax.new creation status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (402,'POLICY','2019-08-23 06:09:38','INFO','PDP Group push ALL status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (403,'CLAMP','2019-08-23 06:09:38','INFO','SUBMIT request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (404,'CLAMP','2019-08-23 06:09:42','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (405,'POLICY','2019-08-23 06:09:44','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (406,'POLICY','2019-08-23 06:09:46','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (407,'POLICY','2019-08-23 06:09:48','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (408,'POLICY','2019-08-23 06:09:49','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (409,'POLICY','2019-08-23 06:09:51','INFO','guard.minmax.new GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (410,'POLICY','2019-08-23 06:09:53','INFO','guard.minmax.new GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (411,'POLICY','2019-08-23 06:09:53','INFO','Policy state set to: SENT_AND_DEPLOYED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (412,'DCAE','2019-08-23 06:09:53','INFO','DCAE state set to: BLUEPRINT_DEPLOYED - message: ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (413,'CLAMP','2019-08-23 06:09:53','INFO','New loop state is: SUBMITTED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (414,'CLAMP','2019-08-23 06:09:54','INFO','Get Status request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (415,'CLAMP','2019-08-23 06:15:57','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (416,'POLICY','2019-08-23 06:16:00','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (417,'POLICY','2019-08-23 06:16:02','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (418,'POLICY','2019-08-23 06:16:04','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (419,'POLICY','2019-08-23 06:16:06','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (420,'POLICY','2019-08-23 06:16:08','INFO','guard.minmax.new GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (421,'POLICY','2019-08-23 06:16:10','INFO','guard.minmax.new GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (422,'POLICY','2019-08-23 06:16:10','INFO','Policy state set to: SENT_AND_DEPLOYED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (423,'DCAE','2019-08-23 06:16:10','INFO','DCAE state set to: BLUEPRINT_DEPLOYED - message: ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (424,'CLAMP','2019-08-23 06:16:10','INFO','New loop state is: SUBMITTED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (425,'CLAMP','2019-08-23 06:16:10','INFO','Get Status request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (426,'CLAMP','2019-08-23 06:17:13','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (427,'POLICY','2019-08-23 06:17:15','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (428,'POLICY','2019-08-23 06:17:17','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (429,'POLICY','2019-08-23 06:17:19','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (430,'POLICY','2019-08-23 06:17:21','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (431,'POLICY','2019-08-23 06:17:23','INFO','guard.minmax.new GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (432,'POLICY','2019-08-23 06:17:24','INFO','guard.minmax.new GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (433,'POLICY','2019-08-23 06:17:25','INFO','Policy state set to: SENT_AND_DEPLOYED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (434,'DCAE','2019-08-23 06:17:25','INFO','DCAE state set to: BLUEPRINT_DEPLOYED - message: ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (435,'CLAMP','2019-08-23 06:17:25','INFO','New loop state is: SUBMITTED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (436,'CLAMP','2019-08-23 06:17:25','INFO','Get Status request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (437,'CLAMP','2019-08-23 06:17:56','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (438,'POLICY','2019-08-23 06:17:58','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (439,'POLICY','2019-08-23 06:17:59','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (440,'POLICY','2019-08-23 06:18:01','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (441,'POLICY','2019-08-23 06:18:03','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (442,'POLICY','2019-08-23 06:18:05','INFO','guard.minmax.new GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (443,'POLICY','2019-08-23 06:18:07','INFO','guard.minmax.new GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (444,'POLICY','2019-08-23 06:18:07','INFO','Policy state set to: SENT_AND_DEPLOYED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (445,'DCAE','2019-08-23 06:18:07','INFO','DCAE state set to: BLUEPRINT_DEPLOYED - message: ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (446,'CLAMP','2019-08-23 06:18:08','INFO','New loop state is: SUBMITTED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (447,'CLAMP','2019-08-23 06:18:08','INFO','Get Status request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (448,'CLAMP','2019-08-23 07:00:34','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (449,'POLICY','2019-08-23 07:00:39','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (450,'POLICY','2019-08-23 07:00:41','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (451,'CLAMP','2019-08-23 07:02:35','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (452,'POLICY','2019-08-23 07:02:37','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (453,'POLICY','2019-08-23 07:02:39','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (454,'POLICY','2019-08-23 07:02:43','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (455,'POLICY','2019-08-23 07:02:45','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (456,'CLAMP','2019-08-23 07:04:34','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (457,'POLICY','2019-08-23 07:04:36','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (458,'POLICY','2019-08-23 07:04:39','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (459,'CLAMP','2019-08-23 07:06:35','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (460,'POLICY','2019-08-23 07:06:36','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (461,'POLICY','2019-08-23 07:06:38','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (462,'CLAMP','2019-08-23 07:08:34','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (463,'POLICY','2019-08-23 07:08:36','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (464,'POLICY','2019-08-23 07:08:38','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (465,'CLAMP','2019-08-23 07:10:34','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (466,'POLICY','2019-08-23 07:10:36','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (467,'POLICY','2019-08-23 07:10:38','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (468,'POLICY','2019-08-23 07:10:45','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (469,'POLICY','2019-08-23 07:10:46','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (470,'CLAMP','2019-08-23 07:12:34','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (471,'POLICY','2019-08-23 07:12:36','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (472,'POLICY','2019-08-23 07:12:38','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (473,'POLICY','2019-08-23 07:13:58','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status -  : ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (474,'POLICY','2019-08-23 07:13:58','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status -  : ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (475,'POLICY','2019-08-23 07:13:58','INFO','guard.minmax.new GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (476,'POLICY','2019-08-23 07:13:58','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status -  : ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (477,'POLICY','2019-08-23 07:13:58','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status -  : ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (478,'POLICY','2019-08-23 07:13:58','INFO','guard.minmax.new GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (479,'POLICY','2019-08-23 07:13:59','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (480,'POLICY','2019-08-23 07:14:01','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (481,'POLICY','2019-08-23 07:14:03','INFO','guard.minmax.new GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (482,'POLICY','2019-08-23 07:14:05','INFO','guard.minmax.new GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (483,'POLICY','2019-08-23 07:14:05','INFO','Policy state set to: SENT_AND_DEPLOYED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (484,'DCAE','2019-08-23 07:14:05','INFO','DCAE state set to: BLUEPRINT_DEPLOYED - message: ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (485,'CLAMP','2019-08-23 07:14:05','INFO','New loop state is: SUBMITTED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (486,'CLAMP','2019-08-23 07:14:05','INFO','Get Status request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (487,'CLAMP','2019-08-23 07:20:28','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (488,'POLICY','2019-08-23 07:20:32','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (489,'POLICY','2019-08-23 07:20:33','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (490,'POLICY','2019-08-23 07:20:35','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (491,'POLICY','2019-08-23 07:20:37','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (492,'POLICY','2019-08-23 07:20:39','INFO','guard.minmax.new GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (493,'POLICY','2019-08-23 07:20:41','INFO','guard.minmax.new GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (494,'POLICY','2019-08-23 07:20:41','INFO','Policy state set to: IN_ERROR','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (495,'DCAE','2019-08-23 07:20:41','INFO','DCAE state set to: BLUEPRINT_DEPLOYED - message: ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (496,'CLAMP','2019-08-23 07:20:41','INFO','New loop state is: SUBMITTED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (497,'CLAMP','2019-08-23 07:20:41','INFO','Get Status request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (498,'CLAMP','2019-08-23 07:27:46','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (499,'POLICY','2019-08-23 07:27:49','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (500,'POLICY','2019-08-23 07:27:50','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (501,'POLICY','2019-08-23 07:27:52','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (502,'POLICY','2019-08-23 07:27:54','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (503,'POLICY','2019-08-23 07:27:55','INFO','guard.minmax.new GET\n                                              Policy status - 400 : Bad Request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (504,'POLICY','2019-08-23 07:27:57','INFO','guard.minmax.new GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (505,'POLICY','2019-08-23 07:27:57','INFO','Policy state set to: IN_ERROR','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (506,'DCAE','2019-08-23 07:27:57','INFO','DCAE state set to: BLUEPRINT_DEPLOYED - message: ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (507,'CLAMP','2019-08-23 07:27:58','INFO','New loop state is: IN_ERROR','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (508,'CLAMP','2019-08-23 07:27:58','INFO','Get Status request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (509,'CLAMP','2019-08-23 08:28:55','INFO','GET STATUS request','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (510,'POLICY','2019-08-23 08:28:59','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (511,'POLICY','2019-08-23 08:29:01','INFO','TCA_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (512,'POLICY','2019-08-23 08:29:03','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (513,'POLICY','2019-08-23 08:29:04','INFO','OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (514,'POLICY','2019-08-23 08:29:06','INFO','guard.minmax.new GET\n                                              Policy status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (515,'POLICY','2019-08-23 08:29:08','INFO','guard.minmax.new GET Policy deployment\n                                            status - 200 : OK','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (516,'POLICY','2019-08-23 08:29:08','INFO','Policy state set to: SENT_AND_DEPLOYED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (517,'DCAE','2019-08-23 08:29:08','INFO','DCAE state set to: BLUEPRINT_DEPLOYED - message: ','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (518,'CLAMP','2019-08-23 08:29:09','INFO','New loop state is: SUBMITTED','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loop_logs` VALUES (519,'CLAMP','2019-08-23 08:29:09','INFO','Get Status request successfully executed','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
 /*!40000 ALTER TABLE `loop_logs` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -74,9 +593,9 @@ UNLOCK TABLES;
 
 LOCK TABLES `loops` WRITE;
 /*!40000 ALTER TABLE `loops` DISABLE KEYS */;
-INSERT INTO `loops` VALUES ('LOOP_iYTIP_v1_0_ResourceInstanceName1_tca','tosca_definitions_version: cloudify_dsl_1_3\nimports:\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\n- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\ninputs:\n  location_id:\n    type: string\n  service_id:\n    type: string\n  policy_id:\n    type: string\nnode_templates:\n  policy_0:\n    type: dcae.nodes.policy\n    properties:\n      policy_id: \n        get_input: policy_id\n        policy_type_id: onap.policy.monitoring.cdap.tca.hi.lo.app\n  cdap_host_host:\n    type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\n    properties:\n      location_id:\n        get_input: location_id\n      scn_override: cdap_broker.solutioning-central.dcae.onap.org\n    interfaces:\n      cloudify.interfaces.lifecycle: {\n        }\n  tca_tca:\n    type: dcae.nodes.MicroService.cdap\n    properties:\n      app_config:\n        appDescription: DCAE Analytics Threshold Crossing Alert Application\n        appName: dcae-tca\n        tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n        tcaVESAlertsTableName: TCAVESAlertsTable\n        tcaVESAlertsTableTTLSeconds: \'1728000\'\n        tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n        tcaVESMessageStatusTableTTLSeconds: \'86400\'\n        thresholdCalculatorFlowletInstances: \'2\'\n      app_preferences:\n        publisherContentType: application/json\n        publisherHostName: mrlocal-mtnjftle01.onap.org\n        publisherHostPort: \'3905\'\n        publisherMaxBatchSize: \'10\'\n        publisherMaxRecoveryQueueSize: \'100000\'\n        publisherPollingInterval: \'20000\'\n        publisherProtocol: https\n        publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\n        publisherUserName: test@tca.af.dcae.onap.org\n        publisherUserPassword: password\n        subscriberConsumerGroup: OpenDCAE-c12\n        subscriberConsumerId: c12\n        subscriberContentType: application/json\n        subscriberHostName: mrlocal-mtnjftle01.onap.org\n        subscriberHostPort: \'3905\'\n        subscriberMessageLimit: \'-1\'\n        subscriberPollingInterval: \'20000\'\n        subscriberProtocol: https\n        subscriberTimeoutMS: \'-1\'\n        subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\n        subscriberUserName: test@tca.af.dcae.onap.org\n        subscriberUserPassword: password\n        tca_policy: null\n      artifact_name: dcae-analytics-tca\n      artifact_version: 1.0.0\n      connections:\n        streams_publishes: [\n          ]\n        streams_subscribes: [\n          ]\n      jar_url: http://somejar\n      location_id:\n        get_input: location_id\n      namespace: cdap_tca_hi_lo\n      programs:\n      - program_id: TCAVESCollectorFlow\n        program_type: flows\n      - program_id: TCADMaaPMRSubscriberWorker\n        program_type: workers\n      - program_id: TCADMaaPMRPublisherWorker\n        program_type: workers\n      service_component_type: cdap_app_tca\n      service_id:\n        get_input: service_id\n      streamname: TCASubscriberOutputStream\n    relationships:\n    - target: topic0\n      type: dcae.relationships.subscribe_to_events\n    - target: topic1\n      type: dcae.relationships.publish_events\n    - target: cdap_host_host\n      type: dcae.relationships.component_contained_in\n    - target: policy_0\n      type: dcae.relationships.depends_on\n  topic0:\n    type: dcae.nodes.Topic\n    properties:\n      topic_name: \'\'\n  topic1:\n    type: dcae.nodes.Topic\n    properties:\n      topic_name: \'\'\n      \n','typeId-d2787a29-d52f-4b28-8006-6d51422fbf0f',NULL,NULL,'{\n  \"dcaeDeployParameters\": {\n    \"location_id\": \"\",\n    \"service_id\": \"\",\n    \"policy_id\": \"AUTO_GENERATED_POLICY_ID_AT_SUBMIT\"\n  }\n}','DESIGN','{\n  \"serviceDetails\": {\n    \"serviceType\": \"\",\n    \"namingPolicy\": \"\",\n    \"environmentContext\": \"General_Revenue-Bearing\",\n    \"serviceEcompNaming\": \"true\",\n    \"serviceRole\": \"\",\n    \"name\": \"vLoadBalancerMS\",\n    \"description\": \"vLBMS\",\n    \"invariantUUID\": \"ba4c03be-7859-4197-9c8b-415d0c1378aa\",\n    \"ecompGeneratedNaming\": \"true\",\n    \"category\": \"Network L4+\",\n    \"type\": \"Service\",\n    \"UUID\": \"7e8a3d64-1475-4928-b02d-2c27530b755f\",\n    \"instantiationType\": \"A-la-carte\"\n  },\n  \"resourceDetails\": {\n    \"CP\": {},\n    \"VL\": {},\n    \"VF\": {\n      \"LoadBalancerMS 0\": {\n        \"resourceVendor\": \"Test License\",\n        \"resourceVendorModelNumber\": \"\",\n        \"name\": \"LoadBalancerMS\",\n        \"description\": \"vLBMS\",\n        \"invariantUUID\": \"1a40cbb0-fbe1-492e-b204-39aba30f02e3\",\n        \"subcategory\": \"Load Balancer\",\n        \"category\": \"Application L4+\",\n        \"type\": \"VF\",\n        \"UUID\": \"8d7d126d-623f-4e7c-9a16-132bd89e814a\",\n        \"version\": \"1.0\",\n        \"resourceVendorRelease\": \"1.0\",\n        \"customizationUUID\": \"310ce108-c3b5-4c90-b262-4a11c70366a3\"\n      }\n    },\n    \"CR\": {},\n    \"VFC\": {},\n    \"PNF\": {},\n    \"Service\": {},\n    \"CVFC\": {},\n    \"Service Proxy\": {},\n    \"Configuration\": {},\n    \"AllottedResource\": {}\n  }\n}','<svg xmlns=\"http://www.w3.org/2000/svg\"><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"start-circle\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><circle fill=\"none\" r=\"17\" cx=\"17\" cy=\"41\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"Arrow-5d1d5c5b-ec45-40dd-aec2-e2fb370f0db4\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><line y2=\"41\" fill=\"none\" x1=\"34\" x2=\"153\" y1=\"41\"/><polygon fill=\"none\" points=\" 151 39 151 43 155 41\"/><polygon points=\" 151 39 151 43 155 41\" stroke=\"none\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"VES\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><rect fill=\"none\" x=\"157\" width=\"123\" y=\"1\" height=\"82\"/></g><g fill-opacity=\"0\" fill=\"rgb(0,0,0)\" text-rendering=\"optimizeQuality\" shape-rendering=\"geometricPrecision\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"0\" stroke-width=\"2\"><rect x=\"157\" width=\"123\" y=\"1\" height=\"82\" stroke=\"none\"/></g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><text x=\"206\" xml:space=\"preserve\" y=\"42\" stroke=\"none\">VES</text><line y2=\"83\" fill=\"none\" x1=\"177\" x2=\"177\" y1=\"1\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"Arrow-14d1c5b8-fd38-4c79-a7a9-8d2a3c1a4f42\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><line y2=\"41\" fill=\"none\" x1=\"280\" x2=\"399\" y1=\"41\"/><polygon fill=\"none\" points=\" 397 39 397 43 401 41\"/><polygon points=\" 397 39 397 43 401 41\" stroke=\"none\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"TCA_iYTIP_v1_0_ResourceInstanceName1_tca\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><rect fill=\"none\" x=\"403\" width=\"123\" y=\"1\" height=\"82\"/></g><g fill-opacity=\"0\" fill=\"rgb(0,0,0)\" text-rendering=\"optimizeQuality\" font-family=\"sans-serif\" shape-rendering=\"geometricPrecision\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"0\" stroke-width=\"2\"><rect x=\"403\" width=\"123\" y=\"1\" height=\"82\" stroke=\"none\"/></g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><text x=\"453\" xml:space=\"preserve\" y=\"42\" stroke=\"none\">TCA</text><line y2=\"61\" fill=\"none\" x1=\"403\" x2=\"526\" y1=\"61\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"Arrow-aaa47e20-ad94-4766-afd1-262f6c819217\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><line y2=\"41\" fill=\"none\" x1=\"526\" x2=\"645\" y1=\"41\"/><polygon fill=\"none\" points=\" 643 39 643 43 647 41\"/><polygon points=\" 643 39 643 43 647 41\" stroke=\"none\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"Policy\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><rect fill=\"none\" x=\"649\" width=\"123\" y=\"1\" height=\"82\"/></g><g fill-opacity=\"0\" fill=\"rgb(0,0,0)\" text-rendering=\"optimizeQuality\" font-family=\"sans-serif\" shape-rendering=\"geometricPrecision\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"0\" stroke-width=\"2\"><rect x=\"649\" width=\"123\" y=\"1\" height=\"82\" stroke=\"none\"/></g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><text x=\"693\" xml:space=\"preserve\" y=\"42\" stroke=\"none\">Policy</text><line y2=\"1\" fill=\"none\" x1=\"649\" x2=\"710\" y1=\"42\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"Arrow-b3165c6c-4dfe-4ba8-be5b-66b751d5c7f7\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><line y2=\"41\" fill=\"none\" x1=\"772\" x2=\"891\" y1=\"41\"/><polygon fill=\"none\" points=\" 889 39 889 43 893 41\"/><polygon points=\" 889 39 889 43 893 41\" stroke=\"none\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"stop-circle\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g text-rendering=\"optimizeQuality\" stroke-width=\"4\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><circle fill=\"none\" r=\"17\" cx=\"912\" cy=\"41\"/></g></g></g></svg>');
-INSERT INTO `loops` VALUES ('LOOP_iYTIP_v1_0_ResourceInstanceName1_tca_3','tosca_definitions_version: cloudify_dsl_1_3\nimports:\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\n- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\ninputs:\n  location_id:\n    type: string\n  service_id:\n    type: string\n  policy_id:\n    type: string\nnode_templates:\n  policy_0:\n    type: dcae.nodes.policy\n    properties:\n      policy_id: \n        get_input: policy_id\n        policy_type_id: onap.policy.monitoring.cdap.tca.hi.lo.app\n  cdap_host_host:\n    type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\n    properties:\n      location_id:\n        get_input: location_id\n      scn_override: cdap_broker.solutioning-central.dcae.onap.org\n    interfaces:\n      cloudify.interfaces.lifecycle: {\n        }\n  tca_tca:\n    type: dcae.nodes.MicroService.cdap\n    properties:\n      app_config:\n        appDescription: DCAE Analytics Threshold Crossing Alert Application\n        appName: dcae-tca\n        tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n        tcaVESAlertsTableName: TCAVESAlertsTable\n        tcaVESAlertsTableTTLSeconds: \'1728000\'\n        tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n        tcaVESMessageStatusTableTTLSeconds: \'86400\'\n        thresholdCalculatorFlowletInstances: \'2\'\n      app_preferences:\n        publisherContentType: application/json\n        publisherHostName: mrlocal-mtnjftle01.onap.org\n        publisherHostPort: \'3905\'\n        publisherMaxBatchSize: \'10\'\n        publisherMaxRecoveryQueueSize: \'100000\'\n        publisherPollingInterval: \'20000\'\n        publisherProtocol: https\n        publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\n        publisherUserName: test@tca.af.dcae.onap.org\n        publisherUserPassword: password\n        subscriberConsumerGroup: OpenDCAE-c12\n        subscriberConsumerId: c12\n        subscriberContentType: application/json\n        subscriberHostName: mrlocal-mtnjftle01.onap.org\n        subscriberHostPort: \'3905\'\n        subscriberMessageLimit: \'-1\'\n        subscriberPollingInterval: \'20000\'\n        subscriberProtocol: https\n        subscriberTimeoutMS: \'-1\'\n        subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\n        subscriberUserName: test@tca.af.dcae.onap.org\n        subscriberUserPassword: password\n        tca_policy: null\n      artifact_name: dcae-analytics-tca\n      artifact_version: 1.0.0\n      connections:\n        streams_publishes: [\n          ]\n        streams_subscribes: [\n          ]\n      jar_url: http://somejar\n      location_id:\n        get_input: location_id\n      namespace: cdap_tca_hi_lo\n      programs:\n      - program_id: TCAVESCollectorFlow\n        program_type: flows\n      - program_id: TCADMaaPMRSubscriberWorker\n        program_type: workers\n      - program_id: TCADMaaPMRPublisherWorker\n        program_type: workers\n      service_component_type: cdap_app_tca\n      service_id:\n        get_input: service_id\n      streamname: TCASubscriberOutputStream\n    relationships:\n    - target: topic0\n      type: dcae.relationships.subscribe_to_events\n    - target: topic1\n      type: dcae.relationships.publish_events\n    - target: cdap_host_host\n      type: dcae.relationships.component_contained_in\n    - target: policy_0\n      type: dcae.relationships.depends_on\n  topic0:\n    type: dcae.nodes.Topic\n    properties:\n      topic_name: \'\'\n  topic1:\n    type: dcae.nodes.Topic\n    properties:\n      topic_name: \'\'\n      \n','typeId-7af051f7-c8c4-4a81-ab66-b55ac816c2b0',NULL,NULL,'{\n  \"dcaeDeployParameters\": {\n    \"location_id\": \"\",\n    \"service_id\": \"\",\n    \"policy_id\": \"AUTO_GENERATED_POLICY_ID_AT_SUBMIT\"\n  }\n}','DESIGN','{\n  \"serviceDetails\": {\n    \"serviceType\": \"\",\n    \"namingPolicy\": \"\",\n    \"environmentContext\": \"General_Revenue-Bearing\",\n    \"serviceEcompNaming\": \"true\",\n    \"serviceRole\": \"\",\n    \"name\": \"vLoadBalancerMS\",\n    \"description\": \"vLBMS\",\n    \"invariantUUID\": \"ba4c03be-7859-4197-9c8b-415d0c1378aa\",\n    \"ecompGeneratedNaming\": \"true\",\n    \"category\": \"Network L4+\",\n    \"type\": \"Service\",\n    \"UUID\": \"7e8a3d64-1475-4928-b02d-2c27530b755f\",\n    \"instantiationType\": \"A-la-carte\"\n  },\n  \"resourceDetails\": {\n    \"CP\": {},\n    \"VL\": {},\n    \"VF\": {\n      \"LoadBalancerMS 0\": {\n        \"resourceVendor\": \"Test License\",\n        \"resourceVendorModelNumber\": \"\",\n        \"name\": \"LoadBalancerMS\",\n        \"description\": \"vLBMS\",\n        \"invariantUUID\": \"1a40cbb0-fbe1-492e-b204-39aba30f02e3\",\n        \"subcategory\": \"Load Balancer\",\n        \"category\": \"Application L4+\",\n        \"type\": \"VF\",\n        \"UUID\": \"8d7d126d-623f-4e7c-9a16-132bd89e814a\",\n        \"version\": \"1.0\",\n        \"resourceVendorRelease\": \"1.0\",\n        \"customizationUUID\": \"310ce108-c3b5-4c90-b262-4a11c70366a3\"\n      }\n    },\n    \"CR\": {},\n    \"VFC\": {},\n    \"PNF\": {},\n    \"Service\": {},\n    \"CVFC\": {},\n    \"Service Proxy\": {},\n    \"Configuration\": {},\n    \"AllottedResource\": {}\n  }\n}','<svg xmlns=\"http://www.w3.org/2000/svg\"><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"start-circle\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><circle fill=\"none\" r=\"17\" cx=\"17\" cy=\"41\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"Arrow-a95c0ab7-bbdb-4a54-97f9-63aaba382d92\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><line y2=\"41\" fill=\"none\" x1=\"34\" x2=\"153\" y1=\"41\"/><polygon fill=\"none\" points=\" 151 39 151 43 155 41\"/><polygon points=\" 151 39 151 43 155 41\" stroke=\"none\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"VES\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><rect fill=\"none\" x=\"157\" width=\"123\" y=\"1\" height=\"82\"/></g><g fill-opacity=\"0\" fill=\"rgb(0,0,0)\" text-rendering=\"optimizeQuality\" shape-rendering=\"geometricPrecision\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"0\" stroke-width=\"2\"><rect x=\"157\" width=\"123\" y=\"1\" height=\"82\" stroke=\"none\"/></g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><text x=\"206\" xml:space=\"preserve\" y=\"42\" stroke=\"none\">VES</text><line y2=\"83\" fill=\"none\" x1=\"177\" x2=\"177\" y1=\"1\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"Arrow-8da18abd-c861-4408-9c1c-7e10b6288cc3\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><line y2=\"41\" fill=\"none\" x1=\"280\" x2=\"399\" y1=\"41\"/><polygon fill=\"none\" points=\" 397 39 397 43 401 41\"/><polygon points=\" 397 39 397 43 401 41\" stroke=\"none\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"TCA_iYTIP_v1_0_ResourceInstanceName1_tca_3\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><rect fill=\"none\" x=\"403\" width=\"123\" y=\"1\" height=\"82\"/></g><g fill-opacity=\"0\" fill=\"rgb(0,0,0)\" text-rendering=\"optimizeQuality\" font-family=\"sans-serif\" shape-rendering=\"geometricPrecision\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"0\" stroke-width=\"2\"><rect x=\"403\" width=\"123\" y=\"1\" height=\"82\" stroke=\"none\"/></g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><text x=\"453\" xml:space=\"preserve\" y=\"42\" stroke=\"none\">TCA</text><line y2=\"61\" fill=\"none\" x1=\"403\" x2=\"526\" y1=\"61\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"Arrow-feea73d0-fbb0-4d05-b410-9334a3582f3d\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><line y2=\"41\" fill=\"none\" x1=\"526\" x2=\"645\" y1=\"41\"/><polygon fill=\"none\" points=\" 643 39 643 43 647 41\"/><polygon points=\" 643 39 643 43 647 41\" stroke=\"none\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"Policy\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><rect fill=\"none\" x=\"649\" width=\"123\" y=\"1\" height=\"82\"/></g><g fill-opacity=\"0\" fill=\"rgb(0,0,0)\" text-rendering=\"optimizeQuality\" font-family=\"sans-serif\" shape-rendering=\"geometricPrecision\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"0\" stroke-width=\"2\"><rect x=\"649\" width=\"123\" y=\"1\" height=\"82\" stroke=\"none\"/></g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><text x=\"693\" xml:space=\"preserve\" y=\"42\" stroke=\"none\">Policy</text><line y2=\"1\" fill=\"none\" x1=\"649\" x2=\"710\" y1=\"42\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"Arrow-10fb7f39-0bd6-463a-ab09-9f94df21a136\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><line y2=\"41\" fill=\"none\" x1=\"772\" x2=\"891\" y1=\"41\"/><polygon fill=\"none\" points=\" 889 39 889 43 893 41\"/><polygon points=\" 889 39 889 43 893 41\" stroke=\"none\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"stop-circle\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g text-rendering=\"optimizeQuality\" stroke-width=\"4\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><circle fill=\"none\" r=\"17\" cx=\"912\" cy=\"41\"/></g></g></g></svg>');
-INSERT INTO `loops` VALUES ('LOOP_iYTIP_v1_0_ResourceInstanceName2_tca_2','tosca_definitions_version: cloudify_dsl_1_3\nimports:\n  - \"http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\"\n  - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R2/dockerplugin/3.2.0/dockerplugin_types.yaml\n  - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R2/relationshipplugin/1.0.0/relationshipplugin_types.yaml\n  - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R2/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\n\ninputs:\n  dh_override:\n    type: string\n    default: \"component_dockerhost\"\n  dh_location_id:\n    type: string\n    default: \"zone1\"\n  aaiEnrichmentHost:\n    type: string\n    default: \"none\"\n  aaiEnrichmentPort:\n    type: string    \n    default: 8443\n  enableAAIEnrichment:\n    type: string\n    default: false\n  dmaap_host:\n    type: string\n    default: dmaap.onap-message-router   \n  dmaap_port:\n    type: string\n    default: 3904    \n  enableRedisCaching:\n    type: string\n    default: false    \n  redisHosts:\n    type: string      \n  tag_version:\n    type: string\n    default: \"nexus3.onap.org:10001/onap//onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.0.0\"\n  consul_host:\n    type: string\n    default: consul-server.onap-consul\n  consul_port:\n    type: string\n    default: \"8500\"\n  cbs_host:\n    type: string\n    default: \"config-binding-service.dcae\"\n  cbs_port:\n    type: string\n    default: \"10000\"\n  policy_id:\n    type: string\n    default: \"none\"\n  external_port:\n    type: string\n    description: \"Port for CDAPgui to be exposed\"\n    default: \"32010\"\n\nnode_templates:\n  docker_service_host:\n    properties:\n      docker_host_override:\n        get_input: dh_override\n      location_id:\n        get_input: dh_location_id\n    type: dcae.nodes.SelectedDockerHost\n  tca_docker:\n    relationships:\n       - type: dcae.relationships.component_contained_in\n         target: docker_service_host\n       - target: tca_policy\n         type: cloudify.relationships.depends_on        \n    type: dcae.nodes.DockerContainerForComponentsUsingDmaap\n    properties:\n        application_config:\n            app_config:\n                appDescription: DCAE Analytics Threshold Crossing Alert Application\n                appName: dcae-tca\n                tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n                tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n                tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n                tcaVESAlertsTableName: TCAVESAlertsTable\n                tcaVESAlertsTableTTLSeconds: \'1728000\'\n                tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n                tcaVESMessageStatusTableTTLSeconds: \'86400\'\n                thresholdCalculatorFlowletInstances: \'2\'\n            app_preferences:\n                aaiEnrichmentHost: \n                    get_input: aaiEnrichmentHost\n                aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n                aaiEnrichmentPortNumber: \'8443\'\n                aaiEnrichmentProtocol: https\n                aaiEnrichmentUserName: DCAE\n                aaiEnrichmentUserPassword: DCAE\n                aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n                aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n                enableAAIEnrichment: \n                    get_input: enableAAIEnrichment\n                enableRedisCaching: \n                    get_input: enableRedisCaching\n                redisHosts: \n                    get_input: redisHosts\n                enableAlertCEFFormat: \'false\'\n                publisherContentType: application/json\n                publisherHostName: \n                    get_input: dmaap_host\n                publisherHostPort: \n                    get_input: dmaap_port                  \n                publisherMaxBatchSize: \'1\'\n                publisherMaxRecoveryQueueSize: \'100000\'\n                publisherPollingInterval: \'20000\'\n                publisherProtocol: http\n                publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n                subscriberConsumerGroup: OpenDCAE-c12\n                subscriberConsumerId: c12\n                subscriberContentType: application/json\n                subscriberHostName: \n                    get_input: dmaap_host\n                subscriberHostPort:\n                    get_input: dmaap_port                                  \n                subscriberMessageLimit: \'-1\'\n                subscriberPollingInterval: \'30000\'\n                subscriberProtocol: http\n                subscriberTimeoutMS: \'-1\'\n                subscriberTopicName: unauthenticated.SEC_MEASUREMENT_OUTPUT\n                tca_policy_default: \'{\"domain\":\"measurementsForVfScaling\",\"metricsPerEventName\":[{\"eventName\":\"vFirewallBroadcastPackets\",\"controlLoopSchemaType\":\"VNF\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicUsageArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"LESS_OR_EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ONSET\"},{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicUsageArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":700,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"eventName\":\"vLoadBalancer\",\"controlLoopSchemaType\":\"VM\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicUsageArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"eventName\":\"Measurement_vGMUX\",\"controlLoopSchemaType\":\"VNF\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\",\"thresholdValue\":0,\"direction\":\"EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ABATED\"},{\"closedLoopControlName\":\"ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\",\"thresholdValue\":0,\"direction\":\"GREATER\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]}]}\'\n        service_component_type: dcaegen2-analytics_tca    \n        docker_config:\n            healthcheck:\n               endpoint: /healthcheck\n               interval: 15s\n               timeout: 1s\n               type: http\n        image:\n            get_input: tag_version        \n    interfaces:\n      cloudify.interfaces.lifecycle:\n        start:\n          inputs:\n            envs:\n                DMAAPHOST: \n                    { get_input: dmaap_host }\n                DMAAPPORT:\n                    { get_input: dmaap_port }\n                DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n                DMAAPSUBTOPIC: \"unauthenticated.SEC_MEASUREMENT_OUTPUT\"\n                AAIHOST: \n                    { get_input: aaiEnrichmentHost }\n                AAIPORT: \n                    { get_input: aaiEnrichmentPort }\n                CONSUL_HOST: \n                    { get_input: consul_host }\n                CONSUL_PORT: \n                    { get_input: consul_port }\n                CBS_HOST: \n                    { get_input: cbs_host }\n                CBS_PORT: \n                    { get_input: cbs_port }\n                CONFIG_BINDING_SERVICE: \"config_binding_service\"                \n            ports:\n              - concat: [\"11011:\", { get_input: external_port }]        \n        stop:\n          inputs:\n            cleanup_image: true              \n  tca_policy:\n    type: dcae.nodes.policy\n    properties:\n      policy_id:\n           get_input: policy_id\n           policy_type_id: onap.policy.monitoring.cdap.tca.hi.lo.app\n\n','typeId-538accad-2c56-492b-953e-db0f4483cd2e',NULL,NULL,'{\n  \"dcaeDeployParameters\": {\n    \"dh_override\": \"component_dockerhost\",\n    \"dh_location_id\": \"zone1\",\n    \"aaiEnrichmentHost\": \"none\",\n    \"aaiEnrichmentPort\": 8443,\n    \"enableAAIEnrichment\": false,\n    \"dmaap_host\": \"dmaap.onap-message-router\",\n    \"dmaap_port\": 3904,\n    \"enableRedisCaching\": false,\n    \"redisHosts\": \"\",\n    \"tag_version\": \"nexus3.onap.org:10001/onap//onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.0.0\",\n    \"consul_host\": \"consul-server.onap-consul\",\n    \"consul_port\": \"8500\",\n    \"cbs_host\": \"config-binding-service.dcae\",\n    \"cbs_port\": \"10000\",\n    \"external_port\": \"32010\",\n    \"policy_id\": \"AUTO_GENERATED_POLICY_ID_AT_SUBMIT\"\n  }\n}','DESIGN','{\n  \"serviceDetails\": {\n    \"serviceType\": \"\",\n    \"namingPolicy\": \"\",\n    \"environmentContext\": \"General_Revenue-Bearing\",\n    \"serviceEcompNaming\": \"true\",\n    \"serviceRole\": \"\",\n    \"name\": \"vLoadBalancerMS\",\n    \"description\": \"vLBMS\",\n    \"invariantUUID\": \"ba4c03be-7859-4197-9c8b-415d0c1378aa\",\n    \"ecompGeneratedNaming\": \"true\",\n    \"category\": \"Network L4+\",\n    \"type\": \"Service\",\n    \"UUID\": \"7e8a3d64-1475-4928-b02d-2c27530b755f\",\n    \"instantiationType\": \"A-la-carte\"\n  },\n  \"resourceDetails\": {\n    \"CP\": {},\n    \"VL\": {},\n    \"VF\": {\n      \"LoadBalancerMS 0\": {\n        \"resourceVendor\": \"Test License\",\n        \"resourceVendorModelNumber\": \"\",\n        \"name\": \"LoadBalancerMS\",\n        \"description\": \"vLBMS\",\n        \"invariantUUID\": \"1a40cbb0-fbe1-492e-b204-39aba30f02e3\",\n        \"subcategory\": \"Load Balancer\",\n        \"category\": \"Application L4+\",\n        \"type\": \"VF\",\n        \"UUID\": \"8d7d126d-623f-4e7c-9a16-132bd89e814a\",\n        \"version\": \"1.0\",\n        \"resourceVendorRelease\": \"1.0\",\n        \"customizationUUID\": \"310ce108-c3b5-4c90-b262-4a11c70366a3\"\n      }\n    },\n    \"CR\": {},\n    \"VFC\": {},\n    \"PNF\": {},\n    \"Service\": {},\n    \"CVFC\": {},\n    \"Service Proxy\": {},\n    \"Configuration\": {},\n    \"AllottedResource\": {}\n  }\n}','<svg xmlns=\"http://www.w3.org/2000/svg\"><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"start-circle\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><circle fill=\"none\" r=\"17\" cx=\"17\" cy=\"41\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"Arrow-f40ec512-9449-4629-83e4-afb27c8dfaa9\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><line y2=\"41\" fill=\"none\" x1=\"34\" x2=\"153\" y1=\"41\"/><polygon fill=\"none\" points=\" 151 39 151 43 155 41\"/><polygon points=\" 151 39 151 43 155 41\" stroke=\"none\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"VES\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><rect fill=\"none\" x=\"157\" width=\"123\" y=\"1\" height=\"82\"/></g><g fill-opacity=\"0\" fill=\"rgb(0,0,0)\" text-rendering=\"optimizeQuality\" shape-rendering=\"geometricPrecision\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"0\" stroke-width=\"2\"><rect x=\"157\" width=\"123\" y=\"1\" height=\"82\" stroke=\"none\"/></g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><text x=\"206\" xml:space=\"preserve\" y=\"42\" stroke=\"none\">VES</text><line y2=\"83\" fill=\"none\" x1=\"177\" x2=\"177\" y1=\"1\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"Arrow-41788fef-bc4a-404d-9962-475c18bb2bac\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><line y2=\"41\" fill=\"none\" x1=\"280\" x2=\"399\" y1=\"41\"/><polygon fill=\"none\" points=\" 397 39 397 43 401 41\"/><polygon points=\" 397 39 397 43 401 41\" stroke=\"none\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"TCA_iYTIP_v1_0_ResourceInstanceName2_tca_2\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><rect fill=\"none\" x=\"403\" width=\"123\" y=\"1\" height=\"82\"/></g><g fill-opacity=\"0\" fill=\"rgb(0,0,0)\" text-rendering=\"optimizeQuality\" font-family=\"sans-serif\" shape-rendering=\"geometricPrecision\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"0\" stroke-width=\"2\"><rect x=\"403\" width=\"123\" y=\"1\" height=\"82\" stroke=\"none\"/></g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><text x=\"453\" xml:space=\"preserve\" y=\"42\" stroke=\"none\">TCA</text><line y2=\"61\" fill=\"none\" x1=\"403\" x2=\"526\" y1=\"61\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"Arrow-cd68a537-d56e-48bc-af04-529d3eeebd7f\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><line y2=\"41\" fill=\"none\" x1=\"526\" x2=\"645\" y1=\"41\"/><polygon fill=\"none\" points=\" 643 39 643 43 647 41\"/><polygon points=\" 643 39 643 43 647 41\" stroke=\"none\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"Policy\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><rect fill=\"none\" x=\"649\" width=\"123\" y=\"1\" height=\"82\"/></g><g fill-opacity=\"0\" fill=\"rgb(0,0,0)\" text-rendering=\"optimizeQuality\" font-family=\"sans-serif\" shape-rendering=\"geometricPrecision\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"0\" stroke-width=\"2\"><rect x=\"649\" width=\"123\" y=\"1\" height=\"82\" stroke=\"none\"/></g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><text x=\"693\" xml:space=\"preserve\" y=\"42\" stroke=\"none\">Policy</text><line y2=\"1\" fill=\"none\" x1=\"649\" x2=\"710\" y1=\"42\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"Arrow-64cbba16-f5d4-4660-b38e-af385559ac44\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><line y2=\"41\" fill=\"none\" x1=\"772\" x2=\"891\" y1=\"41\"/><polygon fill=\"none\" points=\" 889 39 889 43 893 41\"/><polygon points=\" 889 39 889 43 893 41\" stroke=\"none\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"stop-circle\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g text-rendering=\"optimizeQuality\" stroke-width=\"4\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><circle fill=\"none\" r=\"17\" cx=\"912\" cy=\"41\"/></g></g></g></svg>');
+INSERT INTO `loops` VALUES ('LOOP_ejh5S_v1_0_ResourceInstanceName1_tca','tosca_definitions_version: cloudify_dsl_1_3\nimports:\n- http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/docker/2.2.0/node-type.yaml\n- https://onap.org:8443/repository/solutioning01-mte2-raw/type_files/relationship/1.0.0/node-type.yaml\n- http://onap.org:8081/repository/solutioning01-mte2-raw/type_files/dmaap/dmaap_mr.yaml\ninputs:\n  location_id:\n    type: string\n  service_id:\n    type: string\n  policy_id:\n    type: string\nnode_templates:\n  policy_0:\n    type: dcae.nodes.policy\n    properties:\n      policy_id: \n        get_input: policy_id\n      policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n  cdap_host_host:\n    type: dcae.nodes.StreamingAnalytics.SelectedCDAPInfrastructure\n    properties:\n      location_id:\n        get_input: location_id\n      scn_override: cdap_broker.solutioning-central.dcae.onap.org\n    interfaces:\n      cloudify.interfaces.lifecycle: {\n        }\n  tca_tca:\n    type: dcae.nodes.MicroService.cdap\n    properties:\n      app_config:\n        appDescription: DCAE Analytics Threshold Crossing Alert Application\n        appName: dcae-tca\n        tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n        tcaVESAlertsTableName: TCAVESAlertsTable\n        tcaVESAlertsTableTTLSeconds: \'1728000\'\n        tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n        tcaVESMessageStatusTableTTLSeconds: \'86400\'\n        thresholdCalculatorFlowletInstances: \'2\'\n      app_preferences:\n        publisherContentType: application/json\n        publisherHostName: mrlocal-mtnjftle01.onap.org\n        publisherHostPort: \'3905\'\n        publisherMaxBatchSize: \'10\'\n        publisherMaxRecoveryQueueSize: \'100000\'\n        publisherPollingInterval: \'20000\'\n        publisherProtocol: https\n        publisherTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESPub\n        publisherUserName: test@tca.af.dcae.onap.org\n        publisherUserPassword: password\n        subscriberConsumerGroup: OpenDCAE-c12\n        subscriberConsumerId: c12\n        subscriberContentType: application/json\n        subscriberHostName: mrlocal-mtnjftle01.onap.org\n        subscriberHostPort: \'3905\'\n        subscriberMessageLimit: \'-1\'\n        subscriberPollingInterval: \'20000\'\n        subscriberProtocol: https\n        subscriberTimeoutMS: \'-1\'\n        subscriberTopicName: org.onap.dcae.dmaap.mtnje2.DcaeTestVESSub\n        subscriberUserName: test@tca.af.dcae.onap.org\n        subscriberUserPassword: password\n        tca_policy: null\n      artifact_name: dcae-analytics-tca\n      artifact_version: 1.0.0\n      connections:\n        streams_publishes: [\n          ]\n        streams_subscribes: [\n          ]\n      jar_url: http://somejar\n      location_id:\n        get_input: location_id\n      namespace: cdap_tca_hi_lo\n      programs:\n      - program_id: TCAVESCollectorFlow\n        program_type: flows\n      - program_id: TCADMaaPMRSubscriberWorker\n        program_type: workers\n      - program_id: TCADMaaPMRPublisherWorker\n        program_type: workers\n      service_component_type: cdap_app_tca\n      service_id:\n        get_input: service_id\n      streamname: TCASubscriberOutputStream\n    relationships:\n    - target: topic0\n      type: dcae.relationships.subscribe_to_events\n    - target: topic1\n      type: dcae.relationships.publish_events\n    - target: cdap_host_host\n      type: dcae.relationships.component_contained_in\n    - target: policy_0\n      type: dcae.relationships.depends_on\n  topic0:\n    type: dcae.nodes.Topic\n    properties:\n      topic_name: \'\'\n  topic1:\n    type: dcae.nodes.Topic\n    properties:\n      topic_name: \'\'\n      \n','typeId-cb3bc48d-86a3-4580-92ed-c0697d9ec963',NULL,NULL,'{\n  \"dcaeDeployParameters\": {\n    \"location_id\": \"\",\n    \"service_id\": \"\",\n    \"policy_id\": \"TCA_ejh5S_v1_0_ResourceInstanceName1_tca\"\n  }\n}','SUBMITTED','{\n  \"serviceDetails\": {\n    \"serviceType\": \"\",\n    \"serviceRole\": \"\",\n    \"description\": \"vLBMS\",\n    \"type\": \"Service\",\n    \"instantiationType\": \"A-la-carte\",\n    \"namingPolicy\": \"\",\n    \"serviceEcompNaming\": \"true\",\n    \"environmentContext\": \"General_Revenue-Bearing\",\n    \"name\": \"vLoadBalancerMS\",\n    \"invariantUUID\": \"30ec5b59-4799-48d8-ac5f-1058a6b0e48f\",\n    \"ecompGeneratedNaming\": \"true\",\n    \"UUID\": \"63cac700-ab9a-4115-a74f-7eac85e3fce0\",\n    \"category\": \"Network L4+\"\n  },\n  \"resourceDetails\": {\n    \"CP\": {},\n    \"VL\": {},\n    \"VF\": {\n      \"vLoadBalancerMS 0\": {\n        \"resourceVendor\": \"Test\",\n        \"name\": \"vLoadBalancerMS\",\n        \"resourceVendorModelNumber\": \"\",\n        \"description\": \"vLBMS\",\n        \"invariantUUID\": \"1a31b9f2-e50d-43b7-89b3-a040250cf506\",\n        \"UUID\": \"b4c4f3d7-929e-4b6d-a1cd-57e952ddc3e6\",\n        \"type\": \"VF\",\n        \"category\": \"Application L4+\",\n        \"subcategory\": \"Load Balancer\",\n        \"version\": \"1.0\",\n        \"customizationUUID\": \"465246dc-7748-45f4-a013-308d92922552\",\n        \"resourceVendorRelease\": \"1.0\"\n      }\n    },\n    \"CR\": {},\n    \"VFC\": {},\n    \"PNF\": {},\n    \"Service\": {},\n    \"CVFC\": {},\n    \"Service Proxy\": {},\n    \"Configuration\": {},\n    \"AllottedResource\": {},\n    \"VFModule\": {\n      \"Vloadbalancerms..vpkg..module-1\": {\n        \"vfModuleModelInvariantUUID\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n        \"vfModuleModelVersion\": \"1\",\n        \"vfModuleModelName\": \"Vloadbalancerms..vpkg..module-1\",\n        \"vfModuleModelUUID\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n        \"vfModuleModelCustomizationUUID\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n        \"min_vf_module_instances\": 0,\n        \"vf_module_label\": \"vpkg\",\n        \"max_vf_module_instances\": 1,\n        \"vf_module_type\": \"Expansion\",\n        \"isBase\": false,\n        \"initial_count\": 0,\n        \"volume_group\": false\n      },\n      \"Vloadbalancerms..vdns..module-3\": {\n        \"vfModuleModelInvariantUUID\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n        \"vfModuleModelVersion\": \"1\",\n        \"vfModuleModelName\": \"Vloadbalancerms..vdns..module-3\",\n        \"vfModuleModelUUID\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n        \"vfModuleModelCustomizationUUID\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n        \"min_vf_module_instances\": 0,\n        \"vf_module_label\": \"vdns\",\n        \"max_vf_module_instances\": 50,\n        \"vf_module_type\": \"Expansion\",\n        \"isBase\": false,\n        \"initial_count\": 0,\n        \"volume_group\": false\n      },\n      \"Vloadbalancerms..base_template..module-0\": {\n        \"vfModuleModelInvariantUUID\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n        \"vfModuleModelVersion\": \"1\",\n        \"vfModuleModelName\": \"Vloadbalancerms..base_template..module-0\",\n        \"vfModuleModelUUID\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n        \"vfModuleModelCustomizationUUID\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n        \"min_vf_module_instances\": 1,\n        \"vf_module_label\": \"base_template\",\n        \"max_vf_module_instances\": 1,\n        \"vf_module_type\": \"Base\",\n        \"isBase\": true,\n        \"initial_count\": 1,\n        \"volume_group\": false\n      },\n      \"Vloadbalancerms..vlb..module-2\": {\n        \"vfModuleModelInvariantUUID\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n        \"vfModuleModelVersion\": \"1\",\n        \"vfModuleModelName\": \"Vloadbalancerms..vlb..module-2\",\n        \"vfModuleModelUUID\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n        \"vfModuleModelCustomizationUUID\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n        \"min_vf_module_instances\": 0,\n        \"vf_module_label\": \"vlb\",\n        \"max_vf_module_instances\": 1,\n        \"vf_module_type\": \"Expansion\",\n        \"isBase\": false,\n        \"initial_count\": 0,\n        \"volume_group\": false\n      }\n    }\n  }\n}','{\n  \"schema\": {\n    \"uniqueItems\": \"true\",\n    \"format\": \"tabs\",\n    \"type\": \"array\",\n    \"minItems\": 1,\n    \"maxItems\": 1,\n    \"title\": \"Operational policies\",\n    \"items\": {\n      \"type\": \"object\",\n      \"title\": \"Operational Policy Item\",\n      \"id\": \"operational_policy_item\",\n      \"headerTemplate\": \"{{self.name}}\",\n      \"required\": [\n        \"name\",\n        \"configurationsJson\"\n      ],\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"title\": \"Operational policy name\",\n          \"readOnly\": \"True\"\n        },\n        \"configurationsJson\": {\n          \"type\": \"object\",\n          \"title\": \"Configuration\",\n          \"required\": [\n            \"operational_policy\",\n            \"guard_policies\"\n          ],\n          \"properties\": {\n            \"operational_policy\": {\n              \"type\": \"object\",\n              \"title\": \"Related Parameters\",\n              \"required\": [\n                \"controlLoop\",\n                \"policies\"\n              ],\n              \"properties\": {\n                \"controlLoop\": {\n                  \"type\": \"object\",\n                  \"title\": \"Control Loop details\",\n                  \"required\": [\n                    \"timeout\",\n                    \"abatement\",\n                    \"trigger_policy\",\n                    \"controlLoopName\"\n                  ],\n                  \"properties\": {\n                    \"timeout\": {\n                      \"type\": \"string\",\n                      \"title\": \"Overall Time Limit\",\n                      \"default\": \"0\",\n                      \"format\": \"number\"\n                    },\n                    \"abatement\": {\n                      \"type\": \"string\",\n                      \"title\": \"Abatement\",\n                      \"enum\": [\n                        \"True\",\n                        \"False\"\n                      ]\n                    },\n                    \"trigger_policy\": {\n                      \"type\": \"string\",\n                      \"title\": \"Policy Decision Entry\"\n                    },\n                    \"controlLoopName\": {\n                      \"type\": \"string\",\n                      \"title\": \"Control loop name\",\n                      \"readOnly\": \"True\"\n                    }\n                  }\n                },\n                \"policies\": {\n                  \"uniqueItems\": \"true\",\n                  \"id\": \"policies_array\",\n                  \"type\": \"array\",\n                  \"title\": \"Policy Decision Tree\",\n                  \"format\": \"tabs-top\",\n                  \"items\": {\n                    \"title\": \"Policy Decision\",\n                    \"type\": \"object\",\n                    \"id\": \"policy_item\",\n                    \"headerTemplate\": \"{{self.id}} - {{self.recipe}}\",\n                    \"format\": \"categories\",\n                    \"basicCategoryTitle\": \"recipe\",\n                    \"required\": [\n                      \"id\",\n                      \"recipe\",\n                      \"retry\",\n                      \"timeout\",\n                      \"actor\",\n                      \"success\",\n                      \"failure\",\n                      \"failure_timeout\",\n                      \"failure_retries\",\n                      \"failure_exception\",\n                      \"failure_guard\",\n                      \"target\"\n                    ],\n                    \"properties\": {\n                      \"id\": {\n                        \"default\": \"Policy 1\",\n                        \"title\": \"Policy ID\",\n                        \"type\": \"string\"\n                      },\n                      \"recipe\": {\n                        \"title\": \"Recipe\",\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"Restart\",\n                          \"Rebuild\",\n                          \"Migrate\",\n                          \"Health-Check\",\n                          \"ModifyConfig\",\n                          \"VF Module Create\",\n                          \"VF Module Delete\",\n                          \"Reroute\"\n                        ]\n                      },\n                      \"retry\": {\n                        \"default\": \"0\",\n                        \"title\": \"Number of Retry\",\n                        \"type\": \"string\",\n                        \"format\": \"number\"\n                      },\n                      \"timeout\": {\n                        \"default\": \"0\",\n                        \"title\": \"Timeout\",\n                        \"type\": \"string\",\n                        \"format\": \"number\"\n                      },\n                      \"actor\": {\n                        \"title\": \"Actor\",\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"APPC\",\n                          \"SO\",\n                          \"VFC\",\n                          \"SDNC\",\n                          \"SDNR\"\n                        ]\n                      },\n                      \"payload\": {\n                        \"title\": \"Payload (YAML)\",\n                        \"type\": \"string\",\n                        \"format\": \"textarea\"\n                      },\n                      \"success\": {\n                        \"default\": \"final_success\",\n                        \"title\": \"When Success\",\n                        \"type\": \"string\"\n                      },\n                      \"failure\": {\n                        \"default\": \"final_failure\",\n                        \"title\": \"When Failure\",\n                        \"type\": \"string\"\n                      },\n                      \"failure_timeout\": {\n                        \"default\": \"final_failure_timeout\",\n                        \"title\": \"When Failure Timeout\",\n                        \"type\": \"string\"\n                      },\n                      \"failure_retries\": {\n                        \"default\": \"final_failure_retries\",\n                        \"title\": \"When Failure Retries\",\n                        \"type\": \"string\"\n                      },\n                      \"failure_exception\": {\n                        \"default\": \"final_failure_exception\",\n                        \"title\": \"When Failure Exception\",\n                        \"type\": \"string\"\n                      },\n                      \"failure_guard\": {\n                        \"default\": \"final_failure_guard\",\n                        \"title\": \"When Failure Guard\",\n                        \"type\": \"string\"\n                      },\n                      \"target\": {\n                        \"type\": \"object\",\n                        \"required\": [\n                          \"type\",\n                          \"resourceID\"\n                        ],\n                        \"anyOf\": [\n                          {\n                            \"title\": \"User Defined\",\n                            \"additionalProperties\": \"True\",\n                            \"properties\": {\n                              \"type\": {\n                                \"title\": \"Target type\",\n                                \"type\": \"string\",\n                                \"default\": \"\",\n                                \"enum\": [\n                                  \"VNF\",\n                                  \"VFMODULE\",\n                                  \"VM\"\n                                ]\n                              },\n                              \"resourceID\": {\n                                \"title\": \"Target type\",\n                                \"type\": \"string\",\n                                \"default\": \"\"\n                              }\n                            }\n                          },\n                          {\n                            \"title\": \"VNF-vLoadBalancerMS 0\",\n                            \"properties\": {\n                              \"type\": {\n                                \"title\": \"Type\",\n                                \"type\": \"string\",\n                                \"default\": \"VNF\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"resourceID\": {\n                                \"title\": \"Resource ID\",\n                                \"type\": \"string\",\n                                \"default\": \"vLoadBalancerMS\",\n                                \"readOnly\": \"True\"\n                              }\n                            }\n                          },\n                          {\n                            \"title\": \"VFMODULE-Vloadbalancerms..vpkg..module-1\",\n                            \"properties\": {\n                              \"type\": {\n                                \"title\": \"Type\",\n                                \"type\": \"string\",\n                                \"default\": \"VFMODULE\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"resourceID\": {\n                                \"title\": \"Resource ID\",\n                                \"type\": \"string\",\n                                \"default\": \"Vloadbalancerms..vpkg..module-1\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelInvariantId\": {\n                                \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n                                \"type\": \"string\",\n                                \"default\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelVersionId\": {\n                                \"title\": \"Model Version Id (ModelUUID)\",\n                                \"type\": \"string\",\n                                \"default\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelName\": {\n                                \"title\": \"Model Name\",\n                                \"type\": \"string\",\n                                \"default\": \"Vloadbalancerms..vpkg..module-1\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelVersion\": {\n                                \"title\": \"Model Version\",\n                                \"type\": \"string\",\n                                \"default\": \"1\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelCustomizationId\": {\n                                \"title\": \"Customization ID\",\n                                \"type\": \"string\",\n                                \"default\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n                                \"readOnly\": \"True\"\n                              }\n                            }\n                          },\n                          {\n                            \"title\": \"VFMODULE-Vloadbalancerms..vdns..module-3\",\n                            \"properties\": {\n                              \"type\": {\n                                \"title\": \"Type\",\n                                \"type\": \"string\",\n                                \"default\": \"VFMODULE\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"resourceID\": {\n                                \"title\": \"Resource ID\",\n                                \"type\": \"string\",\n                                \"default\": \"Vloadbalancerms..vdns..module-3\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelInvariantId\": {\n                                \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n                                \"type\": \"string\",\n                                \"default\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelVersionId\": {\n                                \"title\": \"Model Version Id (ModelUUID)\",\n                                \"type\": \"string\",\n                                \"default\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelName\": {\n                                \"title\": \"Model Name\",\n                                \"type\": \"string\",\n                                \"default\": \"Vloadbalancerms..vdns..module-3\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelVersion\": {\n                                \"title\": \"Model Version\",\n                                \"type\": \"string\",\n                                \"default\": \"1\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelCustomizationId\": {\n                                \"title\": \"Customization ID\",\n                                \"type\": \"string\",\n                                \"default\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n                                \"readOnly\": \"True\"\n                              }\n                            }\n                          },\n                          {\n                            \"title\": \"VFMODULE-Vloadbalancerms..base_template..module-0\",\n                            \"properties\": {\n                              \"type\": {\n                                \"title\": \"Type\",\n                                \"type\": \"string\",\n                                \"default\": \"VFMODULE\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"resourceID\": {\n                                \"title\": \"Resource ID\",\n                                \"type\": \"string\",\n                                \"default\": \"Vloadbalancerms..base_template..module-0\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelInvariantId\": {\n                                \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n                                \"type\": \"string\",\n                                \"default\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelVersionId\": {\n                                \"title\": \"Model Version Id (ModelUUID)\",\n                                \"type\": \"string\",\n                                \"default\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelName\": {\n                                \"title\": \"Model Name\",\n                                \"type\": \"string\",\n                                \"default\": \"Vloadbalancerms..base_template..module-0\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelVersion\": {\n                                \"title\": \"Model Version\",\n                                \"type\": \"string\",\n                                \"default\": \"1\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelCustomizationId\": {\n                                \"title\": \"Customization ID\",\n                                \"type\": \"string\",\n                                \"default\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n                                \"readOnly\": \"True\"\n                              }\n                            }\n                          },\n                          {\n                            \"title\": \"VFMODULE-Vloadbalancerms..vlb..module-2\",\n                            \"properties\": {\n                              \"type\": {\n                                \"title\": \"Type\",\n                                \"type\": \"string\",\n                                \"default\": \"VFMODULE\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"resourceID\": {\n                                \"title\": \"Resource ID\",\n                                \"type\": \"string\",\n                                \"default\": \"Vloadbalancerms..vlb..module-2\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelInvariantId\": {\n                                \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n                                \"type\": \"string\",\n                                \"default\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelVersionId\": {\n                                \"title\": \"Model Version Id (ModelUUID)\",\n                                \"type\": \"string\",\n                                \"default\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelName\": {\n                                \"title\": \"Model Name\",\n                                \"type\": \"string\",\n                                \"default\": \"Vloadbalancerms..vlb..module-2\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelVersion\": {\n                                \"title\": \"Model Version\",\n                                \"type\": \"string\",\n                                \"default\": \"1\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelCustomizationId\": {\n                                \"title\": \"Customization ID\",\n                                \"type\": \"string\",\n                                \"default\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n                                \"readOnly\": \"True\"\n                              }\n                            }\n                          }\n                        ]\n                      }\n                    }\n                  }\n                }\n              }\n            },\n            \"guard_policies\": {\n              \"type\": \"array\",\n              \"format\": \"tabs-top\",\n              \"title\": \"Associated Guard policies\",\n              \"items\": {\n                \"headerTemplate\": \"{{self.policy-id}} - {{self.content.recipe}}\",\n                \"anyOf\": [\n                  {\n                    \"title\": \"Guard MinMax\",\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"policy-id\": {\n                        \"type\": \"string\",\n                        \"default\": \"guard.minmax.new\",\n                        \"pattern\": \"^(guard.minmax\\\\..*)$\"\n                      },\n                      \"content\": {\n                        \"properties\": {\n                          \"actor\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"APPC\",\n                              \"SO\",\n                              \"VFC\",\n                              \"SDNC\",\n                              \"SDNR\"\n                            ]\n                          },\n                          \"recipe\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"Restart\",\n                              \"Rebuild\",\n                              \"Migrate\",\n                              \"Health-Check\",\n                              \"ModifyConfig\",\n                              \"VF Module Create\",\n                              \"VF Module Delete\",\n                              \"Reroute\"\n                            ]\n                          },\n                          \"targets\": {\n                            \"type\": \"string\",\n                            \"default\": \".*\"\n                          },\n                          \"clname\": {\n                            \"type\": \"string\",\n                            \"template\": \"{{loopName}}\",\n                            \"watch\": {\n                              \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n                            }\n                          },\n                          \"guardActiveStart\": {\n                            \"type\": \"string\",\n                            \"default\": \"00:00:00Z\"\n                          },\n                          \"guardActiveEnd\": {\n                            \"type\": \"string\",\n                            \"default\": \"10:00:00Z\"\n                          },\n                          \"min\": {\n                            \"type\": \"string\",\n                            \"default\": \"0\"\n                          },\n                          \"max\": {\n                            \"type\": \"string\",\n                            \"default\": \"1\"\n                          }\n                        }\n                      }\n                    }\n                  },\n                  {\n                    \"title\": \"Guard Frequency\",\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"policy-id\": {\n                        \"type\": \"string\",\n                        \"default\": \"guard.frequency.new\",\n                        \"pattern\": \"^(guard.frequency\\\\..*)$\"\n                      },\n                      \"content\": {\n                        \"properties\": {\n                          \"actor\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"APPC\",\n                              \"SO\",\n                              \"VFC\",\n                              \"SDNC\",\n                              \"SDNR\"\n                            ]\n                          },\n                          \"recipe\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"Restart\",\n                              \"Rebuild\",\n                              \"Migrate\",\n                              \"Health-Check\",\n                              \"ModifyConfig\",\n                              \"VF Module Create\",\n                              \"VF Module Delete\",\n                              \"Reroute\"\n                            ]\n                          },\n                          \"targets\": {\n                            \"type\": \"string\",\n                            \"default\": \".*\"\n                          },\n                          \"clname\": {\n                            \"type\": \"string\",\n                            \"template\": \"{{loopName}}\",\n                            \"watch\": {\n                              \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n                            }\n                          },\n                          \"guardActiveStart\": {\n                            \"type\": \"string\",\n                            \"default\": \"00:00:00Z\"\n                          },\n                          \"guardActiveEnd\": {\n                            \"type\": \"string\",\n                            \"default\": \"10:00:00Z\"\n                          },\n                          \"limit\": {\n                            \"type\": \"string\"\n                          },\n                          \"timeWindow\": {\n                            \"type\": \"string\"\n                          },\n                          \"timeUnits\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"minute\",\n                              \"hour\",\n                              \"day\",\n                              \"week\",\n                              \"month\",\n                              \"year\"\n                            ]\n                          }\n                        }\n                      }\n                    }\n                  }\n                ]\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}','<svg xmlns=\"http://www.w3.org/2000/svg\"><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"start-circle\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><circle fill=\"none\" r=\"17\" cx=\"18\" cy=\"41\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"Arrow-443509bf-0a3a-4c17-9634-41b92426a677\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><line y2=\"41\" fill=\"none\" x1=\"35\" x2=\"123\" y1=\"41\"/><polygon fill=\"none\" points=\" 121 39 121 43 125 41\"/><polygon points=\" 121 39 121 43 125 41\" stroke=\"none\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"VES\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><rect fill=\"none\" x=\"127\" width=\"123\" y=\"1\" height=\"82\"/></g><g fill-opacity=\"0\" fill=\"rgb(0,0,0)\" text-rendering=\"optimizeQuality\" shape-rendering=\"geometricPrecision\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"0\" stroke-width=\"2\"><rect x=\"127\" width=\"123\" y=\"1\" height=\"82\" stroke=\"none\"/></g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><text x=\"176.5\" xml:space=\"preserve\" y=\"46.5\" stroke=\"none\">VES</text><line y2=\"83\" fill=\"none\" x1=\"147\" x2=\"147\" y1=\"1\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"Arrow-82faaf2f-b3b5-4919-a5e6-839e75e0a2a1\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><line y2=\"41\" fill=\"none\" x1=\"250\" x2=\"338\" y1=\"41\"/><polygon fill=\"none\" points=\" 336 39 336 43 340 41\"/><polygon points=\" 336 39 336 43 340 41\" stroke=\"none\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"TCA_ejh5S_v1_0_ResourceInstanceName1_tca\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><rect fill=\"none\" x=\"342\" width=\"123\" y=\"1\" height=\"82\"/></g><g fill-opacity=\"0\" fill=\"rgb(0,0,0)\" text-rendering=\"optimizeQuality\" shape-rendering=\"geometricPrecision\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"0\" stroke-width=\"2\"><rect x=\"342\" width=\"123\" y=\"1\" height=\"82\" stroke=\"none\"/></g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><text x=\"392\" xml:space=\"preserve\" y=\"46.5\" stroke=\"none\">TCA</text><line y2=\"61\" fill=\"none\" x1=\"342\" x2=\"465\" y1=\"61\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"Arrow-6ae3deea-0b32-4125-b7cc-dd472d3fbd1a\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><line y2=\"41\" fill=\"none\" x1=\"465\" x2=\"553\" y1=\"41\"/><polygon fill=\"none\" points=\" 551 39 551 43 555 41\"/><polygon points=\" 551 39 551 43 555 41\" stroke=\"none\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"OperationalPolicy\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><rect fill=\"none\" x=\"557\" width=\"123\" y=\"1\" height=\"82\"/></g><g fill-opacity=\"0\" fill=\"rgb(0,0,0)\" text-rendering=\"optimizeQuality\" shape-rendering=\"geometricPrecision\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"0\" stroke-width=\"2\"><rect x=\"557\" width=\"123\" y=\"1\" height=\"82\" stroke=\"none\"/></g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><text x=\"564.5\" xml:space=\"preserve\" y=\"46.5\" stroke=\"none\">OperationalPolicy</text><line y2=\"1\" fill=\"none\" x1=\"557\" x2=\"618\" y1=\"42\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"Arrow-0536883f-3779-4456-85fa-d9169c3c5ea6\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><line y2=\"41\" fill=\"none\" x1=\"680\" x2=\"768\" y1=\"41\"/><polygon fill=\"none\" points=\" 766 39 766 43 770 41\"/><polygon points=\" 766 39 766 43 770 41\" stroke=\"none\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"stop-circle\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"4\"><circle fill=\"none\" r=\"17\" cx=\"789\" cy=\"41\"/></g></g></g></svg>');
+INSERT INTO `loops` VALUES ('LOOP_ejh5S_v1_0_ResourceInstanceName1_tca_3','tosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n  This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n  - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n  - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n  - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\ninputs:\n  aaiEnrichmentHost:\n    type: string\n    default: \"aai.onap.svc.cluster.local\"\n  aaiEnrichmentPort:\n    type: string\n    default: \"8443\"\n  enableAAIEnrichment:\n    type: string\n    default: true\n  dmaap_host:\n    type: string\n    default: message-router.onap.svc.cluster.local\n  dmaap_port:\n    type: string\n    default: \"3904\"\n  enableRedisCaching:\n    type: string\n    default: false\n  redisHosts:\n    type: string\n    default: dcae-redis.onap.svc.cluster.local:6379\n  tag_version:\n    type: string\n    default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest\"\n  consul_host:\n    type: string\n    default: consul-server.onap.svc.cluster.local\n  consul_port:\n    type: string\n    default: \"8500\"\n  cbs_host:\n    type: string\n    default: \"config-binding-service.dcae.svc.cluster.local\"\n  cbs_port:\n    type: string\n    default: \"10000\"\n  policy_id:\n    type: string\n    default: \"none\"\n  external_port:\n    type: string\n    description: Kubernetes node port on which CDAPgui is exposed\n    default: \"32012\"\n  policy_model_id:\n    type: string\n    default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n\nnode_templates:\n  tca_k8s:\n    type: dcae.nodes.ContainerizedServiceComponent\n    relationships:\n      - target: tca_policy\n        type: cloudify.relationships.depends_on\n    properties:\n        service_component_type: \'dcaegen2-analytics-tca\'\n        application_config: {}\n        docker_config: {}\n        image:\n          get_input: tag_version\n        log_info:\n          log_directory: \"/opt/app/TCAnalytics/logs\"\n        application_config:\n            app_config:\n                appDescription: DCAE Analytics Threshold Crossing Alert Application\n                appName: dcae-tca\n                tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n                tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n                tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n                tcaVESAlertsTableName: TCAVESAlertsTable\n                tcaVESAlertsTableTTLSeconds: \'1728000\'\n                tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n                tcaVESMessageStatusTableTTLSeconds: \'86400\'\n                thresholdCalculatorFlowletInstances: \'2\'\n            app_preferences:\n                aaiEnrichmentHost:\n                    get_input: aaiEnrichmentHost\n                aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n                aaiEnrichmentPortNumber: \'8443\'\n                aaiEnrichmentProtocol: https\n                aaiEnrichmentUserName: dcae@dcae.onap.org\n                aaiEnrichmentUserPassword: demo123456!\n                aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n                aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n                enableAAIEnrichment:\n                    get_input: enableAAIEnrichment\n                enableRedisCaching:\n                    get_input: enableRedisCaching\n                redisHosts:\n                    get_input: redisHosts\n                enableAlertCEFFormat: \'false\'\n                publisherContentType: application/json\n                publisherHostName:\n                    get_input: dmaap_host\n                publisherHostPort:\n                    get_input: dmaap_port\n                publisherMaxBatchSize: \'1\'\n                publisherMaxRecoveryQueueSize: \'100000\'\n                publisherPollingInterval: \'20000\'\n                publisherProtocol: http\n                publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n                subscriberConsumerGroup: OpenDCAE-c12\n                subscriberConsumerId: c12\n                subscriberContentType: application/json\n                subscriberHostName:\n                    get_input: dmaap_host\n                subscriberHostPort:\n                    get_input: dmaap_port\n                subscriberMessageLimit: \'-1\'\n                subscriberPollingInterval: \'30000\'\n                subscriberProtocol: http\n                subscriberTimeoutMS: \'-1\'\n                subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n                tca_policy: \'\'\n        service_component_type: dcaegen2-analytics_tca\n    interfaces:\n      cloudify.interfaces.lifecycle:\n        start:\n          inputs:\n            envs:\n                DMAAPHOST:\n                    { get_input: dmaap_host }\n                DMAAPPORT:\n                    { get_input: dmaap_port }\n                DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n                DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n                AAIHOST:\n                    { get_input: aaiEnrichmentHost }\n                AAIPORT:\n                    { get_input: aaiEnrichmentPort }\n                CONSUL_HOST:\n                    { get_input: consul_host }\n                CONSUL_PORT:\n                    { get_input: consul_port }\n                CBS_HOST:\n                    { get_input: cbs_host }\n                CBS_PORT:\n                    { get_input: cbs_port }\n                CONFIG_BINDING_SERVICE: \"config_binding_service\"\n            ports:\n              - concat: [\"11011:\", { get_input: external_port }]\n  tca_policy:\n    type: dcae.nodes.policy\n    properties:\n      policy_id:\n           get_input: policy_id\n      policy_model_id: \n           get_input: policy_model_id\n','typeId-dee5b365-edb4-4131-89af-f729d3e0972f',NULL,NULL,'{\n  \"dcaeDeployParameters\": {\n    \"aaiEnrichmentHost\": \"aai.onap.svc.cluster.local\",\n    \"aaiEnrichmentPort\": \"8443\",\n    \"enableAAIEnrichment\": true,\n    \"dmaap_host\": \"message-router.onap.svc.cluster.local\",\n    \"dmaap_port\": \"3904\",\n    \"enableRedisCaching\": false,\n    \"redisHosts\": \"dcae-redis.onap.svc.cluster.local:6379\",\n    \"tag_version\": \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.0-STAGING-latest\",\n    \"consul_host\": \"consul-server.onap.svc.cluster.local\",\n    \"consul_port\": \"8500\",\n    \"cbs_host\": \"config-binding-service.dcae.svc.cluster.local\",\n    \"cbs_port\": \"10000\",\n    \"external_port\": \"32012\",\n    \"policy_model_id\": \"onap.policies.monitoring.cdap.tca.hi.lo.app\",\n    \"policy_id\": \"tca_k8s_ejh5S_v1_0_ResourceInstanceName1_tca_3\"\n  }\n}','DESIGN','{\n  \"serviceDetails\": {\n    \"serviceType\": \"\",\n    \"serviceRole\": \"\",\n    \"description\": \"vLBMS\",\n    \"type\": \"Service\",\n    \"instantiationType\": \"A-la-carte\",\n    \"namingPolicy\": \"\",\n    \"serviceEcompNaming\": \"true\",\n    \"environmentContext\": \"General_Revenue-Bearing\",\n    \"name\": \"vLoadBalancerMS\",\n    \"invariantUUID\": \"30ec5b59-4799-48d8-ac5f-1058a6b0e48f\",\n    \"ecompGeneratedNaming\": \"true\",\n    \"UUID\": \"63cac700-ab9a-4115-a74f-7eac85e3fce0\",\n    \"category\": \"Network L4+\"\n  },\n  \"resourceDetails\": {\n    \"CP\": {},\n    \"VL\": {},\n    \"VF\": {\n      \"vLoadBalancerMS 0\": {\n        \"resourceVendor\": \"Test\",\n        \"name\": \"vLoadBalancerMS\",\n        \"resourceVendorModelNumber\": \"\",\n        \"description\": \"vLBMS\",\n        \"invariantUUID\": \"1a31b9f2-e50d-43b7-89b3-a040250cf506\",\n        \"UUID\": \"b4c4f3d7-929e-4b6d-a1cd-57e952ddc3e6\",\n        \"type\": \"VF\",\n        \"category\": \"Application L4+\",\n        \"subcategory\": \"Load Balancer\",\n        \"version\": \"1.0\",\n        \"customizationUUID\": \"465246dc-7748-45f4-a013-308d92922552\",\n        \"resourceVendorRelease\": \"1.0\"\n      }\n    },\n    \"CR\": {},\n    \"VFC\": {},\n    \"PNF\": {},\n    \"Service\": {},\n    \"CVFC\": {},\n    \"Service Proxy\": {},\n    \"Configuration\": {},\n    \"AllottedResource\": {},\n    \"VFModule\": {\n      \"Vloadbalancerms..vpkg..module-1\": {\n        \"vfModuleModelInvariantUUID\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n        \"vfModuleModelVersion\": \"1\",\n        \"vfModuleModelName\": \"Vloadbalancerms..vpkg..module-1\",\n        \"vfModuleModelUUID\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n        \"vfModuleModelCustomizationUUID\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n        \"min_vf_module_instances\": 0,\n        \"vf_module_label\": \"vpkg\",\n        \"max_vf_module_instances\": 1,\n        \"vf_module_type\": \"Expansion\",\n        \"isBase\": false,\n        \"initial_count\": 0,\n        \"volume_group\": false\n      },\n      \"Vloadbalancerms..vdns..module-3\": {\n        \"vfModuleModelInvariantUUID\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n        \"vfModuleModelVersion\": \"1\",\n        \"vfModuleModelName\": \"Vloadbalancerms..vdns..module-3\",\n        \"vfModuleModelUUID\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n        \"vfModuleModelCustomizationUUID\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n        \"min_vf_module_instances\": 0,\n        \"vf_module_label\": \"vdns\",\n        \"max_vf_module_instances\": 50,\n        \"vf_module_type\": \"Expansion\",\n        \"isBase\": false,\n        \"initial_count\": 0,\n        \"volume_group\": false\n      },\n      \"Vloadbalancerms..base_template..module-0\": {\n        \"vfModuleModelInvariantUUID\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n        \"vfModuleModelVersion\": \"1\",\n        \"vfModuleModelName\": \"Vloadbalancerms..base_template..module-0\",\n        \"vfModuleModelUUID\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n        \"vfModuleModelCustomizationUUID\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n        \"min_vf_module_instances\": 1,\n        \"vf_module_label\": \"base_template\",\n        \"max_vf_module_instances\": 1,\n        \"vf_module_type\": \"Base\",\n        \"isBase\": true,\n        \"initial_count\": 1,\n        \"volume_group\": false\n      },\n      \"Vloadbalancerms..vlb..module-2\": {\n        \"vfModuleModelInvariantUUID\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n        \"vfModuleModelVersion\": \"1\",\n        \"vfModuleModelName\": \"Vloadbalancerms..vlb..module-2\",\n        \"vfModuleModelUUID\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n        \"vfModuleModelCustomizationUUID\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n        \"min_vf_module_instances\": 0,\n        \"vf_module_label\": \"vlb\",\n        \"max_vf_module_instances\": 1,\n        \"vf_module_type\": \"Expansion\",\n        \"isBase\": false,\n        \"initial_count\": 0,\n        \"volume_group\": false\n      }\n    }\n  }\n}','{\n  \"schema\": {\n    \"uniqueItems\": \"true\",\n    \"format\": \"tabs\",\n    \"type\": \"array\",\n    \"minItems\": 1,\n    \"maxItems\": 1,\n    \"title\": \"Operational policies\",\n    \"items\": {\n      \"type\": \"object\",\n      \"title\": \"Operational Policy Item\",\n      \"id\": \"operational_policy_item\",\n      \"headerTemplate\": \"{{self.name}}\",\n      \"required\": [\n        \"name\",\n        \"configurationsJson\"\n      ],\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"title\": \"Operational policy name\",\n          \"readOnly\": \"True\"\n        },\n        \"configurationsJson\": {\n          \"type\": \"object\",\n          \"title\": \"Configuration\",\n          \"required\": [\n            \"operational_policy\",\n            \"guard_policies\"\n          ],\n          \"properties\": {\n            \"operational_policy\": {\n              \"type\": \"object\",\n              \"title\": \"Related Parameters\",\n              \"required\": [\n                \"controlLoop\",\n                \"policies\"\n              ],\n              \"properties\": {\n                \"controlLoop\": {\n                  \"type\": \"object\",\n                  \"title\": \"Control Loop details\",\n                  \"required\": [\n                    \"timeout\",\n                    \"abatement\",\n                    \"trigger_policy\",\n                    \"controlLoopName\"\n                  ],\n                  \"properties\": {\n                    \"timeout\": {\n                      \"type\": \"string\",\n                      \"title\": \"Overall Time Limit\",\n                      \"default\": \"0\",\n                      \"format\": \"number\"\n                    },\n                    \"abatement\": {\n                      \"type\": \"string\",\n                      \"title\": \"Abatement\",\n                      \"enum\": [\n                        \"True\",\n                        \"False\"\n                      ]\n                    },\n                    \"trigger_policy\": {\n                      \"type\": \"string\",\n                      \"title\": \"Policy Decision Entry\"\n                    },\n                    \"controlLoopName\": {\n                      \"type\": \"string\",\n                      \"title\": \"Control loop name\",\n                      \"readOnly\": \"True\"\n                    }\n                  }\n                },\n                \"policies\": {\n                  \"uniqueItems\": \"true\",\n                  \"id\": \"policies_array\",\n                  \"type\": \"array\",\n                  \"title\": \"Policy Decision Tree\",\n                  \"format\": \"tabs-top\",\n                  \"items\": {\n                    \"title\": \"Policy Decision\",\n                    \"type\": \"object\",\n                    \"id\": \"policy_item\",\n                    \"headerTemplate\": \"{{self.id}} - {{self.recipe}}\",\n                    \"format\": \"categories\",\n                    \"basicCategoryTitle\": \"recipe\",\n                    \"required\": [\n                      \"id\",\n                      \"recipe\",\n                      \"retry\",\n                      \"timeout\",\n                      \"actor\",\n                      \"success\",\n                      \"failure\",\n                      \"failure_timeout\",\n                      \"failure_retries\",\n                      \"failure_exception\",\n                      \"failure_guard\",\n                      \"target\"\n                    ],\n                    \"properties\": {\n                      \"id\": {\n                        \"default\": \"Policy 1\",\n                        \"title\": \"Policy ID\",\n                        \"type\": \"string\"\n                      },\n                      \"recipe\": {\n                        \"title\": \"Recipe\",\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"Restart\",\n                          \"Rebuild\",\n                          \"Migrate\",\n                          \"Health-Check\",\n                          \"ModifyConfig\",\n                          \"VF Module Create\",\n                          \"VF Module Delete\",\n                          \"Reroute\"\n                        ]\n                      },\n                      \"retry\": {\n                        \"default\": \"0\",\n                        \"title\": \"Number of Retry\",\n                        \"type\": \"string\",\n                        \"format\": \"number\"\n                      },\n                      \"timeout\": {\n                        \"default\": \"0\",\n                        \"title\": \"Timeout\",\n                        \"type\": \"string\",\n                        \"format\": \"number\"\n                      },\n                      \"actor\": {\n                        \"title\": \"Actor\",\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"APPC\",\n                          \"SO\",\n                          \"VFC\",\n                          \"SDNC\",\n                          \"SDNR\"\n                        ]\n                      },\n                      \"payload\": {\n                        \"title\": \"Payload (YAML)\",\n                        \"type\": \"string\",\n                        \"format\": \"textarea\"\n                      },\n                      \"success\": {\n                        \"default\": \"final_success\",\n                        \"title\": \"When Success\",\n                        \"type\": \"string\"\n                      },\n                      \"failure\": {\n                        \"default\": \"final_failure\",\n                        \"title\": \"When Failure\",\n                        \"type\": \"string\"\n                      },\n                      \"failure_timeout\": {\n                        \"default\": \"final_failure_timeout\",\n                        \"title\": \"When Failure Timeout\",\n                        \"type\": \"string\"\n                      },\n                      \"failure_retries\": {\n                        \"default\": \"final_failure_retries\",\n                        \"title\": \"When Failure Retries\",\n                        \"type\": \"string\"\n                      },\n                      \"failure_exception\": {\n                        \"default\": \"final_failure_exception\",\n                        \"title\": \"When Failure Exception\",\n                        \"type\": \"string\"\n                      },\n                      \"failure_guard\": {\n                        \"default\": \"final_failure_guard\",\n                        \"title\": \"When Failure Guard\",\n                        \"type\": \"string\"\n                      },\n                      \"target\": {\n                        \"type\": \"object\",\n                        \"required\": [\n                          \"type\",\n                          \"resourceID\"\n                        ],\n                        \"anyOf\": [\n                          {\n                            \"title\": \"User Defined\",\n                            \"additionalProperties\": \"True\",\n                            \"properties\": {\n                              \"type\": {\n                                \"title\": \"Target type\",\n                                \"type\": \"string\",\n                                \"default\": \"\",\n                                \"enum\": [\n                                  \"VNF\",\n                                  \"VFMODULE\",\n                                  \"VM\"\n                                ]\n                              },\n                              \"resourceID\": {\n                                \"title\": \"Target type\",\n                                \"type\": \"string\",\n                                \"default\": \"\"\n                              }\n                            }\n                          },\n                          {\n                            \"title\": \"VNF-vLoadBalancerMS 0\",\n                            \"properties\": {\n                              \"type\": {\n                                \"title\": \"Type\",\n                                \"type\": \"string\",\n                                \"default\": \"VNF\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"resourceID\": {\n                                \"title\": \"Resource ID\",\n                                \"type\": \"string\",\n                                \"default\": \"vLoadBalancerMS\",\n                                \"readOnly\": \"True\"\n                              }\n                            }\n                          },\n                          {\n                            \"title\": \"VFMODULE-Vloadbalancerms..vpkg..module-1\",\n                            \"properties\": {\n                              \"type\": {\n                                \"title\": \"Type\",\n                                \"type\": \"string\",\n                                \"default\": \"VFMODULE\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"resourceID\": {\n                                \"title\": \"Resource ID\",\n                                \"type\": \"string\",\n                                \"default\": \"Vloadbalancerms..vpkg..module-1\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelInvariantId\": {\n                                \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n                                \"type\": \"string\",\n                                \"default\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelVersionId\": {\n                                \"title\": \"Model Version Id (ModelUUID)\",\n                                \"type\": \"string\",\n                                \"default\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelName\": {\n                                \"title\": \"Model Name\",\n                                \"type\": \"string\",\n                                \"default\": \"Vloadbalancerms..vpkg..module-1\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelVersion\": {\n                                \"title\": \"Model Version\",\n                                \"type\": \"string\",\n                                \"default\": \"1\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelCustomizationId\": {\n                                \"title\": \"Customization ID\",\n                                \"type\": \"string\",\n                                \"default\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n                                \"readOnly\": \"True\"\n                              }\n                            }\n                          },\n                          {\n                            \"title\": \"VFMODULE-Vloadbalancerms..vdns..module-3\",\n                            \"properties\": {\n                              \"type\": {\n                                \"title\": \"Type\",\n                                \"type\": \"string\",\n                                \"default\": \"VFMODULE\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"resourceID\": {\n                                \"title\": \"Resource ID\",\n                                \"type\": \"string\",\n                                \"default\": \"Vloadbalancerms..vdns..module-3\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelInvariantId\": {\n                                \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n                                \"type\": \"string\",\n                                \"default\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelVersionId\": {\n                                \"title\": \"Model Version Id (ModelUUID)\",\n                                \"type\": \"string\",\n                                \"default\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelName\": {\n                                \"title\": \"Model Name\",\n                                \"type\": \"string\",\n                                \"default\": \"Vloadbalancerms..vdns..module-3\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelVersion\": {\n                                \"title\": \"Model Version\",\n                                \"type\": \"string\",\n                                \"default\": \"1\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelCustomizationId\": {\n                                \"title\": \"Customization ID\",\n                                \"type\": \"string\",\n                                \"default\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n                                \"readOnly\": \"True\"\n                              }\n                            }\n                          },\n                          {\n                            \"title\": \"VFMODULE-Vloadbalancerms..base_template..module-0\",\n                            \"properties\": {\n                              \"type\": {\n                                \"title\": \"Type\",\n                                \"type\": \"string\",\n                                \"default\": \"VFMODULE\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"resourceID\": {\n                                \"title\": \"Resource ID\",\n                                \"type\": \"string\",\n                                \"default\": \"Vloadbalancerms..base_template..module-0\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelInvariantId\": {\n                                \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n                                \"type\": \"string\",\n                                \"default\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelVersionId\": {\n                                \"title\": \"Model Version Id (ModelUUID)\",\n                                \"type\": \"string\",\n                                \"default\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelName\": {\n                                \"title\": \"Model Name\",\n                                \"type\": \"string\",\n                                \"default\": \"Vloadbalancerms..base_template..module-0\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelVersion\": {\n                                \"title\": \"Model Version\",\n                                \"type\": \"string\",\n                                \"default\": \"1\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelCustomizationId\": {\n                                \"title\": \"Customization ID\",\n                                \"type\": \"string\",\n                                \"default\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n                                \"readOnly\": \"True\"\n                              }\n                            }\n                          },\n                          {\n                            \"title\": \"VFMODULE-Vloadbalancerms..vlb..module-2\",\n                            \"properties\": {\n                              \"type\": {\n                                \"title\": \"Type\",\n                                \"type\": \"string\",\n                                \"default\": \"VFMODULE\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"resourceID\": {\n                                \"title\": \"Resource ID\",\n                                \"type\": \"string\",\n                                \"default\": \"Vloadbalancerms..vlb..module-2\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelInvariantId\": {\n                                \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n                                \"type\": \"string\",\n                                \"default\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelVersionId\": {\n                                \"title\": \"Model Version Id (ModelUUID)\",\n                                \"type\": \"string\",\n                                \"default\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelName\": {\n                                \"title\": \"Model Name\",\n                                \"type\": \"string\",\n                                \"default\": \"Vloadbalancerms..vlb..module-2\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelVersion\": {\n                                \"title\": \"Model Version\",\n                                \"type\": \"string\",\n                                \"default\": \"1\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelCustomizationId\": {\n                                \"title\": \"Customization ID\",\n                                \"type\": \"string\",\n                                \"default\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n                                \"readOnly\": \"True\"\n                              }\n                            }\n                          }\n                        ]\n                      }\n                    }\n                  }\n                }\n              }\n            },\n            \"guard_policies\": {\n              \"type\": \"array\",\n              \"format\": \"tabs-top\",\n              \"title\": \"Associated Guard policies\",\n              \"items\": {\n                \"headerTemplate\": \"{{self.policy-id}} - {{self.content.recipe}}\",\n                \"anyOf\": [\n                  {\n                    \"title\": \"Guard MinMax\",\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"policy-id\": {\n                        \"type\": \"string\",\n                        \"default\": \"guard.minmax.new\",\n                        \"pattern\": \"^(guard.minmax\\\\..*)$\"\n                      },\n                      \"content\": {\n                        \"properties\": {\n                          \"actor\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"APPC\",\n                              \"SO\",\n                              \"VFC\",\n                              \"SDNC\",\n                              \"SDNR\"\n                            ]\n                          },\n                          \"recipe\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"Restart\",\n                              \"Rebuild\",\n                              \"Migrate\",\n                              \"Health-Check\",\n                              \"ModifyConfig\",\n                              \"VF Module Create\",\n                              \"VF Module Delete\",\n                              \"Reroute\"\n                            ]\n                          },\n                          \"targets\": {\n                            \"type\": \"string\",\n                            \"default\": \".*\"\n                          },\n                          \"clname\": {\n                            \"type\": \"string\",\n                            \"template\": \"{{loopName}}\",\n                            \"watch\": {\n                              \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n                            }\n                          },\n                          \"guardActiveStart\": {\n                            \"type\": \"string\",\n                            \"default\": \"00:00:00Z\"\n                          },\n                          \"guardActiveEnd\": {\n                            \"type\": \"string\",\n                            \"default\": \"10:00:00Z\"\n                          },\n                          \"min\": {\n                            \"type\": \"string\",\n                            \"default\": \"0\"\n                          },\n                          \"max\": {\n                            \"type\": \"string\",\n                            \"default\": \"1\"\n                          }\n                        }\n                      }\n                    }\n                  },\n                  {\n                    \"title\": \"Guard Frequency\",\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"policy-id\": {\n                        \"type\": \"string\",\n                        \"default\": \"guard.frequency.new\",\n                        \"pattern\": \"^(guard.frequency\\\\..*)$\"\n                      },\n                      \"content\": {\n                        \"properties\": {\n                          \"actor\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"APPC\",\n                              \"SO\",\n                              \"VFC\",\n                              \"SDNC\",\n                              \"SDNR\"\n                            ]\n                          },\n                          \"recipe\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"Restart\",\n                              \"Rebuild\",\n                              \"Migrate\",\n                              \"Health-Check\",\n                              \"ModifyConfig\",\n                              \"VF Module Create\",\n                              \"VF Module Delete\",\n                              \"Reroute\"\n                            ]\n                          },\n                          \"targets\": {\n                            \"type\": \"string\",\n                            \"default\": \".*\"\n                          },\n                          \"clname\": {\n                            \"type\": \"string\",\n                            \"template\": \"{{loopName}}\",\n                            \"watch\": {\n                              \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n                            }\n                          },\n                          \"guardActiveStart\": {\n                            \"type\": \"string\",\n                            \"default\": \"00:00:00Z\"\n                          },\n                          \"guardActiveEnd\": {\n                            \"type\": \"string\",\n                            \"default\": \"10:00:00Z\"\n                          },\n                          \"limit\": {\n                            \"type\": \"string\"\n                          },\n                          \"timeWindow\": {\n                            \"type\": \"string\"\n                          },\n                          \"timeUnits\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"minute\",\n                              \"hour\",\n                              \"day\",\n                              \"week\",\n                              \"month\",\n                              \"year\"\n                            ]\n                          }\n                        }\n                      }\n                    }\n                  }\n                ]\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}','<svg xmlns=\"http://www.w3.org/2000/svg\"><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"start-circle\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><circle fill=\"none\" r=\"17\" cx=\"18\" cy=\"41\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"Arrow-50fe7213-6127-48d8-a460-22907d574a32\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><line y2=\"41\" fill=\"none\" x1=\"35\" x2=\"123\" y1=\"41\"/><polygon fill=\"none\" points=\" 121 39 121 43 125 41\"/><polygon points=\" 121 39 121 43 125 41\" stroke=\"none\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"VES\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><rect fill=\"none\" x=\"127\" width=\"123\" y=\"1\" height=\"82\"/></g><g fill-opacity=\"0\" fill=\"rgb(0,0,0)\" text-rendering=\"optimizeQuality\" shape-rendering=\"geometricPrecision\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"0\" stroke-width=\"2\"><rect x=\"127\" width=\"123\" y=\"1\" height=\"82\" stroke=\"none\"/></g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><text x=\"176.5\" xml:space=\"preserve\" y=\"46.5\" stroke=\"none\">VES</text><line y2=\"83\" fill=\"none\" x1=\"147\" x2=\"147\" y1=\"1\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"Arrow-d05ff912-d920-407b-9507-783b1de740a2\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><line y2=\"41\" fill=\"none\" x1=\"250\" x2=\"338\" y1=\"41\"/><polygon fill=\"none\" points=\" 336 39 336 43 340 41\"/><polygon points=\" 336 39 336 43 340 41\" stroke=\"none\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"tca_k8s_ejh5S_v1_0_ResourceInstanceName1_tca_3\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><rect fill=\"none\" x=\"342\" width=\"123\" y=\"1\" height=\"82\"/></g><g fill-opacity=\"0\" fill=\"rgb(0,0,0)\" text-rendering=\"optimizeQuality\" shape-rendering=\"geometricPrecision\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"0\" stroke-width=\"2\"><rect x=\"342\" width=\"123\" y=\"1\" height=\"82\" stroke=\"none\"/></g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><text x=\"379.5\" xml:space=\"preserve\" y=\"46.5\" stroke=\"none\">tca_k8s</text><line y2=\"61\" fill=\"none\" x1=\"342\" x2=\"465\" y1=\"61\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"Arrow-4a91f1ac-3543-48c8-b42a-0fa52f077471\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><line y2=\"41\" fill=\"none\" x1=\"465\" x2=\"553\" y1=\"41\"/><polygon fill=\"none\" points=\" 551 39 551 43 555 41\"/><polygon points=\" 551 39 551 43 555 41\" stroke=\"none\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"OperationalPolicy\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><rect fill=\"none\" x=\"557\" width=\"123\" y=\"1\" height=\"82\"/></g><g fill-opacity=\"0\" fill=\"rgb(0,0,0)\" text-rendering=\"optimizeQuality\" shape-rendering=\"geometricPrecision\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"0\" stroke-width=\"2\"><rect x=\"557\" width=\"123\" y=\"1\" height=\"82\" stroke=\"none\"/></g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><text x=\"564.5\" xml:space=\"preserve\" y=\"46.5\" stroke=\"none\">OperationalPolicy</text><line y2=\"1\" fill=\"none\" x1=\"557\" x2=\"618\" y1=\"42\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"Arrow-a0213bb1-47d0-4115-a69f-5c857d663719\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><line y2=\"41\" fill=\"none\" x1=\"680\" x2=\"768\" y1=\"41\"/><polygon fill=\"none\" points=\" 766 39 766 43 770 41\"/><polygon points=\" 766 39 766 43 770 41\" stroke=\"none\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"stop-circle\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"4\"><circle fill=\"none\" r=\"17\" cx=\"789\" cy=\"41\"/></g></g></g></svg>');
+INSERT INTO `loops` VALUES ('LOOP_ejh5S_v1_0_ResourceInstanceName2_tca_2','#\n# ============LICENSE_START====================================================\n# =============================================================================\n# Copyright (c) 2019 AT&T Intellectual Property. All rights reserved.\n# =============================================================================\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# ============LICENSE_END======================================================\n\ntosca_definitions_version: cloudify_dsl_1_3\n\ndescription: >\n  This blueprint deploys/manages the TCA module as a Docker container\n\nimports:\n  - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\n  - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/k8splugin/1.4.12/k8splugin_types.yaml\n#  - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/dcaepolicyplugin/2.3.0/dcaepolicyplugin_types.yaml\n  - https://nexus.onap.org/service/local/repositories/raw/content/org.onap.dcaegen2.platform.plugins/R4/clamppolicyplugin/1.0.0/clamppolicyplugin_types.yaml\ninputs:\n  aaiEnrichmentHost:\n    type: string\n    default: \"aai.onap.svc.cluster.local\"\n  aaiEnrichmentPort:\n    type: string\n    default: \"8443\"\n  enableAAIEnrichment:\n    type: string\n    default: true\n  dmaap_host:\n    type: string\n    default: message-router.onap\n  dmaap_port:\n    type: string\n    default: \"3904\"\n  enableRedisCaching:\n    type: string\n    default: false\n  redisHosts:\n    type: string\n    default: dcae-redis.onap.svc.cluster.local:6379\n  tag_version:\n    type: string\n    default: \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1\"\n  consul_host:\n    type: string\n    default: consul-server.onap\n  consul_port:\n    type: string\n    default: \"8500\"\n  cbs_host:\n    type: string\n    default: \"config-binding-servicel\"\n  cbs_port:\n    type: string\n    default: \"10000\"\n  policy_id:\n    type: string\n    default: \"onap.restart.tca\"\n  external_port:\n    type: string\n    description: Kubernetes node port on which CDAPgui is exposed\n    default: \"32012\"\n  policy_model_id:\n    type: string\n    default: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\nnode_templates:\n  tca_k8s:\n    type: dcae.nodes.ContainerizedServiceComponent\n    relationships:\n      - target: tca_policy\n        type: cloudify.relationships.depends_on\n    properties:\n        service_component_type: \'dcaegen2-analytics-tca\'\n        application_config: {}\n        docker_config: {}\n        image:\n          get_input: tag_version\n        log_info:\n          log_directory: \"/opt/app/TCAnalytics/logs\"\n        application_config:\n            app_config:\n                appDescription: DCAE Analytics Threshold Crossing Alert Application\n                appName: dcae-tca\n                tcaAlertsAbatementTableName: TCAAlertsAbatementTable\n                tcaAlertsAbatementTableTTLSeconds: \'1728000\'\n                tcaSubscriberOutputStreamName: TCASubscriberOutputStream\n                tcaVESAlertsTableName: TCAVESAlertsTable\n                tcaVESAlertsTableTTLSeconds: \'1728000\'\n                tcaVESMessageStatusTableName: TCAVESMessageStatusTable\n                tcaVESMessageStatusTableTTLSeconds: \'86400\'\n                thresholdCalculatorFlowletInstances: \'2\'\n            app_preferences:\n                aaiEnrichmentHost:\n                    get_input: aaiEnrichmentHost\n                aaiEnrichmentIgnoreSSLCertificateErrors: \'true\'\n                aaiEnrichmentPortNumber: \'8443\'\n                aaiEnrichmentProtocol: https\n                aaiEnrichmentUserName: dcae@dcae.onap.org\n                aaiEnrichmentUserPassword: demo123456!\n                aaiVMEnrichmentAPIPath: /aai/v11/search/nodes-query\n                aaiVNFEnrichmentAPIPath: /aai/v11/network/generic-vnfs/generic-vnf\n                enableAAIEnrichment:\n                    get_input: enableAAIEnrichment\n                enableRedisCaching:\n                    get_input: enableRedisCaching\n                redisHosts:\n                    get_input: redisHosts\n                enableAlertCEFFormat: \'false\'\n                publisherContentType: application/json\n                publisherHostName:\n                    get_input: dmaap_host\n                publisherHostPort:\n                    get_input: dmaap_port\n                publisherMaxBatchSize: \'1\'\n                publisherMaxRecoveryQueueSize: \'100000\'\n                publisherPollingInterval: \'20000\'\n                publisherProtocol: http\n                publisherTopicName: unauthenticated.DCAE_CL_OUTPUT\n                subscriberConsumerGroup: OpenDCAE-clamp\n                subscriberConsumerId: c12\n                subscriberContentType: application/json\n                subscriberHostName:\n                    get_input: dmaap_host\n                subscriberHostPort:\n                    get_input: dmaap_port\n                subscriberMessageLimit: \'-1\'\n                subscriberPollingInterval: \'30000\'\n                subscriberProtocol: http\n                subscriberTimeoutMS: \'-1\'\n                subscriberTopicName: unauthenticated.VES_MEASUREMENT_OUTPUT\n#                tca_policy: \'{\"domain\":\"measurementsForVfScaling\",\"metricsPerEventName\":[{\"eventName\":\"vFirewallBroadcastPackets\",\"controlLoopSchemaType\":\"VNF\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"LESS_OR_EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ONSET\"},{\"closedLoopControlName\":\"ControlLoop-vFirewall-d0a1dfc6-94f5-4fd4-a5b5-4630b438850a\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":700,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"eventName\":\"vLoadBalancer\",\"controlLoopSchemaType\":\"VM\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vDNS-6f37f56d-a87d-4b85-b6a9-cc953cf779b3\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\"thresholdValue\":300,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]},{\"eventName\":\"Measurement_vGMUX\",\"controlLoopSchemaType\":\"VNF\",\"policyScope\":\"DCAE\",\"policyName\":\"DCAE.Config_tca-hi-lo\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\",\"thresholdValue\":0,\"direction\":\"EQUAL\",\"severity\":\"MAJOR\",\"closedLoopEventStatus\":\"ABATED\"},{\"closedLoopControlName\":\"ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\",\"thresholdValue\":0,\"direction\":\"GREATER\",\"severity\":\"CRITICAL\",\"closedLoopEventStatus\":\"ONSET\"}]}]}\'\n        service_component_type: dcaegen2-analytics_tca\n    interfaces:\n      cloudify.interfaces.lifecycle:\n        start:\n          inputs:\n            envs:\n                DMAAPHOST:\n                    { get_input: dmaap_host }\n                DMAAPPORT:\n                    { get_input: dmaap_port }\n                DMAAPPUBTOPIC: \"unauthenticated.DCAE_CL_OUTPUT\"\n                DMAAPSUBTOPIC: \"unauthenticated.VES_MEASUREMENT_OUTPUT\"\n                AAIHOST:\n                    { get_input: aaiEnrichmentHost }\n                AAIPORT:\n                    { get_input: aaiEnrichmentPort }\n                CONSUL_HOST:\n                    { get_input: consul_host }\n                CONSUL_PORT:\n                    { get_input: consul_port }\n                CBS_HOST:\n                    { get_input: cbs_host }\n                CBS_PORT:\n                    { get_input: cbs_port }\n                CONFIG_BINDING_SERVICE: \"config_binding_service\"\n            ports:\n              - concat: [\"11011:\", { get_input: external_port }]\n  tca_policy:\n    type: clamp.nodes.policy\n    properties:\n      policy_id:\n           get_input: policy_id\n      policy_model_id: \"onap.policies.monitoring.cdap.tca.hi.lo.app\"\n','typeId-709a8102-811f-48f4-bfb4-690a8f280ece',NULL,NULL,'{\n  \"dcaeDeployParameters\": {\n    \"aaiEnrichmentHost\": \"aai.onap.svc.cluster.local\",\n    \"aaiEnrichmentPort\": \"8443\",\n    \"enableAAIEnrichment\": true,\n    \"dmaap_host\": \"message-router.onap\",\n    \"dmaap_port\": \"3904\",\n    \"enableRedisCaching\": false,\n    \"redisHosts\": \"dcae-redis.onap.svc.cluster.local:6379\",\n    \"tag_version\": \"nexus3.onap.org:10001/onap/org.onap.dcaegen2.deployments.tca-cdap-container:1.1.1\",\n    \"consul_host\": \"consul-server.onap\",\n    \"consul_port\": \"8500\",\n    \"cbs_host\": \"config-binding-servicel\",\n    \"cbs_port\": \"10000\",\n    \"external_port\": \"32012\",\n    \"policy_model_id\": \"onap.policies.monitoring.cdap.tca.hi.lo.app\",\n    \"policy_id\": \"tca_k8s_ejh5S_v1_0_ResourceInstanceName2_tca_2\"\n  }\n}','DESIGN','{\n  \"serviceDetails\": {\n    \"serviceType\": \"\",\n    \"serviceRole\": \"\",\n    \"description\": \"vLBMS\",\n    \"type\": \"Service\",\n    \"instantiationType\": \"A-la-carte\",\n    \"namingPolicy\": \"\",\n    \"serviceEcompNaming\": \"true\",\n    \"environmentContext\": \"General_Revenue-Bearing\",\n    \"name\": \"vLoadBalancerMS\",\n    \"invariantUUID\": \"30ec5b59-4799-48d8-ac5f-1058a6b0e48f\",\n    \"ecompGeneratedNaming\": \"true\",\n    \"UUID\": \"63cac700-ab9a-4115-a74f-7eac85e3fce0\",\n    \"category\": \"Network L4+\"\n  },\n  \"resourceDetails\": {\n    \"CP\": {},\n    \"VL\": {},\n    \"VF\": {\n      \"vLoadBalancerMS 0\": {\n        \"resourceVendor\": \"Test\",\n        \"name\": \"vLoadBalancerMS\",\n        \"resourceVendorModelNumber\": \"\",\n        \"description\": \"vLBMS\",\n        \"invariantUUID\": \"1a31b9f2-e50d-43b7-89b3-a040250cf506\",\n        \"UUID\": \"b4c4f3d7-929e-4b6d-a1cd-57e952ddc3e6\",\n        \"type\": \"VF\",\n        \"category\": \"Application L4+\",\n        \"subcategory\": \"Load Balancer\",\n        \"version\": \"1.0\",\n        \"customizationUUID\": \"465246dc-7748-45f4-a013-308d92922552\",\n        \"resourceVendorRelease\": \"1.0\"\n      }\n    },\n    \"CR\": {},\n    \"VFC\": {},\n    \"PNF\": {},\n    \"Service\": {},\n    \"CVFC\": {},\n    \"Service Proxy\": {},\n    \"Configuration\": {},\n    \"AllottedResource\": {},\n    \"VFModule\": {\n      \"Vloadbalancerms..vpkg..module-1\": {\n        \"vfModuleModelInvariantUUID\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n        \"vfModuleModelVersion\": \"1\",\n        \"vfModuleModelName\": \"Vloadbalancerms..vpkg..module-1\",\n        \"vfModuleModelUUID\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n        \"vfModuleModelCustomizationUUID\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n        \"min_vf_module_instances\": 0,\n        \"vf_module_label\": \"vpkg\",\n        \"max_vf_module_instances\": 1,\n        \"vf_module_type\": \"Expansion\",\n        \"isBase\": false,\n        \"initial_count\": 0,\n        \"volume_group\": false\n      },\n      \"Vloadbalancerms..vdns..module-3\": {\n        \"vfModuleModelInvariantUUID\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n        \"vfModuleModelVersion\": \"1\",\n        \"vfModuleModelName\": \"Vloadbalancerms..vdns..module-3\",\n        \"vfModuleModelUUID\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n        \"vfModuleModelCustomizationUUID\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n        \"min_vf_module_instances\": 0,\n        \"vf_module_label\": \"vdns\",\n        \"max_vf_module_instances\": 50,\n        \"vf_module_type\": \"Expansion\",\n        \"isBase\": false,\n        \"initial_count\": 0,\n        \"volume_group\": false\n      },\n      \"Vloadbalancerms..base_template..module-0\": {\n        \"vfModuleModelInvariantUUID\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n        \"vfModuleModelVersion\": \"1\",\n        \"vfModuleModelName\": \"Vloadbalancerms..base_template..module-0\",\n        \"vfModuleModelUUID\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n        \"vfModuleModelCustomizationUUID\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n        \"min_vf_module_instances\": 1,\n        \"vf_module_label\": \"base_template\",\n        \"max_vf_module_instances\": 1,\n        \"vf_module_type\": \"Base\",\n        \"isBase\": true,\n        \"initial_count\": 1,\n        \"volume_group\": false\n      },\n      \"Vloadbalancerms..vlb..module-2\": {\n        \"vfModuleModelInvariantUUID\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n        \"vfModuleModelVersion\": \"1\",\n        \"vfModuleModelName\": \"Vloadbalancerms..vlb..module-2\",\n        \"vfModuleModelUUID\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n        \"vfModuleModelCustomizationUUID\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n        \"min_vf_module_instances\": 0,\n        \"vf_module_label\": \"vlb\",\n        \"max_vf_module_instances\": 1,\n        \"vf_module_type\": \"Expansion\",\n        \"isBase\": false,\n        \"initial_count\": 0,\n        \"volume_group\": false\n      }\n    }\n  }\n}','{\n  \"schema\": {\n    \"uniqueItems\": \"true\",\n    \"format\": \"tabs\",\n    \"type\": \"array\",\n    \"minItems\": 1,\n    \"maxItems\": 1,\n    \"title\": \"Operational policies\",\n    \"items\": {\n      \"type\": \"object\",\n      \"title\": \"Operational Policy Item\",\n      \"id\": \"operational_policy_item\",\n      \"headerTemplate\": \"{{self.name}}\",\n      \"required\": [\n        \"name\",\n        \"configurationsJson\"\n      ],\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"title\": \"Operational policy name\",\n          \"readOnly\": \"True\"\n        },\n        \"configurationsJson\": {\n          \"type\": \"object\",\n          \"title\": \"Configuration\",\n          \"required\": [\n            \"operational_policy\",\n            \"guard_policies\"\n          ],\n          \"properties\": {\n            \"operational_policy\": {\n              \"type\": \"object\",\n              \"title\": \"Related Parameters\",\n              \"required\": [\n                \"controlLoop\",\n                \"policies\"\n              ],\n              \"properties\": {\n                \"controlLoop\": {\n                  \"type\": \"object\",\n                  \"title\": \"Control Loop details\",\n                  \"required\": [\n                    \"timeout\",\n                    \"abatement\",\n                    \"trigger_policy\",\n                    \"controlLoopName\"\n                  ],\n                  \"properties\": {\n                    \"timeout\": {\n                      \"type\": \"string\",\n                      \"title\": \"Overall Time Limit\",\n                      \"default\": \"0\",\n                      \"format\": \"number\"\n                    },\n                    \"abatement\": {\n                      \"type\": \"string\",\n                      \"title\": \"Abatement\",\n                      \"enum\": [\n                        \"True\",\n                        \"False\"\n                      ]\n                    },\n                    \"trigger_policy\": {\n                      \"type\": \"string\",\n                      \"title\": \"Policy Decision Entry\"\n                    },\n                    \"controlLoopName\": {\n                      \"type\": \"string\",\n                      \"title\": \"Control loop name\",\n                      \"readOnly\": \"True\"\n                    }\n                  }\n                },\n                \"policies\": {\n                  \"uniqueItems\": \"true\",\n                  \"id\": \"policies_array\",\n                  \"type\": \"array\",\n                  \"title\": \"Policy Decision Tree\",\n                  \"format\": \"tabs-top\",\n                  \"items\": {\n                    \"title\": \"Policy Decision\",\n                    \"type\": \"object\",\n                    \"id\": \"policy_item\",\n                    \"headerTemplate\": \"{{self.id}} - {{self.recipe}}\",\n                    \"format\": \"categories\",\n                    \"basicCategoryTitle\": \"recipe\",\n                    \"required\": [\n                      \"id\",\n                      \"recipe\",\n                      \"retry\",\n                      \"timeout\",\n                      \"actor\",\n                      \"success\",\n                      \"failure\",\n                      \"failure_timeout\",\n                      \"failure_retries\",\n                      \"failure_exception\",\n                      \"failure_guard\",\n                      \"target\"\n                    ],\n                    \"properties\": {\n                      \"id\": {\n                        \"default\": \"Policy 1\",\n                        \"title\": \"Policy ID\",\n                        \"type\": \"string\"\n                      },\n                      \"recipe\": {\n                        \"title\": \"Recipe\",\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"Restart\",\n                          \"Rebuild\",\n                          \"Migrate\",\n                          \"Health-Check\",\n                          \"ModifyConfig\",\n                          \"VF Module Create\",\n                          \"VF Module Delete\",\n                          \"Reroute\"\n                        ]\n                      },\n                      \"retry\": {\n                        \"default\": \"0\",\n                        \"title\": \"Number of Retry\",\n                        \"type\": \"string\",\n                        \"format\": \"number\"\n                      },\n                      \"timeout\": {\n                        \"default\": \"0\",\n                        \"title\": \"Timeout\",\n                        \"type\": \"string\",\n                        \"format\": \"number\"\n                      },\n                      \"actor\": {\n                        \"title\": \"Actor\",\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"APPC\",\n                          \"SO\",\n                          \"VFC\",\n                          \"SDNC\",\n                          \"SDNR\"\n                        ]\n                      },\n                      \"payload\": {\n                        \"title\": \"Payload (YAML)\",\n                        \"type\": \"string\",\n                        \"format\": \"textarea\"\n                      },\n                      \"success\": {\n                        \"default\": \"final_success\",\n                        \"title\": \"When Success\",\n                        \"type\": \"string\"\n                      },\n                      \"failure\": {\n                        \"default\": \"final_failure\",\n                        \"title\": \"When Failure\",\n                        \"type\": \"string\"\n                      },\n                      \"failure_timeout\": {\n                        \"default\": \"final_failure_timeout\",\n                        \"title\": \"When Failure Timeout\",\n                        \"type\": \"string\"\n                      },\n                      \"failure_retries\": {\n                        \"default\": \"final_failure_retries\",\n                        \"title\": \"When Failure Retries\",\n                        \"type\": \"string\"\n                      },\n                      \"failure_exception\": {\n                        \"default\": \"final_failure_exception\",\n                        \"title\": \"When Failure Exception\",\n                        \"type\": \"string\"\n                      },\n                      \"failure_guard\": {\n                        \"default\": \"final_failure_guard\",\n                        \"title\": \"When Failure Guard\",\n                        \"type\": \"string\"\n                      },\n                      \"target\": {\n                        \"type\": \"object\",\n                        \"required\": [\n                          \"type\",\n                          \"resourceID\"\n                        ],\n                        \"anyOf\": [\n                          {\n                            \"title\": \"User Defined\",\n                            \"additionalProperties\": \"True\",\n                            \"properties\": {\n                              \"type\": {\n                                \"title\": \"Target type\",\n                                \"type\": \"string\",\n                                \"default\": \"\",\n                                \"enum\": [\n                                  \"VNF\",\n                                  \"VFMODULE\",\n                                  \"VM\"\n                                ]\n                              },\n                              \"resourceID\": {\n                                \"title\": \"Target type\",\n                                \"type\": \"string\",\n                                \"default\": \"\"\n                              }\n                            }\n                          },\n                          {\n                            \"title\": \"VNF-vLoadBalancerMS 0\",\n                            \"properties\": {\n                              \"type\": {\n                                \"title\": \"Type\",\n                                \"type\": \"string\",\n                                \"default\": \"VNF\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"resourceID\": {\n                                \"title\": \"Resource ID\",\n                                \"type\": \"string\",\n                                \"default\": \"vLoadBalancerMS\",\n                                \"readOnly\": \"True\"\n                              }\n                            }\n                          },\n                          {\n                            \"title\": \"VFMODULE-Vloadbalancerms..vpkg..module-1\",\n                            \"properties\": {\n                              \"type\": {\n                                \"title\": \"Type\",\n                                \"type\": \"string\",\n                                \"default\": \"VFMODULE\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"resourceID\": {\n                                \"title\": \"Resource ID\",\n                                \"type\": \"string\",\n                                \"default\": \"Vloadbalancerms..vpkg..module-1\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelInvariantId\": {\n                                \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n                                \"type\": \"string\",\n                                \"default\": \"ca052563-eb92-4b5b-ad41-9111768ce043\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelVersionId\": {\n                                \"title\": \"Model Version Id (ModelUUID)\",\n                                \"type\": \"string\",\n                                \"default\": \"1e725ccc-b823-4f67-82b9-4f4367070dbc\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelName\": {\n                                \"title\": \"Model Name\",\n                                \"type\": \"string\",\n                                \"default\": \"Vloadbalancerms..vpkg..module-1\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelVersion\": {\n                                \"title\": \"Model Version\",\n                                \"type\": \"string\",\n                                \"default\": \"1\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelCustomizationId\": {\n                                \"title\": \"Customization ID\",\n                                \"type\": \"string\",\n                                \"default\": \"1bffdc31-a37d-4dee-b65c-dde623a76e52\",\n                                \"readOnly\": \"True\"\n                              }\n                            }\n                          },\n                          {\n                            \"title\": \"VFMODULE-Vloadbalancerms..vdns..module-3\",\n                            \"properties\": {\n                              \"type\": {\n                                \"title\": \"Type\",\n                                \"type\": \"string\",\n                                \"default\": \"VFMODULE\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"resourceID\": {\n                                \"title\": \"Resource ID\",\n                                \"type\": \"string\",\n                                \"default\": \"Vloadbalancerms..vdns..module-3\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelInvariantId\": {\n                                \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n                                \"type\": \"string\",\n                                \"default\": \"4c10ba9b-f88f-415e-9de3-5d33336047fa\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelVersionId\": {\n                                \"title\": \"Model Version Id (ModelUUID)\",\n                                \"type\": \"string\",\n                                \"default\": \"4fa73b49-8a6c-493e-816b-eb401567b720\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelName\": {\n                                \"title\": \"Model Name\",\n                                \"type\": \"string\",\n                                \"default\": \"Vloadbalancerms..vdns..module-3\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelVersion\": {\n                                \"title\": \"Model Version\",\n                                \"type\": \"string\",\n                                \"default\": \"1\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelCustomizationId\": {\n                                \"title\": \"Customization ID\",\n                                \"type\": \"string\",\n                                \"default\": \"bafcdab0-801d-4d81-9ead-f464640a38b1\",\n                                \"readOnly\": \"True\"\n                              }\n                            }\n                          },\n                          {\n                            \"title\": \"VFMODULE-Vloadbalancerms..base_template..module-0\",\n                            \"properties\": {\n                              \"type\": {\n                                \"title\": \"Type\",\n                                \"type\": \"string\",\n                                \"default\": \"VFMODULE\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"resourceID\": {\n                                \"title\": \"Resource ID\",\n                                \"type\": \"string\",\n                                \"default\": \"Vloadbalancerms..base_template..module-0\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelInvariantId\": {\n                                \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n                                \"type\": \"string\",\n                                \"default\": \"921f7c96-ebdd-42e6-81b9-1cfc0c9796f3\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelVersionId\": {\n                                \"title\": \"Model Version Id (ModelUUID)\",\n                                \"type\": \"string\",\n                                \"default\": \"63734409-f745-4e4d-a38b-131638a0edce\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelName\": {\n                                \"title\": \"Model Name\",\n                                \"type\": \"string\",\n                                \"default\": \"Vloadbalancerms..base_template..module-0\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelVersion\": {\n                                \"title\": \"Model Version\",\n                                \"type\": \"string\",\n                                \"default\": \"1\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelCustomizationId\": {\n                                \"title\": \"Customization ID\",\n                                \"type\": \"string\",\n                                \"default\": \"86baddea-c730-4fb8-9410-cd2e17fd7f27\",\n                                \"readOnly\": \"True\"\n                              }\n                            }\n                          },\n                          {\n                            \"title\": \"VFMODULE-Vloadbalancerms..vlb..module-2\",\n                            \"properties\": {\n                              \"type\": {\n                                \"title\": \"Type\",\n                                \"type\": \"string\",\n                                \"default\": \"VFMODULE\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"resourceID\": {\n                                \"title\": \"Resource ID\",\n                                \"type\": \"string\",\n                                \"default\": \"Vloadbalancerms..vlb..module-2\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelInvariantId\": {\n                                \"title\": \"Model Invariant Id (ModelInvariantUUID)\",\n                                \"type\": \"string\",\n                                \"default\": \"a772a1f4-0064-412c-833d-4749b15828dd\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelVersionId\": {\n                                \"title\": \"Model Version Id (ModelUUID)\",\n                                \"type\": \"string\",\n                                \"default\": \"0f5c3f6a-650a-4303-abb6-fff3e573a07a\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelName\": {\n                                \"title\": \"Model Name\",\n                                \"type\": \"string\",\n                                \"default\": \"Vloadbalancerms..vlb..module-2\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelVersion\": {\n                                \"title\": \"Model Version\",\n                                \"type\": \"string\",\n                                \"default\": \"1\",\n                                \"readOnly\": \"True\"\n                              },\n                              \"modelCustomizationId\": {\n                                \"title\": \"Customization ID\",\n                                \"type\": \"string\",\n                                \"default\": \"96a78aad-4ffb-4ef0-9c4f-deb03bf1d806\",\n                                \"readOnly\": \"True\"\n                              }\n                            }\n                          }\n                        ]\n                      }\n                    }\n                  }\n                }\n              }\n            },\n            \"guard_policies\": {\n              \"type\": \"array\",\n              \"format\": \"tabs-top\",\n              \"title\": \"Associated Guard policies\",\n              \"items\": {\n                \"headerTemplate\": \"{{self.policy-id}} - {{self.content.recipe}}\",\n                \"anyOf\": [\n                  {\n                    \"title\": \"Guard MinMax\",\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"policy-id\": {\n                        \"type\": \"string\",\n                        \"default\": \"guard.minmax.new\",\n                        \"pattern\": \"^(guard.minmax\\\\..*)$\"\n                      },\n                      \"content\": {\n                        \"properties\": {\n                          \"actor\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"APPC\",\n                              \"SO\",\n                              \"VFC\",\n                              \"SDNC\",\n                              \"SDNR\"\n                            ]\n                          },\n                          \"recipe\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"Restart\",\n                              \"Rebuild\",\n                              \"Migrate\",\n                              \"Health-Check\",\n                              \"ModifyConfig\",\n                              \"VF Module Create\",\n                              \"VF Module Delete\",\n                              \"Reroute\"\n                            ]\n                          },\n                          \"targets\": {\n                            \"type\": \"string\",\n                            \"default\": \".*\"\n                          },\n                          \"clname\": {\n                            \"type\": \"string\",\n                            \"template\": \"{{loopName}}\",\n                            \"watch\": {\n                              \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n                            }\n                          },\n                          \"guardActiveStart\": {\n                            \"type\": \"string\",\n                            \"default\": \"00:00:00Z\"\n                          },\n                          \"guardActiveEnd\": {\n                            \"type\": \"string\",\n                            \"default\": \"10:00:00Z\"\n                          },\n                          \"min\": {\n                            \"type\": \"string\",\n                            \"default\": \"0\"\n                          },\n                          \"max\": {\n                            \"type\": \"string\",\n                            \"default\": \"1\"\n                          }\n                        }\n                      }\n                    }\n                  },\n                  {\n                    \"title\": \"Guard Frequency\",\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"policy-id\": {\n                        \"type\": \"string\",\n                        \"default\": \"guard.frequency.new\",\n                        \"pattern\": \"^(guard.frequency\\\\..*)$\"\n                      },\n                      \"content\": {\n                        \"properties\": {\n                          \"actor\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"APPC\",\n                              \"SO\",\n                              \"VFC\",\n                              \"SDNC\",\n                              \"SDNR\"\n                            ]\n                          },\n                          \"recipe\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"Restart\",\n                              \"Rebuild\",\n                              \"Migrate\",\n                              \"Health-Check\",\n                              \"ModifyConfig\",\n                              \"VF Module Create\",\n                              \"VF Module Delete\",\n                              \"Reroute\"\n                            ]\n                          },\n                          \"targets\": {\n                            \"type\": \"string\",\n                            \"default\": \".*\"\n                          },\n                          \"clname\": {\n                            \"type\": \"string\",\n                            \"template\": \"{{loopName}}\",\n                            \"watch\": {\n                              \"loopName\": \"operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName\"\n                            }\n                          },\n                          \"guardActiveStart\": {\n                            \"type\": \"string\",\n                            \"default\": \"00:00:00Z\"\n                          },\n                          \"guardActiveEnd\": {\n                            \"type\": \"string\",\n                            \"default\": \"10:00:00Z\"\n                          },\n                          \"limit\": {\n                            \"type\": \"string\"\n                          },\n                          \"timeWindow\": {\n                            \"type\": \"string\"\n                          },\n                          \"timeUnits\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"minute\",\n                              \"hour\",\n                              \"day\",\n                              \"week\",\n                              \"month\",\n                              \"year\"\n                            ]\n                          }\n                        }\n                      }\n                    }\n                  }\n                ]\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}','<svg xmlns=\"http://www.w3.org/2000/svg\"><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"start-circle\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><circle fill=\"none\" r=\"17\" cx=\"18\" cy=\"41\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"Arrow-75d5a3c5-3f47-4bcc-9c73-7c14a018643b\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><line y2=\"41\" fill=\"none\" x1=\"35\" x2=\"123\" y1=\"41\"/><polygon fill=\"none\" points=\" 121 39 121 43 125 41\"/><polygon points=\" 121 39 121 43 125 41\" stroke=\"none\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"VES\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><rect fill=\"none\" x=\"127\" width=\"123\" y=\"1\" height=\"82\"/></g><g fill-opacity=\"0\" fill=\"rgb(0,0,0)\" text-rendering=\"optimizeQuality\" shape-rendering=\"geometricPrecision\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"0\" stroke-width=\"2\"><rect x=\"127\" width=\"123\" y=\"1\" height=\"82\" stroke=\"none\"/></g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><text x=\"176.5\" xml:space=\"preserve\" y=\"46.5\" stroke=\"none\">VES</text><line y2=\"83\" fill=\"none\" x1=\"147\" x2=\"147\" y1=\"1\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"Arrow-13e0b331-ffed-46c0-afee-a61535eb64e4\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><line y2=\"41\" fill=\"none\" x1=\"250\" x2=\"338\" y1=\"41\"/><polygon fill=\"none\" points=\" 336 39 336 43 340 41\"/><polygon points=\" 336 39 336 43 340 41\" stroke=\"none\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"tca_k8s_ejh5S_v1_0_ResourceInstanceName2_tca_2\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><rect fill=\"none\" x=\"342\" width=\"123\" y=\"1\" height=\"82\"/></g><g fill-opacity=\"0\" fill=\"rgb(0,0,0)\" text-rendering=\"optimizeQuality\" shape-rendering=\"geometricPrecision\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"0\" stroke-width=\"2\"><rect x=\"342\" width=\"123\" y=\"1\" height=\"82\" stroke=\"none\"/></g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><text x=\"379.5\" xml:space=\"preserve\" y=\"46.5\" stroke=\"none\">tca_k8s</text><line y2=\"61\" fill=\"none\" x1=\"342\" x2=\"465\" y1=\"61\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"Arrow-875d4430-9af1-44ba-a524-bb1f56a9b2f9\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><line y2=\"41\" fill=\"none\" x1=\"465\" x2=\"553\" y1=\"41\"/><polygon fill=\"none\" points=\" 551 39 551 43 555 41\"/><polygon points=\" 551 39 551 43 555 41\" stroke=\"none\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"OperationalPolicy\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><rect fill=\"none\" x=\"557\" width=\"123\" y=\"1\" height=\"82\"/></g><g fill-opacity=\"0\" fill=\"rgb(0,0,0)\" text-rendering=\"optimizeQuality\" shape-rendering=\"geometricPrecision\" stroke=\"rgb(0,0,0)\" stroke-opacity=\"0\" stroke-width=\"2\"><rect x=\"557\" width=\"123\" y=\"1\" height=\"82\" stroke=\"none\"/></g><g text-rendering=\"optimizeQuality\" stroke-width=\"2\" shape-rendering=\"geometricPrecision\" font-family=\"sans-serif\"><text x=\"564.5\" xml:space=\"preserve\" y=\"46.5\" stroke=\"none\">OperationalPolicy</text><line y2=\"1\" fill=\"none\" x1=\"557\" x2=\"618\" y1=\"42\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"Arrow-a2c37cff-448d-46df-9af0-0b51076b0954\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"2\"><line y2=\"41\" fill=\"none\" x1=\"680\" x2=\"768\" y1=\"41\"/><polygon fill=\"none\" points=\" 766 39 766 43 770 41\"/><polygon points=\" 766 39 766 43 770 41\" stroke=\"none\"/></g></g></g><g fill-opacity=\"1\" color-rendering=\"auto\" color-interpolation=\"auto\" text-rendering=\"auto\" stroke=\"black\" stroke-linecap=\"square\" stroke-miterlimit=\"10\" shape-rendering=\"auto\" stroke-opacity=\"1\" fill=\"black\" stroke-dasharray=\"none\" font-weight=\"normal\" stroke-width=\"1\" font-family=\"\'Dialog\'\" font-style=\"normal\" data-element-id=\"stop-circle\" stroke-linejoin=\"miter\" font-size=\"12px\" image-rendering=\"auto\" stroke-dashoffset=\"0\"><!--Generated by the Batik Graphics2D SVG Generator--><defs id=\"genericDefs\"/><g><g shape-rendering=\"geometricPrecision\" text-rendering=\"optimizeQuality\" stroke-width=\"4\"><circle fill=\"none\" r=\"17\" cx=\"789\" cy=\"41\"/></g></g></g></svg>');
 /*!40000 ALTER TABLE `loops` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -86,9 +605,9 @@ UNLOCK TABLES;
 
 LOCK TABLES `loops_microservicepolicies` WRITE;
 /*!40000 ALTER TABLE `loops_microservicepolicies` DISABLE KEYS */;
-INSERT INTO `loops_microservicepolicies` VALUES ('LOOP_iYTIP_v1_0_ResourceInstanceName1_tca','TCA_iYTIP_v1_0_ResourceInstanceName1_tca');
-INSERT INTO `loops_microservicepolicies` VALUES ('LOOP_iYTIP_v1_0_ResourceInstanceName1_tca_3','TCA_iYTIP_v1_0_ResourceInstanceName1_tca_3');
-INSERT INTO `loops_microservicepolicies` VALUES ('LOOP_iYTIP_v1_0_ResourceInstanceName2_tca_2','TCA_iYTIP_v1_0_ResourceInstanceName2_tca_2');
+INSERT INTO `loops_microservicepolicies` VALUES ('LOOP_ejh5S_v1_0_ResourceInstanceName1_tca','TCA_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `loops_microservicepolicies` VALUES ('LOOP_ejh5S_v1_0_ResourceInstanceName1_tca_3','tca_k8s_ejh5S_v1_0_ResourceInstanceName1_tca_3');
+INSERT INTO `loops_microservicepolicies` VALUES ('LOOP_ejh5S_v1_0_ResourceInstanceName2_tca_2','tca_k8s_ejh5S_v1_0_ResourceInstanceName2_tca_2');
 /*!40000 ALTER TABLE `loops_microservicepolicies` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -98,9 +617,9 @@ UNLOCK TABLES;
 
 LOCK TABLES `micro_service_policies` WRITE;
 /*!40000 ALTER TABLE `micro_service_policies` DISABLE KEYS */;
-INSERT INTO `micro_service_policies` VALUES ('TCA_iYTIP_v1_0_ResourceInstanceName1_tca','{\n  \"schema\": {\n    \"uniqueItems\": \"true\",\n    \"format\": \"tabs-top\",\n    \"type\": \"array\",\n    \"title\": \"TCA Policy JSON\",\n    \"items\": {\n      \"type\": \"object\",\n      \"title\": \"TCA Policy JSON\",\n      \"required\": [\n        \"domain\",\n        \"metricsPerEventName\"\n      ],\n      \"properties\": {\n        \"domain\": {\n          \"propertyOrder\": 1001,\n          \"default\": \"measurementsForVfScaling\",\n          \"title\": \"Domain name to which TCA needs to be applied\",\n          \"type\": \"string\"\n        },\n        \"metricsPerEventName\": {\n          \"propertyOrder\": 1002,\n          \"uniqueItems\": \"true\",\n          \"format\": \"tabs-top\",\n          \"title\": \"Contains eventName and threshold details that need to be applied to given eventName\",\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"required\": [\n              \"controlLoopSchemaType\",\n              \"eventName\",\n              \"policyName\",\n              \"policyScope\",\n              \"policyVersion\",\n              \"thresholds\"\n            ],\n            \"properties\": {\n              \"policyVersion\": {\n                \"propertyOrder\": 1007,\n                \"title\": \"TCA Policy Scope Version\",\n                \"type\": \"string\"\n              },\n              \"thresholds\": {\n                \"propertyOrder\": 1008,\n                \"uniqueItems\": \"true\",\n                \"format\": \"tabs-top\",\n                \"title\": \"Thresholds associated with eventName\",\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"object\",\n                  \"required\": [\n                    \"closedLoopControlName\",\n                    \"closedLoopEventStatus\",\n                    \"direction\",\n                    \"fieldPath\",\n                    \"severity\",\n                    \"thresholdValue\",\n                    \"version\"\n                  ],\n                  \"properties\": {\n                    \"severity\": {\n                      \"propertyOrder\": 1013,\n                      \"title\": \"Threshold Event Severity\",\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"CRITICAL\",\n                        \"MAJOR\",\n                        \"MINOR\",\n                        \"WARNING\",\n                        \"NORMAL\"\n                      ]\n                    },\n                    \"fieldPath\": {\n                      \"propertyOrder\": 1012,\n                      \"title\": \"Json field Path as per CEF message which needs to be analyzed for TCA\",\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\",\n                        \"$.event.measurementsForVfScalingFields.meanRequestLatency\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\",\n                        \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\"\n                      ]\n                    },\n                    \"thresholdValue\": {\n                      \"propertyOrder\": 1014,\n                      \"title\": \"Threshold value for the field Path inside CEF message\",\n                      \"type\": \"integer\"\n                    },\n                    \"closedLoopEventStatus\": {\n                      \"propertyOrder\": 1010,\n                      \"title\": \"Closed Loop Event Status of the threshold\",\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"ONSET\",\n                        \"ABATED\"\n                      ]\n                    },\n                    \"closedLoopControlName\": {\n                      \"propertyOrder\": 1009,\n                      \"title\": \"Closed Loop Control Name associated with the threshold\",\n                      \"type\": \"string\"\n                    },\n                    \"version\": {\n                      \"propertyOrder\": 1015,\n                      \"title\": \"Version number associated with the threshold\",\n                      \"type\": \"string\"\n                    },\n                    \"direction\": {\n                      \"propertyOrder\": 1011,\n                      \"title\": \"Direction of the threshold\",\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"LESS\",\n                        \"LESS_OR_EQUAL\",\n                        \"GREATER\",\n                        \"GREATER_OR_EQUAL\",\n                        \"EQUAL\"\n                      ]\n                    }\n                  }\n                }\n              },\n              \"policyName\": {\n                \"propertyOrder\": 1005,\n                \"title\": \"TCA Policy Scope Name\",\n                \"type\": \"string\"\n              },\n              \"controlLoopSchemaType\": {\n                \"propertyOrder\": 1003,\n                \"title\": \"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\",\n                \"type\": \"string\",\n                \"enum\": [\n                  \"VM\",\n                  \"VNF\"\n                ]\n              },\n              \"policyScope\": {\n                \"propertyOrder\": 1006,\n                \"title\": \"TCA Policy Scope\",\n                \"type\": \"string\"\n              },\n              \"eventName\": {\n                \"propertyOrder\": 1004,\n                \"title\": \"Event name to which thresholds need to be applied\",\n                \"type\": \"string\"\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}','onap.policy.monitoring.cdap.tca.hi.lo.app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n    onap.policies.Monitoring:\n        derived_from: tosca.policies.Root\n        description: a base policy type for all policies that governs monitoring provisioning\n    onap.policy.monitoring.cdap.tca.hi.lo.app:\n        derived_from: onap.policies.Monitoring\n        version: 1.0.0\n        properties:\n            tca_policy:\n                type: map\n                description: TCA Policy JSON\n                entry_schema:\n                    type: onap.datatypes.monitoring.tca_policy\ndata_types:\n    onap.datatypes.monitoring.metricsPerEventName:\n        derived_from: tosca.datatypes.Root\n        properties:\n            controlLoopSchemaType:\n                type: string\n                required: true\n                description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n                constraints:\n                  - valid_values:\n                      - VM\n                      - VNF\n            eventName:\n                type: string\n                required: true\n                description: Event name to which thresholds need to be applied\n            policyName:\n                type: string\n                required: true\n                description: TCA Policy Scope Name\n            policyScope:\n                type: string\n                required: true\n                description: TCA Policy Scope\n            policyVersion:\n                type: string\n                required: true\n                description: TCA Policy Scope Version\n            thresholds:\n                type: list\n                required: true\n                description: Thresholds associated with eventName\n                entry_schema:\n                    type: onap.datatypes.monitoring.thresholds\n    onap.datatypes.monitoring.tca_policy:\n        derived_from: tosca.datatypes.Root\n        properties:\n            domain:\n                type: string\n                required: true\n                description: Domain name to which TCA needs to be applied\n                default: measurementsForVfScaling\n                constraints:\n                  - equal: measurementsForVfScaling\n            metricsPerEventName:\n                type: list\n                required: true\n                description: Contains eventName and threshold details that need to be applied to given eventName\n                entry_schema:\n                    type: onap.datatypes.monitoring.metricsPerEventName\n    onap.datatypes.monitoring.thresholds:\n        derived_from: tosca.datatypes.Root\n        properties:\n            closedLoopControlName:\n                type: string\n                required: true\n                description: Closed Loop Control Name associated with the threshold\n            closedLoopEventStatus:\n                type: string\n                required: true\n                description: Closed Loop Event Status of the threshold\n                constraints:\n                  - valid_values:\n                      - ONSET\n                      - ABATED\n            direction:\n                type: string\n                required: true\n                description: Direction of the threshold\n                constraints:\n                  - valid_values:\n                      - LESS\n                      - LESS_OR_EQUAL\n                      - GREATER\n                      - GREATER_OR_EQUAL\n                      - EQUAL\n            fieldPath:\n                type: string\n                required: true\n                description: Json field Path as per CEF message which needs to be analyzed for TCA\n                constraints:\n                  - valid_values:\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n                      - $.event.measurementsForVfScalingFields.meanRequestLatency\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n                      - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n            severity:\n                type: string\n                required: true\n                description: Threshold Event Severity\n                constraints:\n                  - valid_values:\n                      - CRITICAL\n                      - MAJOR\n                      - MINOR\n                      - WARNING\n                      - NORMAL\n            thresholdValue:\n                type: integer\n                required: true\n                description: Threshold value for the field Path inside CEF message\n            version:\n                type: string\n                required: true\n                description: Version number associated with the threshold\n',NULL,'\0');
-INSERT INTO `micro_service_policies` VALUES ('TCA_iYTIP_v1_0_ResourceInstanceName1_tca_3','{\n  \"schema\": {\n    \"uniqueItems\": \"true\",\n    \"format\": \"tabs-top\",\n    \"type\": \"array\",\n    \"title\": \"TCA Policy JSON\",\n    \"items\": {\n      \"type\": \"object\",\n      \"title\": \"TCA Policy JSON\",\n      \"required\": [\n        \"domain\",\n        \"metricsPerEventName\"\n      ],\n      \"properties\": {\n        \"domain\": {\n          \"propertyOrder\": 1001,\n          \"default\": \"measurementsForVfScaling\",\n          \"title\": \"Domain name to which TCA needs to be applied\",\n          \"type\": \"string\"\n        },\n        \"metricsPerEventName\": {\n          \"propertyOrder\": 1002,\n          \"uniqueItems\": \"true\",\n          \"format\": \"tabs-top\",\n          \"title\": \"Contains eventName and threshold details that need to be applied to given eventName\",\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"required\": [\n              \"controlLoopSchemaType\",\n              \"eventName\",\n              \"policyName\",\n              \"policyScope\",\n              \"policyVersion\",\n              \"thresholds\"\n            ],\n            \"properties\": {\n              \"policyVersion\": {\n                \"propertyOrder\": 1007,\n                \"title\": \"TCA Policy Scope Version\",\n                \"type\": \"string\"\n              },\n              \"thresholds\": {\n                \"propertyOrder\": 1008,\n                \"uniqueItems\": \"true\",\n                \"format\": \"tabs-top\",\n                \"title\": \"Thresholds associated with eventName\",\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"object\",\n                  \"required\": [\n                    \"closedLoopControlName\",\n                    \"closedLoopEventStatus\",\n                    \"direction\",\n                    \"fieldPath\",\n                    \"severity\",\n                    \"thresholdValue\",\n                    \"version\"\n                  ],\n                  \"properties\": {\n                    \"severity\": {\n                      \"propertyOrder\": 1013,\n                      \"title\": \"Threshold Event Severity\",\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"CRITICAL\",\n                        \"MAJOR\",\n                        \"MINOR\",\n                        \"WARNING\",\n                        \"NORMAL\"\n                      ]\n                    },\n                    \"fieldPath\": {\n                      \"propertyOrder\": 1012,\n                      \"title\": \"Json field Path as per CEF message which needs to be analyzed for TCA\",\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\",\n                        \"$.event.measurementsForVfScalingFields.meanRequestLatency\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\",\n                        \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\"\n                      ]\n                    },\n                    \"thresholdValue\": {\n                      \"propertyOrder\": 1014,\n                      \"title\": \"Threshold value for the field Path inside CEF message\",\n                      \"type\": \"integer\"\n                    },\n                    \"closedLoopEventStatus\": {\n                      \"propertyOrder\": 1010,\n                      \"title\": \"Closed Loop Event Status of the threshold\",\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"ONSET\",\n                        \"ABATED\"\n                      ]\n                    },\n                    \"closedLoopControlName\": {\n                      \"propertyOrder\": 1009,\n                      \"title\": \"Closed Loop Control Name associated with the threshold\",\n                      \"type\": \"string\"\n                    },\n                    \"version\": {\n                      \"propertyOrder\": 1015,\n                      \"title\": \"Version number associated with the threshold\",\n                      \"type\": \"string\"\n                    },\n                    \"direction\": {\n                      \"propertyOrder\": 1011,\n                      \"title\": \"Direction of the threshold\",\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"LESS\",\n                        \"LESS_OR_EQUAL\",\n                        \"GREATER\",\n                        \"GREATER_OR_EQUAL\",\n                        \"EQUAL\"\n                      ]\n                    }\n                  }\n                }\n              },\n              \"policyName\": {\n                \"propertyOrder\": 1005,\n                \"title\": \"TCA Policy Scope Name\",\n                \"type\": \"string\"\n              },\n              \"controlLoopSchemaType\": {\n                \"propertyOrder\": 1003,\n                \"title\": \"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\",\n                \"type\": \"string\",\n                \"enum\": [\n                  \"VM\",\n                  \"VNF\"\n                ]\n              },\n              \"policyScope\": {\n                \"propertyOrder\": 1006,\n                \"title\": \"TCA Policy Scope\",\n                \"type\": \"string\"\n              },\n              \"eventName\": {\n                \"propertyOrder\": 1004,\n                \"title\": \"Event name to which thresholds need to be applied\",\n                \"type\": \"string\"\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}','onap.policy.monitoring.cdap.tca.hi.lo.app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n    onap.policies.Monitoring:\n        derived_from: tosca.policies.Root\n        description: a base policy type for all policies that governs monitoring provisioning\n    onap.policy.monitoring.cdap.tca.hi.lo.app:\n        derived_from: onap.policies.Monitoring\n        version: 1.0.0\n        properties:\n            tca_policy:\n                type: map\n                description: TCA Policy JSON\n                entry_schema:\n                    type: onap.datatypes.monitoring.tca_policy\ndata_types:\n    onap.datatypes.monitoring.metricsPerEventName:\n        derived_from: tosca.datatypes.Root\n        properties:\n            controlLoopSchemaType:\n                type: string\n                required: true\n                description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n                constraints:\n                  - valid_values:\n                      - VM\n                      - VNF\n            eventName:\n                type: string\n                required: true\n                description: Event name to which thresholds need to be applied\n            policyName:\n                type: string\n                required: true\n                description: TCA Policy Scope Name\n            policyScope:\n                type: string\n                required: true\n                description: TCA Policy Scope\n            policyVersion:\n                type: string\n                required: true\n                description: TCA Policy Scope Version\n            thresholds:\n                type: list\n                required: true\n                description: Thresholds associated with eventName\n                entry_schema:\n                    type: onap.datatypes.monitoring.thresholds\n    onap.datatypes.monitoring.tca_policy:\n        derived_from: tosca.datatypes.Root\n        properties:\n            domain:\n                type: string\n                required: true\n                description: Domain name to which TCA needs to be applied\n                default: measurementsForVfScaling\n                constraints:\n                  - equal: measurementsForVfScaling\n            metricsPerEventName:\n                type: list\n                required: true\n                description: Contains eventName and threshold details that need to be applied to given eventName\n                entry_schema:\n                    type: onap.datatypes.monitoring.metricsPerEventName\n    onap.datatypes.monitoring.thresholds:\n        derived_from: tosca.datatypes.Root\n        properties:\n            closedLoopControlName:\n                type: string\n                required: true\n                description: Closed Loop Control Name associated with the threshold\n            closedLoopEventStatus:\n                type: string\n                required: true\n                description: Closed Loop Event Status of the threshold\n                constraints:\n                  - valid_values:\n                      - ONSET\n                      - ABATED\n            direction:\n                type: string\n                required: true\n                description: Direction of the threshold\n                constraints:\n                  - valid_values:\n                      - LESS\n                      - LESS_OR_EQUAL\n                      - GREATER\n                      - GREATER_OR_EQUAL\n                      - EQUAL\n            fieldPath:\n                type: string\n                required: true\n                description: Json field Path as per CEF message which needs to be analyzed for TCA\n                constraints:\n                  - valid_values:\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n                      - $.event.measurementsForVfScalingFields.meanRequestLatency\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n                      - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n            severity:\n                type: string\n                required: true\n                description: Threshold Event Severity\n                constraints:\n                  - valid_values:\n                      - CRITICAL\n                      - MAJOR\n                      - MINOR\n                      - WARNING\n                      - NORMAL\n            thresholdValue:\n                type: integer\n                required: true\n                description: Threshold value for the field Path inside CEF message\n            version:\n                type: string\n                required: true\n                description: Version number associated with the threshold\n',NULL,'\0');
-INSERT INTO `micro_service_policies` VALUES ('TCA_iYTIP_v1_0_ResourceInstanceName2_tca_2','{\n  \"schema\": {\n    \"uniqueItems\": \"true\",\n    \"format\": \"tabs-top\",\n    \"type\": \"array\",\n    \"title\": \"TCA Policy JSON\",\n    \"items\": {\n      \"type\": \"object\",\n      \"title\": \"TCA Policy JSON\",\n      \"required\": [\n        \"domain\",\n        \"metricsPerEventName\"\n      ],\n      \"properties\": {\n        \"domain\": {\n          \"propertyOrder\": 1001,\n          \"default\": \"measurementsForVfScaling\",\n          \"title\": \"Domain name to which TCA needs to be applied\",\n          \"type\": \"string\"\n        },\n        \"metricsPerEventName\": {\n          \"propertyOrder\": 1002,\n          \"uniqueItems\": \"true\",\n          \"format\": \"tabs-top\",\n          \"title\": \"Contains eventName and threshold details that need to be applied to given eventName\",\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"required\": [\n              \"controlLoopSchemaType\",\n              \"eventName\",\n              \"policyName\",\n              \"policyScope\",\n              \"policyVersion\",\n              \"thresholds\"\n            ],\n            \"properties\": {\n              \"policyVersion\": {\n                \"propertyOrder\": 1007,\n                \"title\": \"TCA Policy Scope Version\",\n                \"type\": \"string\"\n              },\n              \"thresholds\": {\n                \"propertyOrder\": 1008,\n                \"uniqueItems\": \"true\",\n                \"format\": \"tabs-top\",\n                \"title\": \"Thresholds associated with eventName\",\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"object\",\n                  \"required\": [\n                    \"closedLoopControlName\",\n                    \"closedLoopEventStatus\",\n                    \"direction\",\n                    \"fieldPath\",\n                    \"severity\",\n                    \"thresholdValue\",\n                    \"version\"\n                  ],\n                  \"properties\": {\n                    \"severity\": {\n                      \"propertyOrder\": 1013,\n                      \"title\": \"Threshold Event Severity\",\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"CRITICAL\",\n                        \"MAJOR\",\n                        \"MINOR\",\n                        \"WARNING\",\n                        \"NORMAL\"\n                      ]\n                    },\n                    \"fieldPath\": {\n                      \"propertyOrder\": 1012,\n                      \"title\": \"Json field Path as per CEF message which needs to be analyzed for TCA\",\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\",\n                        \"$.event.measurementsForVfScalingFields.meanRequestLatency\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\",\n                        \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\"\n                      ]\n                    },\n                    \"thresholdValue\": {\n                      \"propertyOrder\": 1014,\n                      \"title\": \"Threshold value for the field Path inside CEF message\",\n                      \"type\": \"integer\"\n                    },\n                    \"closedLoopEventStatus\": {\n                      \"propertyOrder\": 1010,\n                      \"title\": \"Closed Loop Event Status of the threshold\",\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"ONSET\",\n                        \"ABATED\"\n                      ]\n                    },\n                    \"closedLoopControlName\": {\n                      \"propertyOrder\": 1009,\n                      \"title\": \"Closed Loop Control Name associated with the threshold\",\n                      \"type\": \"string\"\n                    },\n                    \"version\": {\n                      \"propertyOrder\": 1015,\n                      \"title\": \"Version number associated with the threshold\",\n                      \"type\": \"string\"\n                    },\n                    \"direction\": {\n                      \"propertyOrder\": 1011,\n                      \"title\": \"Direction of the threshold\",\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"LESS\",\n                        \"LESS_OR_EQUAL\",\n                        \"GREATER\",\n                        \"GREATER_OR_EQUAL\",\n                        \"EQUAL\"\n                      ]\n                    }\n                  }\n                }\n              },\n              \"policyName\": {\n                \"propertyOrder\": 1005,\n                \"title\": \"TCA Policy Scope Name\",\n                \"type\": \"string\"\n              },\n              \"controlLoopSchemaType\": {\n                \"propertyOrder\": 1003,\n                \"title\": \"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\",\n                \"type\": \"string\",\n                \"enum\": [\n                  \"VM\",\n                  \"VNF\"\n                ]\n              },\n              \"policyScope\": {\n                \"propertyOrder\": 1006,\n                \"title\": \"TCA Policy Scope\",\n                \"type\": \"string\"\n              },\n              \"eventName\": {\n                \"propertyOrder\": 1004,\n                \"title\": \"Event name to which thresholds need to be applied\",\n                \"type\": \"string\"\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}','onap.policy.monitoring.cdap.tca.hi.lo.app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n    onap.policies.Monitoring:\n        derived_from: tosca.policies.Root\n        description: a base policy type for all policies that governs monitoring provisioning\n    onap.policy.monitoring.cdap.tca.hi.lo.app:\n        derived_from: onap.policies.Monitoring\n        version: 1.0.0\n        properties:\n            tca_policy:\n                type: map\n                description: TCA Policy JSON\n                entry_schema:\n                    type: onap.datatypes.monitoring.tca_policy\ndata_types:\n    onap.datatypes.monitoring.metricsPerEventName:\n        derived_from: tosca.datatypes.Root\n        properties:\n            controlLoopSchemaType:\n                type: string\n                required: true\n                description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n                constraints:\n                  - valid_values:\n                      - VM\n                      - VNF\n            eventName:\n                type: string\n                required: true\n                description: Event name to which thresholds need to be applied\n            policyName:\n                type: string\n                required: true\n                description: TCA Policy Scope Name\n            policyScope:\n                type: string\n                required: true\n                description: TCA Policy Scope\n            policyVersion:\n                type: string\n                required: true\n                description: TCA Policy Scope Version\n            thresholds:\n                type: list\n                required: true\n                description: Thresholds associated with eventName\n                entry_schema:\n                    type: onap.datatypes.monitoring.thresholds\n    onap.datatypes.monitoring.tca_policy:\n        derived_from: tosca.datatypes.Root\n        properties:\n            domain:\n                type: string\n                required: true\n                description: Domain name to which TCA needs to be applied\n                default: measurementsForVfScaling\n                constraints:\n                  - equal: measurementsForVfScaling\n            metricsPerEventName:\n                type: list\n                required: true\n                description: Contains eventName and threshold details that need to be applied to given eventName\n                entry_schema:\n                    type: onap.datatypes.monitoring.metricsPerEventName\n    onap.datatypes.monitoring.thresholds:\n        derived_from: tosca.datatypes.Root\n        properties:\n            closedLoopControlName:\n                type: string\n                required: true\n                description: Closed Loop Control Name associated with the threshold\n            closedLoopEventStatus:\n                type: string\n                required: true\n                description: Closed Loop Event Status of the threshold\n                constraints:\n                  - valid_values:\n                      - ONSET\n                      - ABATED\n            direction:\n                type: string\n                required: true\n                description: Direction of the threshold\n                constraints:\n                  - valid_values:\n                      - LESS\n                      - LESS_OR_EQUAL\n                      - GREATER\n                      - GREATER_OR_EQUAL\n                      - EQUAL\n            fieldPath:\n                type: string\n                required: true\n                description: Json field Path as per CEF message which needs to be analyzed for TCA\n                constraints:\n                  - valid_values:\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n                      - $.event.measurementsForVfScalingFields.meanRequestLatency\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n                      - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n            severity:\n                type: string\n                required: true\n                description: Threshold Event Severity\n                constraints:\n                  - valid_values:\n                      - CRITICAL\n                      - MAJOR\n                      - MINOR\n                      - WARNING\n                      - NORMAL\n            thresholdValue:\n                type: integer\n                required: true\n                description: Threshold value for the field Path inside CEF message\n            version:\n                type: string\n                required: true\n                description: Version number associated with the threshold\n',NULL,'\0');
+INSERT INTO `micro_service_policies` VALUES ('TCA_ejh5S_v1_0_ResourceInstanceName1_tca','{\n  \"schema\": {\n    \"uniqueItems\": \"true\",\n    \"format\": \"tabs-top\",\n    \"type\": \"array\",\n    \"title\": \"TCA Policy JSON\",\n    \"items\": {\n      \"type\": \"object\",\n      \"title\": \"TCA Policy JSON\",\n      \"required\": [\n        \"domain\",\n        \"metricsPerEventName\"\n      ],\n      \"properties\": {\n        \"domain\": {\n          \"propertyOrder\": 1001,\n          \"default\": \"measurementsForVfScaling\",\n          \"title\": \"Domain name to which TCA needs to be applied\",\n          \"type\": \"string\"\n        },\n        \"metricsPerEventName\": {\n          \"propertyOrder\": 1002,\n          \"uniqueItems\": \"true\",\n          \"format\": \"tabs-top\",\n          \"title\": \"Contains eventName and threshold details that need to be applied to given eventName\",\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"required\": [\n              \"controlLoopSchemaType\",\n              \"eventName\",\n              \"policyName\",\n              \"policyScope\",\n              \"policyVersion\",\n              \"thresholds\"\n            ],\n            \"properties\": {\n              \"policyVersion\": {\n                \"propertyOrder\": 1007,\n                \"title\": \"TCA Policy Scope Version\",\n                \"type\": \"string\"\n              },\n              \"thresholds\": {\n                \"propertyOrder\": 1008,\n                \"uniqueItems\": \"true\",\n                \"format\": \"tabs-top\",\n                \"title\": \"Thresholds associated with eventName\",\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"object\",\n                  \"required\": [\n                    \"closedLoopControlName\",\n                    \"closedLoopEventStatus\",\n                    \"direction\",\n                    \"fieldPath\",\n                    \"severity\",\n                    \"thresholdValue\",\n                    \"version\"\n                  ],\n                  \"properties\": {\n                    \"severity\": {\n                      \"propertyOrder\": 1013,\n                      \"title\": \"Threshold Event Severity\",\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"CRITICAL\",\n                        \"MAJOR\",\n                        \"MINOR\",\n                        \"WARNING\",\n                        \"NORMAL\"\n                      ]\n                    },\n                    \"fieldPath\": {\n                      \"propertyOrder\": 1012,\n                      \"title\": \"Json field Path as per CEF message which needs to be analyzed for TCA\",\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\",\n                        \"$.event.measurementsForVfScalingFields.meanRequestLatency\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\",\n                        \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\"\n                      ]\n                    },\n                    \"thresholdValue\": {\n                      \"propertyOrder\": 1014,\n                      \"title\": \"Threshold value for the field Path inside CEF message\",\n                      \"type\": \"integer\"\n                    },\n                    \"closedLoopEventStatus\": {\n                      \"propertyOrder\": 1010,\n                      \"title\": \"Closed Loop Event Status of the threshold\",\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"ONSET\",\n                        \"ABATED\"\n                      ]\n                    },\n                    \"closedLoopControlName\": {\n                      \"propertyOrder\": 1009,\n                      \"title\": \"Closed Loop Control Name associated with the threshold\",\n                      \"type\": \"string\"\n                    },\n                    \"version\": {\n                      \"propertyOrder\": 1015,\n                      \"title\": \"Version number associated with the threshold\",\n                      \"type\": \"string\"\n                    },\n                    \"direction\": {\n                      \"propertyOrder\": 1011,\n                      \"title\": \"Direction of the threshold\",\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"LESS\",\n                        \"LESS_OR_EQUAL\",\n                        \"GREATER\",\n                        \"GREATER_OR_EQUAL\",\n                        \"EQUAL\"\n                      ]\n                    }\n                  }\n                }\n              },\n              \"policyName\": {\n                \"propertyOrder\": 1005,\n                \"title\": \"TCA Policy Scope Name\",\n                \"type\": \"string\"\n              },\n              \"controlLoopSchemaType\": {\n                \"propertyOrder\": 1003,\n                \"title\": \"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\",\n                \"type\": \"string\",\n                \"enum\": [\n                  \"VM\",\n                  \"VNF\"\n                ]\n              },\n              \"policyScope\": {\n                \"propertyOrder\": 1006,\n                \"title\": \"TCA Policy Scope\",\n                \"type\": \"string\"\n              },\n              \"eventName\": {\n                \"propertyOrder\": 1004,\n                \"title\": \"Event name to which thresholds need to be applied\",\n                \"type\": \"string\"\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}','onap.policies.monitoring.cdap.tca.hi.lo.app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n    onap.policies.Monitoring:\n        derived_from: tosca.policies.Root\n        description: a base policy type for all policies that governs monitoring provisioning\n    onap.policies.monitoring.cdap.tca.hi.lo.app:\n        derived_from: onap.policies.Monitoring\n        version: 1.0.0\n        properties:\n            tca_policy:\n                type: map\n                description: TCA Policy JSON\n                entry_schema:\n                    type: onap.datatypes.monitoring.tca_policy\ndata_types:\n    onap.datatypes.monitoring.metricsPerEventName:\n        derived_from: tosca.datatypes.Root\n        properties:\n            controlLoopSchemaType:\n                type: string\n                required: true\n                description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n                constraints:\n                  - valid_values:\n                      - VM\n                      - VNF\n            eventName:\n                type: string\n                required: true\n                description: Event name to which thresholds need to be applied\n            policyName:\n                type: string\n                required: true\n                description: TCA Policy Scope Name\n            policyScope:\n                type: string\n                required: true\n                description: TCA Policy Scope\n            policyVersion:\n                type: string\n                required: true\n                description: TCA Policy Scope Version\n            thresholds:\n                type: list\n                required: true\n                description: Thresholds associated with eventName\n                entry_schema:\n                    type: onap.datatypes.monitoring.thresholds\n    onap.datatypes.monitoring.tca_policy:\n        derived_from: tosca.datatypes.Root\n        properties:\n            domain:\n                type: string\n                required: true\n                description: Domain name to which TCA needs to be applied\n                default: measurementsForVfScaling\n                constraints:\n                  - equal: measurementsForVfScaling\n            metricsPerEventName:\n                type: list\n                required: true\n                description: Contains eventName and threshold details that need to be applied to given eventName\n                entry_schema:\n                    type: onap.datatypes.monitoring.metricsPerEventName\n    onap.datatypes.monitoring.thresholds:\n        derived_from: tosca.datatypes.Root\n        properties:\n            closedLoopControlName:\n                type: string\n                required: true\n                description: Closed Loop Control Name associated with the threshold\n            closedLoopEventStatus:\n                type: string\n                required: true\n                description: Closed Loop Event Status of the threshold\n                constraints:\n                  - valid_values:\n                      - ONSET\n                      - ABATED\n            direction:\n                type: string\n                required: true\n                description: Direction of the threshold\n                constraints:\n                  - valid_values:\n                      - LESS\n                      - LESS_OR_EQUAL\n                      - GREATER\n                      - GREATER_OR_EQUAL\n                      - EQUAL\n            fieldPath:\n                type: string\n                required: true\n                description: Json field Path as per CEF message which needs to be analyzed for TCA\n                constraints:\n                  - valid_values:\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n                      - $.event.measurementsForVfScalingFields.meanRequestLatency\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n                      - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n            severity:\n                type: string\n                required: true\n                description: Threshold Event Severity\n                constraints:\n                  - valid_values:\n                      - CRITICAL\n                      - MAJOR\n                      - MINOR\n                      - WARNING\n                      - NORMAL\n            thresholdValue:\n                type: integer\n                required: true\n                description: Threshold value for the field Path inside CEF message\n            version:\n                type: string\n                required: true\n                description: Version number associated with the threshold\n','{\n  \"domain\": \"measurementsForVfScaling\",\n  \"metricsPerEventName\": [\n    {\n      \"policyVersion\": \"1.0.0\",\n      \"thresholds\": [\n        {\n          \"severity\": \"CRITICAL\",\n          \"fieldPath\": \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n          \"thresholdValue\": 10,\n          \"closedLoopEventStatus\": \"ONSET\",\n          \"closedLoopControlName\": \"LOOP_ejh5S_v1_0_ResourceInstanceName1_tca\",\n          \"version\": \"1.0.2\",\n          \"direction\": \"LESS\"\n        }\n      ],\n      \"policyName\": \"test\",\n      \"controlLoopSchemaType\": \"VM\",\n      \"policyScope\": \"test\",\n      \"eventName\": \"test\"\n    }\n  ]\n}','\0');
+INSERT INTO `micro_service_policies` VALUES ('tca_k8s_ejh5S_v1_0_ResourceInstanceName1_tca_3','{\n  \"schema\": {\n    \"uniqueItems\": \"true\",\n    \"format\": \"tabs-top\",\n    \"type\": \"array\",\n    \"title\": \"TCA Policy JSON\",\n    \"items\": {\n      \"type\": \"object\",\n      \"title\": \"TCA Policy JSON\",\n      \"required\": [\n        \"domain\",\n        \"metricsPerEventName\"\n      ],\n      \"properties\": {\n        \"domain\": {\n          \"propertyOrder\": 1001,\n          \"default\": \"measurementsForVfScaling\",\n          \"title\": \"Domain name to which TCA needs to be applied\",\n          \"type\": \"string\"\n        },\n        \"metricsPerEventName\": {\n          \"propertyOrder\": 1002,\n          \"uniqueItems\": \"true\",\n          \"format\": \"tabs-top\",\n          \"title\": \"Contains eventName and threshold details that need to be applied to given eventName\",\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"required\": [\n              \"controlLoopSchemaType\",\n              \"eventName\",\n              \"policyName\",\n              \"policyScope\",\n              \"policyVersion\",\n              \"thresholds\"\n            ],\n            \"properties\": {\n              \"policyVersion\": {\n                \"propertyOrder\": 1007,\n                \"title\": \"TCA Policy Scope Version\",\n                \"type\": \"string\"\n              },\n              \"thresholds\": {\n                \"propertyOrder\": 1008,\n                \"uniqueItems\": \"true\",\n                \"format\": \"tabs-top\",\n                \"title\": \"Thresholds associated with eventName\",\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"object\",\n                  \"required\": [\n                    \"closedLoopControlName\",\n                    \"closedLoopEventStatus\",\n                    \"direction\",\n                    \"fieldPath\",\n                    \"severity\",\n                    \"thresholdValue\",\n                    \"version\"\n                  ],\n                  \"properties\": {\n                    \"severity\": {\n                      \"propertyOrder\": 1013,\n                      \"title\": \"Threshold Event Severity\",\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"CRITICAL\",\n                        \"MAJOR\",\n                        \"MINOR\",\n                        \"WARNING\",\n                        \"NORMAL\"\n                      ]\n                    },\n                    \"fieldPath\": {\n                      \"propertyOrder\": 1012,\n                      \"title\": \"Json field Path as per CEF message which needs to be analyzed for TCA\",\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\",\n                        \"$.event.measurementsForVfScalingFields.meanRequestLatency\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\",\n                        \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\"\n                      ]\n                    },\n                    \"thresholdValue\": {\n                      \"propertyOrder\": 1014,\n                      \"title\": \"Threshold value for the field Path inside CEF message\",\n                      \"type\": \"integer\"\n                    },\n                    \"closedLoopEventStatus\": {\n                      \"propertyOrder\": 1010,\n                      \"title\": \"Closed Loop Event Status of the threshold\",\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"ONSET\",\n                        \"ABATED\"\n                      ]\n                    },\n                    \"closedLoopControlName\": {\n                      \"propertyOrder\": 1009,\n                      \"title\": \"Closed Loop Control Name associated with the threshold\",\n                      \"type\": \"string\"\n                    },\n                    \"version\": {\n                      \"propertyOrder\": 1015,\n                      \"title\": \"Version number associated with the threshold\",\n                      \"type\": \"string\"\n                    },\n                    \"direction\": {\n                      \"propertyOrder\": 1011,\n                      \"title\": \"Direction of the threshold\",\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"LESS\",\n                        \"LESS_OR_EQUAL\",\n                        \"GREATER\",\n                        \"GREATER_OR_EQUAL\",\n                        \"EQUAL\"\n                      ]\n                    }\n                  }\n                }\n              },\n              \"policyName\": {\n                \"propertyOrder\": 1005,\n                \"title\": \"TCA Policy Scope Name\",\n                \"type\": \"string\"\n              },\n              \"controlLoopSchemaType\": {\n                \"propertyOrder\": 1003,\n                \"title\": \"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\",\n                \"type\": \"string\",\n                \"enum\": [\n                  \"VM\",\n                  \"VNF\"\n                ]\n              },\n              \"policyScope\": {\n                \"propertyOrder\": 1006,\n                \"title\": \"TCA Policy Scope\",\n                \"type\": \"string\"\n              },\n              \"eventName\": {\n                \"propertyOrder\": 1004,\n                \"title\": \"Event name to which thresholds need to be applied\",\n                \"type\": \"string\"\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}','onap.policies.monitoring.cdap.tca.hi.lo.app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n    onap.policies.Monitoring:\n        derived_from: tosca.policies.Root\n        description: a base policy type for all policies that governs monitoring provisioning\n    onap.policies.monitoring.cdap.tca.hi.lo.app:\n        derived_from: onap.policies.Monitoring\n        version: 1.0.0\n        properties:\n            tca_policy:\n                type: map\n                description: TCA Policy JSON\n                entry_schema:\n                    type: onap.datatypes.monitoring.tca_policy\ndata_types:\n    onap.datatypes.monitoring.metricsPerEventName:\n        derived_from: tosca.datatypes.Root\n        properties:\n            controlLoopSchemaType:\n                type: string\n                required: true\n                description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n                constraints:\n                  - valid_values:\n                      - VM\n                      - VNF\n            eventName:\n                type: string\n                required: true\n                description: Event name to which thresholds need to be applied\n            policyName:\n                type: string\n                required: true\n                description: TCA Policy Scope Name\n            policyScope:\n                type: string\n                required: true\n                description: TCA Policy Scope\n            policyVersion:\n                type: string\n                required: true\n                description: TCA Policy Scope Version\n            thresholds:\n                type: list\n                required: true\n                description: Thresholds associated with eventName\n                entry_schema:\n                    type: onap.datatypes.monitoring.thresholds\n    onap.datatypes.monitoring.tca_policy:\n        derived_from: tosca.datatypes.Root\n        properties:\n            domain:\n                type: string\n                required: true\n                description: Domain name to which TCA needs to be applied\n                default: measurementsForVfScaling\n                constraints:\n                  - equal: measurementsForVfScaling\n            metricsPerEventName:\n                type: list\n                required: true\n                description: Contains eventName and threshold details that need to be applied to given eventName\n                entry_schema:\n                    type: onap.datatypes.monitoring.metricsPerEventName\n    onap.datatypes.monitoring.thresholds:\n        derived_from: tosca.datatypes.Root\n        properties:\n            closedLoopControlName:\n                type: string\n                required: true\n                description: Closed Loop Control Name associated with the threshold\n            closedLoopEventStatus:\n                type: string\n                required: true\n                description: Closed Loop Event Status of the threshold\n                constraints:\n                  - valid_values:\n                      - ONSET\n                      - ABATED\n            direction:\n                type: string\n                required: true\n                description: Direction of the threshold\n                constraints:\n                  - valid_values:\n                      - LESS\n                      - LESS_OR_EQUAL\n                      - GREATER\n                      - GREATER_OR_EQUAL\n                      - EQUAL\n            fieldPath:\n                type: string\n                required: true\n                description: Json field Path as per CEF message which needs to be analyzed for TCA\n                constraints:\n                  - valid_values:\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n                      - $.event.measurementsForVfScalingFields.meanRequestLatency\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n                      - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n            severity:\n                type: string\n                required: true\n                description: Threshold Event Severity\n                constraints:\n                  - valid_values:\n                      - CRITICAL\n                      - MAJOR\n                      - MINOR\n                      - WARNING\n                      - NORMAL\n            thresholdValue:\n                type: integer\n                required: true\n                description: Threshold value for the field Path inside CEF message\n            version:\n                type: string\n                required: true\n                description: Version number associated with the threshold\n',NULL,'\0');
+INSERT INTO `micro_service_policies` VALUES ('tca_k8s_ejh5S_v1_0_ResourceInstanceName2_tca_2','{\n  \"schema\": {\n    \"uniqueItems\": \"true\",\n    \"format\": \"tabs-top\",\n    \"type\": \"array\",\n    \"title\": \"TCA Policy JSON\",\n    \"items\": {\n      \"type\": \"object\",\n      \"title\": \"TCA Policy JSON\",\n      \"required\": [\n        \"domain\",\n        \"metricsPerEventName\"\n      ],\n      \"properties\": {\n        \"domain\": {\n          \"propertyOrder\": 1001,\n          \"default\": \"measurementsForVfScaling\",\n          \"title\": \"Domain name to which TCA needs to be applied\",\n          \"type\": \"string\"\n        },\n        \"metricsPerEventName\": {\n          \"propertyOrder\": 1002,\n          \"uniqueItems\": \"true\",\n          \"format\": \"tabs-top\",\n          \"title\": \"Contains eventName and threshold details that need to be applied to given eventName\",\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"required\": [\n              \"controlLoopSchemaType\",\n              \"eventName\",\n              \"policyName\",\n              \"policyScope\",\n              \"policyVersion\",\n              \"thresholds\"\n            ],\n            \"properties\": {\n              \"policyVersion\": {\n                \"propertyOrder\": 1007,\n                \"title\": \"TCA Policy Scope Version\",\n                \"type\": \"string\"\n              },\n              \"thresholds\": {\n                \"propertyOrder\": 1008,\n                \"uniqueItems\": \"true\",\n                \"format\": \"tabs-top\",\n                \"title\": \"Thresholds associated with eventName\",\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"object\",\n                  \"required\": [\n                    \"closedLoopControlName\",\n                    \"closedLoopEventStatus\",\n                    \"direction\",\n                    \"fieldPath\",\n                    \"severity\",\n                    \"thresholdValue\",\n                    \"version\"\n                  ],\n                  \"properties\": {\n                    \"severity\": {\n                      \"propertyOrder\": 1013,\n                      \"title\": \"Threshold Event Severity\",\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"CRITICAL\",\n                        \"MAJOR\",\n                        \"MINOR\",\n                        \"WARNING\",\n                        \"NORMAL\"\n                      ]\n                    },\n                    \"fieldPath\": {\n                      \"propertyOrder\": 1012,\n                      \"title\": \"Json field Path as per CEF message which needs to be analyzed for TCA\",\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\",\n                        \"$.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\",\n                        \"$.event.measurementsForVfScalingFields.meanRequestLatency\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\",\n                        \"$.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\",\n                        \"$.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\"\n                      ]\n                    },\n                    \"thresholdValue\": {\n                      \"propertyOrder\": 1014,\n                      \"title\": \"Threshold value for the field Path inside CEF message\",\n                      \"type\": \"integer\"\n                    },\n                    \"closedLoopEventStatus\": {\n                      \"propertyOrder\": 1010,\n                      \"title\": \"Closed Loop Event Status of the threshold\",\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"ONSET\",\n                        \"ABATED\"\n                      ]\n                    },\n                    \"closedLoopControlName\": {\n                      \"propertyOrder\": 1009,\n                      \"title\": \"Closed Loop Control Name associated with the threshold\",\n                      \"type\": \"string\"\n                    },\n                    \"version\": {\n                      \"propertyOrder\": 1015,\n                      \"title\": \"Version number associated with the threshold\",\n                      \"type\": \"string\"\n                    },\n                    \"direction\": {\n                      \"propertyOrder\": 1011,\n                      \"title\": \"Direction of the threshold\",\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"LESS\",\n                        \"LESS_OR_EQUAL\",\n                        \"GREATER\",\n                        \"GREATER_OR_EQUAL\",\n                        \"EQUAL\"\n                      ]\n                    }\n                  }\n                }\n              },\n              \"policyName\": {\n                \"propertyOrder\": 1005,\n                \"title\": \"TCA Policy Scope Name\",\n                \"type\": \"string\"\n              },\n              \"controlLoopSchemaType\": {\n                \"propertyOrder\": 1003,\n                \"title\": \"Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\",\n                \"type\": \"string\",\n                \"enum\": [\n                  \"VM\",\n                  \"VNF\"\n                ]\n              },\n              \"policyScope\": {\n                \"propertyOrder\": 1006,\n                \"title\": \"TCA Policy Scope\",\n                \"type\": \"string\"\n              },\n              \"eventName\": {\n                \"propertyOrder\": 1004,\n                \"title\": \"Event name to which thresholds need to be applied\",\n                \"type\": \"string\"\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}','onap.policies.monitoring.cdap.tca.hi.lo.app','tosca_definitions_version: tosca_simple_yaml_1_0_0\npolicy_types:\n    onap.policies.Monitoring:\n        derived_from: tosca.policies.Root\n        description: a base policy type for all policies that governs monitoring provisioning\n    onap.policies.monitoring.cdap.tca.hi.lo.app:\n        derived_from: onap.policies.Monitoring\n        version: 1.0.0\n        properties:\n            tca_policy:\n                type: map\n                description: TCA Policy JSON\n                entry_schema:\n                    type: onap.datatypes.monitoring.tca_policy\ndata_types:\n    onap.datatypes.monitoring.metricsPerEventName:\n        derived_from: tosca.datatypes.Root\n        properties:\n            controlLoopSchemaType:\n                type: string\n                required: true\n                description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM\n                constraints:\n                  - valid_values:\n                      - VM\n                      - VNF\n            eventName:\n                type: string\n                required: true\n                description: Event name to which thresholds need to be applied\n            policyName:\n                type: string\n                required: true\n                description: TCA Policy Scope Name\n            policyScope:\n                type: string\n                required: true\n                description: TCA Policy Scope\n            policyVersion:\n                type: string\n                required: true\n                description: TCA Policy Scope Version\n            thresholds:\n                type: list\n                required: true\n                description: Thresholds associated with eventName\n                entry_schema:\n                    type: onap.datatypes.monitoring.thresholds\n    onap.datatypes.monitoring.tca_policy:\n        derived_from: tosca.datatypes.Root\n        properties:\n            domain:\n                type: string\n                required: true\n                description: Domain name to which TCA needs to be applied\n                default: measurementsForVfScaling\n                constraints:\n                  - equal: measurementsForVfScaling\n            metricsPerEventName:\n                type: list\n                required: true\n                description: Contains eventName and threshold details that need to be applied to given eventName\n                entry_schema:\n                    type: onap.datatypes.monitoring.metricsPerEventName\n    onap.datatypes.monitoring.thresholds:\n        derived_from: tosca.datatypes.Root\n        properties:\n            closedLoopControlName:\n                type: string\n                required: true\n                description: Closed Loop Control Name associated with the threshold\n            closedLoopEventStatus:\n                type: string\n                required: true\n                description: Closed Loop Event Status of the threshold\n                constraints:\n                  - valid_values:\n                      - ONSET\n                      - ABATED\n            direction:\n                type: string\n                required: true\n                description: Direction of the threshold\n                constraints:\n                  - valid_values:\n                      - LESS\n                      - LESS_OR_EQUAL\n                      - GREATER\n                      - GREATER_OR_EQUAL\n                      - EQUAL\n            fieldPath:\n                type: string\n                required: true\n                description: Json field Path as per CEF message which needs to be analyzed for TCA\n                constraints:\n                  - valid_values:\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait\n                      - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage\n                      - $.event.measurementsForVfScalingFields.meanRequestLatency\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree\n                      - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed\n                      - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value\n            severity:\n                type: string\n                required: true\n                description: Threshold Event Severity\n                constraints:\n                  - valid_values:\n                      - CRITICAL\n                      - MAJOR\n                      - MINOR\n                      - WARNING\n                      - NORMAL\n            thresholdValue:\n                type: integer\n                required: true\n                description: Threshold value for the field Path inside CEF message\n            version:\n                type: string\n                required: true\n                description: Version number associated with the threshold\n',NULL,'\0');
 /*!40000 ALTER TABLE `micro_service_policies` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -146,9 +665,9 @@ UNLOCK TABLES;
 
 LOCK TABLES `operational_policies` WRITE;
 /*!40000 ALTER TABLE `operational_policies` DISABLE KEYS */;
-INSERT INTO `operational_policies` VALUES ('OPERATIONAL_iYTIP_v1_0_ResourceInstanceName1_tca','{}','LOOP_iYTIP_v1_0_ResourceInstanceName1_tca');
-INSERT INTO `operational_policies` VALUES ('OPERATIONAL_iYTIP_v1_0_ResourceInstanceName1_tca_3','{}','LOOP_iYTIP_v1_0_ResourceInstanceName1_tca_3');
-INSERT INTO `operational_policies` VALUES ('OPERATIONAL_iYTIP_v1_0_ResourceInstanceName2_tca_2','{}','LOOP_iYTIP_v1_0_ResourceInstanceName2_tca_2');
+INSERT INTO `operational_policies` VALUES ('OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca','{\n  \"operational_policy\": {\n    \"controlLoop\": {\n      \"timeout\": \"200\",\n      \"abatement\": \"True\",\n      \"trigger_policy\": \"Policy1\",\n      \"controlLoopName\": \"LOOP_ejh5S_v1_0_ResourceInstanceName1_tca\"\n    },\n    \"policies\": [\n      {\n        \"id\": \"Policy1\",\n        \"recipe\": \"Restart\",\n        \"retry\": \"0\",\n        \"timeout\": \"0\",\n        \"actor\": \"APPC\",\n        \"payload\": \"\",\n        \"success\": \"final_success\",\n        \"failure\": \"final_failure\",\n        \"failure_timeout\": \"final_failure_timeout\",\n        \"failure_retries\": \"final_failure_retries\",\n        \"failure_exception\": \"final_failure_exception\",\n        \"failure_guard\": \"final_failure_guard\",\n        \"target\": {\n          \"type\": \"VNF\",\n          \"resourceID\": \"vLoadBalancerMS\"\n        }\n      }\n    ]\n  },\n  \"guard_policies\": [\n    {\n      \"policy-id\": \"guard.minmax.new\",\n      \"content\": {\n        \"actor\": \"APPC\",\n        \"recipe\": \"Restart\",\n        \"targets\": \".*\",\n        \"clname\": \"LOOP_ejh5S_v1_0_ResourceInstanceName1_tca\",\n        \"guardActiveStart\": \"00:00:00Z\",\n        \"guardActiveEnd\": \"10:00:00Z\",\n        \"min\": \"0\",\n        \"max\": \"1\"\n      }\n    }\n  ]\n}','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca');
+INSERT INTO `operational_policies` VALUES ('OPERATIONAL_ejh5S_v1_0_ResourceInstanceName1_tca_3','{\n  \"operational_policy\": {\n    \"controlLoop\": {\n      \"controlLoopName\": \"LOOP_ejh5S_v1_0_ResourceInstanceName1_tca_3\"\n    }\n  }\n}','LOOP_ejh5S_v1_0_ResourceInstanceName1_tca_3');
+INSERT INTO `operational_policies` VALUES ('OPERATIONAL_ejh5S_v1_0_ResourceInstanceName2_tca_2','{\n  \"operational_policy\": {\n    \"controlLoop\": {\n      \"controlLoopName\": \"LOOP_ejh5S_v1_0_ResourceInstanceName2_tca_2\"\n    }\n  }\n}','LOOP_ejh5S_v1_0_ResourceInstanceName2_tca_2');
 /*!40000 ALTER TABLE `operational_policies` ENABLE KEYS */;
 UNLOCK TABLES;
 
@@ -214,4 +733,4 @@ UNLOCK TABLES;
 /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
 /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
 
--- Dump completed on 2019-04-09  8:06:05
+-- Dump completed on 2019-08-27 11:53:07
index b4e0809..1c03df3 100644 (file)
@@ -1,16 +1,13 @@
 {
-       "policy-id": "guard1",
+       "policy-id": "guard.minmax.new",
        "content": {
-               "recipe": "Rebuild",
-               "actor": "SO",
-               "clname": "testloop",
+               "actor": "APPC",
+               "recipe": "Restart",
                "targets": ".*",
-               "min": "3",
-               "max": "7",
-               "limit": "",
-               "timeUnits": "",
-               "timeWindow": "",
-               "guardActiveStart": "00:00:01-05:00",
-               "guardActiveEnd": "23:59:01-05:00"
+               "clname": "LOOP_ASJOy_v1_0_ResourceInstanceName1_tca",
+               "guardActiveStart": "00:00:00Z",
+               "guardActiveEnd": "10:00:00Z",
+               "min": "0",
+               "max": "1"
        }
 }
\ No newline at end of file
index 29beb6b..559a568 100644 (file)
@@ -1,16 +1,14 @@
 {
-       "policy-id": "guard2",
+       "policy-id": "guard.frequency.new",
        "content": {
-               "recipe": "Migrate",
-               "actor": "SO",
-               "clname": "testloop",
+               "actor": "APPC",
+               "recipe": "Rebuild",
                "targets": ".*",
-               "min": "1",
-               "max": "2",
-               "limit": "",
-               "timeUnits": "",
-               "timeWindow": "",
-               "guardActiveStart": "00:00:01-05:00",
-               "guardActiveEnd": "23:59:01-05:00"
+               "clname": "LOOP_ASJOy_v1_0_ResourceInstanceName1_tca",
+               "guardActiveStart": "00:00:00Z",
+               "guardActiveEnd": "10:00:00Z",
+               "limit": "1",
+               "timeWindow": "2",
+               "timeUnits": "minute"
        }
 }
\ No newline at end of file
diff --git a/src/test/resources/tosca/operational-policy-json-schema.json b/src/test/resources/tosca/operational-policy-json-schema.json
new file mode 100644 (file)
index 0000000..d6870dc
--- /dev/null
@@ -0,0 +1,574 @@
+{
+       "schema": {
+               "uniqueItems": "true",
+               "format": "tabs",
+               "type": "array",
+               "minItems": 1,
+               "maxItems": 1,
+               "title": "Operational policies",
+               "items": {
+                       "type": "object",
+                       "title": "Operational Policy Item",
+                       "id": "operational_policy_item",
+                       "headerTemplate": "{{self.name}}",
+                       "required": [
+                               "name",
+                               "configurationsJson"
+                       ],
+                       "properties": {
+                               "name": {
+                                       "type": "string",
+                                       "title": "Operational policy name",
+                                       "readOnly": "True"
+                               },
+                               "configurationsJson": {
+                                       "type": "object",
+                                       "title": "Configuration",
+                                       "required": [
+                                               "operational_policy",
+                                               "guard_policies"
+                                       ],
+                                       "properties": {
+                                               "operational_policy": {
+                                                       "type": "object",
+                                                       "title": "Related Parameters",
+                                                       "required": [
+                                                               "controlLoop",
+                                                               "policies"
+                                                       ],
+                                                       "properties": {
+                                                               "controlLoop": {
+                                                                       "type": "object",
+                                                                       "title": "Control Loop details",
+                                                                       "required": [
+                                                                               "timeout",
+                                                                               "abatement",
+                                                                               "trigger_policy",
+                                                                               "controlLoopName"
+                                                                       ],
+                                                                       "properties": {
+                                                                               "timeout": {
+                                                                                       "type": "string",
+                                                                                       "title": "Overall Time Limit",
+                                                                                       "default": "0",
+                                                                                       "format": "number"
+                                                                               },
+                                                                               "abatement": {
+                                                                                       "type": "string",
+                                                                                       "title": "Abatement",
+                                                                                       "enum": [
+                                                                                               "True",
+                                                                                               "False"
+                                                                                       ]
+                                                                               },
+                                                                               "trigger_policy": {
+                                                                                       "type": "string",
+                                                                                       "title": "Policy Decision Entry"
+                                                                               },
+                                                                               "controlLoopName": {
+                                                                                       "type": "string",
+                                                                                       "title": "Control loop name",
+                                                                                       "readOnly": "True"
+                                                                               }
+                                                                       }
+                                                               },
+                                                               "policies": {
+                                                                       "uniqueItems": "true",
+                                                                       "id": "policies_array",
+                                                                       "type": "array",
+                                                                       "title": "Policy Decision Tree",
+                                                                       "format": "tabs-top",
+                                                                       "items": {
+                                                                               "title": "Policy Decision",
+                                                                               "type": "object",
+                                                                               "id": "policy_item",
+                                                                               "headerTemplate": "{{self.id}} - {{self.recipe}}",
+                                                                               "format": "categories",
+                                                                               "basicCategoryTitle": "recipe",
+                                                                               "required": [
+                                                                                       "id",
+                                                                                       "recipe",
+                                                                                       "retry",
+                                                                                       "timeout",
+                                                                                       "actor",
+                                                                                       "success",
+                                                                                       "failure",
+                                                                                       "failure_timeout",
+                                                                                       "failure_retries",
+                                                                                       "failure_exception",
+                                                                                       "failure_guard",
+                                                                                       "target"
+                                                                               ],
+                                                                               "properties": {
+                                                                                       "id": {
+                                                                                               "default": "Policy 1",
+                                                                                               "title": "Policy ID",
+                                                                                               "type": "string"
+                                                                                       },
+                                                                                       "recipe": {
+                                                                                               "title": "Recipe",
+                                                                                               "type": "string",
+                                                                                               "enum": [
+                                                                                                       "Restart",
+                                                                                                       "Rebuild",
+                                                                                                       "Migrate",
+                                                                                                       "Health-Check",
+                                                                                                       "ModifyConfig",
+                                                                                                       "VF Module Create",
+                                                                                                       "VF Module Delete",
+                                                                                                       "Reroute"
+                                                                                               ]
+                                                                                       },
+                                                                                       "retry": {
+                                                                                               "default": "0",
+                                                                                               "title": "Number of Retry",
+                                                                                               "type": "string",
+                                                                                               "format": "number"
+                                                                                       },
+                                                                                       "timeout": {
+                                                                                               "default": "0",
+                                                                                               "title": "Timeout",
+                                                                                               "type": "string",
+                                                                                               "format": "number"
+                                                                                       },
+                                                                                       "actor": {
+                                                                                               "title": "Actor",
+                                                                                               "type": "string",
+                                                                                               "enum": [
+                                                                                                       "APPC",
+                                                                                                       "SO",
+                                                                                                       "VFC",
+                                                                                                       "SDNC",
+                                                                                                       "SDNR"
+                                                                                               ]
+                                                                                       },
+                                                                                       "payload": {
+                                                                                               "title": "Payload (YAML)",
+                                                                                               "type": "string",
+                                                                                               "format": "textarea"
+                                                                                       },
+                                                                                       "success": {
+                                                                                               "default": "final_success",
+                                                                                               "title": "When Success",
+                                                                                               "type": "string"
+                                                                                       },
+                                                                                       "failure": {
+                                                                                               "default": "final_failure",
+                                                                                               "title": "When Failure",
+                                                                                               "type": "string"
+                                                                                       },
+                                                                                       "failure_timeout": {
+                                                                                               "default": "final_failure_timeout",
+                                                                                               "title": "When Failure Timeout",
+                                                                                               "type": "string"
+                                                                                       },
+                                                                                       "failure_retries": {
+                                                                                               "default": "final_failure_retries",
+                                                                                               "title": "When Failure Retries",
+                                                                                               "type": "string"
+                                                                                       },
+                                                                                       "failure_exception": {
+                                                                                               "default": "final_failure_exception",
+                                                                                               "title": "When Failure Exception",
+                                                                                               "type": "string"
+                                                                                       },
+                                                                                       "failure_guard": {
+                                                                                               "default": "final_failure_guard",
+                                                                                               "title": "When Failure Guard",
+                                                                                               "type": "string"
+                                                                                       },
+                                                                                       "target": {
+                                                                                               "type": "object",
+                                                                                               "required": [
+                                                                                                       "type",
+                                                                                                       "resourceID"
+                                                                                               ],
+                                                                                               "anyOf": [
+                                                                                                       {
+                                                                                                               "title": "User Defined",
+                                                                                                               "additionalProperties": "True",
+                                                                                                               "properties": {
+                                                                                                                       "type": {
+                                                                                                                               "title": "Target type",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "",
+                                                                                                                               "enum": [
+                                                                                                                                       "VNF",
+                                                                                                                                       "VFMODULE",
+                                                                                                                                       "VM"
+                                                                                                                               ]
+                                                                                                                       },
+                                                                                                                       "resourceID": {
+                                                                                                                               "title": "Target type",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": ""
+                                                                                                                       }
+                                                                                                               }
+                                                                                                       },
+                                                                                                       {
+                                                                                                               "title": "VNF-vLoadBalancerMS 0",
+                                                                                                               "properties": {
+                                                                                                                       "type": {
+                                                                                                                               "title": "Type",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "VNF",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       },
+                                                                                                                       "resourceID": {
+                                                                                                                               "title": "Resource ID",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "vLoadBalancerMS",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       }
+                                                                                                               }
+                                                                                                       },
+                                                                                                       {
+                                                                                                               "title": "VFMODULE-Vloadbalancerms..vpkg..module-1",
+                                                                                                               "properties": {
+                                                                                                                       "type": {
+                                                                                                                               "title": "Type",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "VFMODULE",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       },
+                                                                                                                       "resourceID": {
+                                                                                                                               "title": "Resource ID",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "Vloadbalancerms..vpkg..module-1",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       },
+                                                                                                                       "modelInvariantId": {
+                                                                                                                               "title": "Model Invariant Id (ModelInvariantUUID)",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "ca052563-eb92-4b5b-ad41-9111768ce043",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       },
+                                                                                                                       "modelVersionId": {
+                                                                                                                               "title": "Model Version Id (ModelUUID)",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "1e725ccc-b823-4f67-82b9-4f4367070dbc",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       },
+                                                                                                                       "modelName": {
+                                                                                                                               "title": "Model Name",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "Vloadbalancerms..vpkg..module-1",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       },
+                                                                                                                       "modelVersion": {
+                                                                                                                               "title": "Model Version",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "1",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       },
+                                                                                                                       "modelCustomizationId": {
+                                                                                                                               "title": "Customization ID",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "1bffdc31-a37d-4dee-b65c-dde623a76e52",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       }
+                                                                                                               }
+                                                                                                       },
+                                                                                                       {
+                                                                                                               "title": "VFMODULE-Vloadbalancerms..vdns..module-3",
+                                                                                                               "properties": {
+                                                                                                                       "type": {
+                                                                                                                               "title": "Type",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "VFMODULE",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       },
+                                                                                                                       "resourceID": {
+                                                                                                                               "title": "Resource ID",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "Vloadbalancerms..vdns..module-3",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       },
+                                                                                                                       "modelInvariantId": {
+                                                                                                                               "title": "Model Invariant Id (ModelInvariantUUID)",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "4c10ba9b-f88f-415e-9de3-5d33336047fa",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       },
+                                                                                                                       "modelVersionId": {
+                                                                                                                               "title": "Model Version Id (ModelUUID)",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "4fa73b49-8a6c-493e-816b-eb401567b720",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       },
+                                                                                                                       "modelName": {
+                                                                                                                               "title": "Model Name",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "Vloadbalancerms..vdns..module-3",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       },
+                                                                                                                       "modelVersion": {
+                                                                                                                               "title": "Model Version",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "1",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       },
+                                                                                                                       "modelCustomizationId": {
+                                                                                                                               "title": "Customization ID",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "bafcdab0-801d-4d81-9ead-f464640a38b1",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       }
+                                                                                                               }
+                                                                                                       },
+                                                                                                       {
+                                                                                                               "title": "VFMODULE-Vloadbalancerms..base_template..module-0",
+                                                                                                               "properties": {
+                                                                                                                       "type": {
+                                                                                                                               "title": "Type",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "VFMODULE",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       },
+                                                                                                                       "resourceID": {
+                                                                                                                               "title": "Resource ID",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "Vloadbalancerms..base_template..module-0",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       },
+                                                                                                                       "modelInvariantId": {
+                                                                                                                               "title": "Model Invariant Id (ModelInvariantUUID)",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "921f7c96-ebdd-42e6-81b9-1cfc0c9796f3",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       },
+                                                                                                                       "modelVersionId": {
+                                                                                                                               "title": "Model Version Id (ModelUUID)",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "63734409-f745-4e4d-a38b-131638a0edce",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       },
+                                                                                                                       "modelName": {
+                                                                                                                               "title": "Model Name",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "Vloadbalancerms..base_template..module-0",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       },
+                                                                                                                       "modelVersion": {
+                                                                                                                               "title": "Model Version",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "1",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       },
+                                                                                                                       "modelCustomizationId": {
+                                                                                                                               "title": "Customization ID",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "86baddea-c730-4fb8-9410-cd2e17fd7f27",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       }
+                                                                                                               }
+                                                                                                       },
+                                                                                                       {
+                                                                                                               "title": "VFMODULE-Vloadbalancerms..vlb..module-2",
+                                                                                                               "properties": {
+                                                                                                                       "type": {
+                                                                                                                               "title": "Type",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "VFMODULE",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       },
+                                                                                                                       "resourceID": {
+                                                                                                                               "title": "Resource ID",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "Vloadbalancerms..vlb..module-2",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       },
+                                                                                                                       "modelInvariantId": {
+                                                                                                                               "title": "Model Invariant Id (ModelInvariantUUID)",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "a772a1f4-0064-412c-833d-4749b15828dd",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       },
+                                                                                                                       "modelVersionId": {
+                                                                                                                               "title": "Model Version Id (ModelUUID)",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "0f5c3f6a-650a-4303-abb6-fff3e573a07a",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       },
+                                                                                                                       "modelName": {
+                                                                                                                               "title": "Model Name",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "Vloadbalancerms..vlb..module-2",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       },
+                                                                                                                       "modelVersion": {
+                                                                                                                               "title": "Model Version",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "1",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       },
+                                                                                                                       "modelCustomizationId": {
+                                                                                                                               "title": "Customization ID",
+                                                                                                                               "type": "string",
+                                                                                                                               "default": "96a78aad-4ffb-4ef0-9c4f-deb03bf1d806",
+                                                                                                                               "readOnly": "True"
+                                                                                                                       }
+                                                                                                               }
+                                                                                                       }
+                                                                                               ]
+                                                                                       }
+                                                                               }
+                                                                       }
+                                                               }
+                                                       }
+                                               },
+                                               "guard_policies": {
+                                                       "type": "array",
+                                                       "format": "tabs-top",
+                                                       "title": "Associated Guard policies",
+                                                       "items": {
+                                                               "headerTemplate": "{{self.policy-id}} - {{self.content.recipe}}",
+                                                               "anyOf": [
+                                                                       {
+                                                                               "title": "Guard MinMax",
+                                                                               "type": "object",
+                                                                               "properties": {
+                                                                                       "policy-id": {
+                                                                                               "type": "string",
+                                                                                               "default": "guard.minmax.new",
+                                                                                               "pattern": "^(guard.minmax\\..*)$"
+                                                                                       },
+                                                                                       "content": {
+                                                                                               "properties": {
+                                                                                                       "actor": {
+                                                                                                               "type": "string",
+                                                                                                               "enum": [
+                                                                                                                       "APPC",
+                                                                                                                       "SO",
+                                                                                                                       "VFC",
+                                                                                                                       "SDNC",
+                                                                                                                       "SDNR"
+                                                                                                               ]
+                                                                                                       },
+                                                                                                       "recipe": {
+                                                                                                               "type": "string",
+                                                                                                               "enum": [
+                                                                                                                       "Restart",
+                                                                                                                       "Rebuild",
+                                                                                                                       "Migrate",
+                                                                                                                       "Health-Check",
+                                                                                                                       "ModifyConfig",
+                                                                                                                       "VF Module Create",
+                                                                                                                       "VF Module Delete",
+                                                                                                                       "Reroute"
+                                                                                                               ]
+                                                                                                       },
+                                                                                                       "targets": {
+                                                                                                               "type": "string",
+                                                                                                               "default": ".*"
+                                                                                                       },
+                                                                                                       "clname": {
+                                                                                                               "type": "string",
+                                                                                                               "template": "{{loopName}}",
+                                                                                                               "watch": {
+                                                                                                                       "loopName": "operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName"
+                                                                                                               }
+                                                                                                       },
+                                                                                                       "guardActiveStart": {
+                                                                                                               "type": "string",
+                                                                                                               "default": "00:00:00Z"
+                                                                                                       },
+                                                                                                       "guardActiveEnd": {
+                                                                                                               "type": "string",
+                                                                                                               "default": "10:00:00Z"
+                                                                                                       },
+                                                                                                       "min": {
+                                                                                                               "type": "string",
+                                                                                                               "default": "0"
+                                                                                                       },
+                                                                                                       "max": {
+                                                                                                               "type": "string",
+                                                                                                               "default": "1"
+                                                                                                       }
+                                                                                               }
+                                                                                       }
+                                                                               }
+                                                                       },
+                                                                       {
+                                                                               "title": "Guard Frequency",
+                                                                               "type": "object",
+                                                                               "properties": {
+                                                                                       "policy-id": {
+                                                                                               "type": "string",
+                                                                                               "default": "guard.frequency.new",
+                                                                                               "pattern": "^(guard.frequency\\..*)$"
+                                                                                       },
+                                                                                       "content": {
+                                                                                               "properties": {
+                                                                                                       "actor": {
+                                                                                                               "type": "string",
+                                                                                                               "enum": [
+                                                                                                                       "APPC",
+                                                                                                                       "SO",
+                                                                                                                       "VFC",
+                                                                                                                       "SDNC",
+                                                                                                                       "SDNR"
+                                                                                                               ]
+                                                                                                       },
+                                                                                                       "recipe": {
+                                                                                                               "type": "string",
+                                                                                                               "enum": [
+                                                                                                                       "Restart",
+                                                                                                                       "Rebuild",
+                                                                                                                       "Migrate",
+                                                                                                                       "Health-Check",
+                                                                                                                       "ModifyConfig",
+                                                                                                                       "VF Module Create",
+                                                                                                                       "VF Module Delete",
+                                                                                                                       "Reroute"
+                                                                                                               ]
+                                                                                                       },
+                                                                                                       "targets": {
+                                                                                                               "type": "string",
+                                                                                                               "default": ".*"
+                                                                                                       },
+                                                                                                       "clname": {
+                                                                                                               "type": "string",
+                                                                                                               "template": "{{loopName}}",
+                                                                                                               "watch": {
+                                                                                                                       "loopName": "operational_policy_item.configurationsJson.operational_policy.controlLoop.controlLoopName"
+                                                                                                               }
+                                                                                                       },
+                                                                                                       "guardActiveStart": {
+                                                                                                               "type": "string",
+                                                                                                               "default": "00:00:00Z"
+                                                                                                       },
+                                                                                                       "guardActiveEnd": {
+                                                                                                               "type": "string",
+                                                                                                               "default": "10:00:00Z"
+                                                                                                       },
+                                                                                                       "limit": {
+                                                                                                               "type": "string"
+                                                                                                       },
+                                                                                                       "timeWindow": {
+                                                                                                               "type": "string"
+                                                                                                       },
+                                                                                                       "timeUnits": {
+                                                                                                               "type": "string",
+                                                                                                               "enum": [
+                                                                                                                       "minute",
+                                                                                                                       "hour",
+                                                                                                                       "day",
+                                                                                                                       "week",
+                                                                                                                       "month",
+                                                                                                                       "year"
+                                                                                                               ]
+                                                                                                       }
+                                                                                               }
+                                                                                       }
+                                                                               }
+                                                                       }
+                                                               ]
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+}
\ No newline at end of file
index 41184c9..4d2b9f3 100644 (file)
@@ -1,39 +1,43 @@
 controlLoop:
   abatement: true
-  controlLoopName: control loop
-  timeout: 30
-  trigger_policy: new1
-  version: 2.0.0
+  controlLoopName: LOOP_ASJOy_v1_0_ResourceInstanceName1_tca
+  timeout: 0
+  trigger_policy: policy1
 policies:
-- actor: SO
-  failure: new2
-  failure_exception: new2
-  failure_guard: new2
-  failure_retries: new2
-  failure_timeout: new2
-  id: new1
+- actor: APPC
+  failure: policy2
+  failure_exception: final_failure_exception
+  failure_guard: final_failure_guard
+  failure_retries: final_failure_retries
+  failure_timeout: final_failure_timeout
+  id: policy1
   payload:
     configurationParameters: '[{"ip-addr":"$.vf-module-topology.vf-module-parameters.param[10].value","oam-ip-addr":"$.vf-module-topology.vf-module-parameters.param[15].value","enabled":"$.vf-module-topology.vf-module-parameters.param[22].value"}]'
     requestParameters: '{"usePreload":true,"userParams":[]}'
-  recipe: Rebuild
-  retry: 10
-  success: new2
+  recipe: Restart
+  retry: 0
+  success: final_success
   target:
-    resourceTargetId: test
-    type: VFC
-  timeout: 20
-- actor: SDNC
+    resourceID: vLoadBalancerMS
+    type: VNF
+  timeout: 0
+- actor: SO
   failure: final_failure
   failure_exception: final_failure_exception
   failure_guard: final_failure_guard
   failure_retries: final_failure_retries
   failure_timeout: final_failure_timeout
-  id: new2
+  id: policy2
   payload: ''
-  recipe: Migrate
-  retry: 30
+  recipe: VF Module Create
+  retry: 0
   success: final_success
   target:
-    resourceTargetId: test
-    type: VFC
-  timeout: 40
+    modelCustomizationId: 1bffdc31-a37d-4dee-b65c-dde623a76e52
+    modelInvariantId: ca052563-eb92-4b5b-ad41-9111768ce043
+    modelName: Vloadbalancerms..vpkg..module-1
+    modelVersion: 1
+    modelVersionId: 1e725ccc-b823-4f67-82b9-4f4367070dbc
+    resourceID: Vloadbalancerms..vpkg..module-1
+    type: VFMODULE
+  timeout: 0
index 5097654..ed01976 100644 (file)
@@ -1,4 +1,4 @@
 {
   "policy-id": "testPolicy",
-  "content": "controlLoop%3A%0A++abatement%3A+true%0A++controlLoopName%3A+control+loop%0A++timeout%3A+30%0A++trigger_policy%3A+new1%0A++version%3A+2.0.0%0Apolicies%3A%0A-+actor%3A+SO%0A++failure%3A+new2%0A++failure_exception%3A+new2%0A++failure_guard%3A+new2%0A++failure_retries%3A+new2%0A++failure_timeout%3A+new2%0A++id%3A+new1%0A++payload%3A%0A++++configurationParameters%3A+%27%5B%7B%22ip-addr%22%3A%22%24.vf-module-topology.vf-module-parameters.param%5B10%5D.value%22%2C%22oam-ip-addr%22%3A%22%24.vf-module-topology.vf-module-parameters.param%5B15%5D.value%22%2C%22enabled%22%3A%22%24.vf-module-topology.vf-module-parameters.param%5B22%5D.value%22%7D%5D%27%0A++++requestParameters%3A+%27%7B%22usePreload%22%3Atrue%2C%22userParams%22%3A%5B%5D%7D%27%0A++recipe%3A+Rebuild%0A++retry%3A+10%0A++success%3A+new2%0A++target%3A%0A++++resourceTargetId%3A+test%0A++++type%3A+VFC%0A++timeout%3A+20%0A-+actor%3A+SDNC%0A++failure%3A+final_failure%0A++failure_exception%3A+final_failure_exception%0A++failure_guard%3A+final_failure_guard%0A++failure_retries%3A+final_failure_retries%0A++failure_timeout%3A+final_failure_timeout%0A++id%3A+new2%0A++payload%3A+%27%27%0A++recipe%3A+Migrate%0A++retry%3A+30%0A++success%3A+final_success%0A++target%3A%0A++++resourceTargetId%3A+test%0A++++type%3A+VFC%0A++timeout%3A+40%0A"
+  "content": "controlLoop%3A%0A++abatement%3A+true%0A++controlLoopName%3A+LOOP_ASJOy_v1_0_ResourceInstanceName1_tca%0A++timeout%3A+0%0A++trigger_policy%3A+policy1%0Apolicies%3A%0A-+actor%3A+APPC%0A++failure%3A+policy2%0A++failure_exception%3A+final_failure_exception%0A++failure_guard%3A+final_failure_guard%0A++failure_retries%3A+final_failure_retries%0A++failure_timeout%3A+final_failure_timeout%0A++id%3A+policy1%0A++payload%3A%0A++++configurationParameters%3A+%27%5B%7B%22ip-addr%22%3A%22%24.vf-module-topology.vf-module-parameters.param%5B10%5D.value%22%2C%22oam-ip-addr%22%3A%22%24.vf-module-topology.vf-module-parameters.param%5B15%5D.value%22%2C%22enabled%22%3A%22%24.vf-module-topology.vf-module-parameters.param%5B22%5D.value%22%7D%5D%27%0A++++requestParameters%3A+%27%7B%22usePreload%22%3Atrue%2C%22userParams%22%3A%5B%5D%7D%27%0A++recipe%3A+Restart%0A++retry%3A+0%0A++success%3A+final_success%0A++target%3A%0A++++resourceID%3A+vLoadBalancerMS%0A++++type%3A+VNF%0A++timeout%3A+0%0A-+actor%3A+SO%0A++failure%3A+final_failure%0A++failure_exception%3A+final_failure_exception%0A++failure_guard%3A+final_failure_guard%0A++failure_retries%3A+final_failure_retries%0A++failure_timeout%3A+final_failure_timeout%0A++id%3A+policy2%0A++payload%3A+%27%27%0A++recipe%3A+VF+Module+Create%0A++retry%3A+0%0A++success%3A+final_success%0A++target%3A%0A++++modelCustomizationId%3A+1bffdc31-a37d-4dee-b65c-dde623a76e52%0A++++modelInvariantId%3A+ca052563-eb92-4b5b-ad41-9111768ce043%0A++++modelName%3A+Vloadbalancerms..vpkg..module-1%0A++++modelVersion%3A+1%0A++++modelVersionId%3A+1e725ccc-b823-4f67-82b9-4f4367070dbc%0A++++resourceID%3A+Vloadbalancerms..vpkg..module-1%0A++++type%3A+VFMODULE%0A++timeout%3A+0%0A"
 }
\ No newline at end of file
index c3a6b5c..ed03842 100644 (file)
@@ -8,35 +8,45 @@ topology_template:
         policy-id: testPolicy
       properties:
         controlLoop:
-          controlLoopName: control loop
-          version: 2.0.0
-          trigger_policy: new1
-          timeout: '30'
-          abatement: 'true'
+          timeout: '0'
+          abatement: 'True'
+          trigger_policy: policy1
+          controlLoopName: LOOP_ASJOy_v1_0_ResourceInstanceName1_tca
         policies:
-        - id: new1
-          recipe: Rebuild
-          retry: '10'
-          timeout: '20'
-          actor: SO
+        - id: policy1
+          recipe: Restart
+          retry: '0'
+          timeout: '0'
+          actor: APPC
           payload:
             requestParameters: '{"usePreload":true,"userParams":[]}'
             configurationParameters: '[{"ip-addr":"$.vf-module-topology.vf-module-parameters.param[10].value","oam-ip-addr":"$.vf-module-topology.vf-module-parameters.param[15].value","enabled":"$.vf-module-topology.vf-module-parameters.param[22].value"}]'
-          success: new2
-          failure: new2
-          failure_timeout: new2
-          failure_retries: new2
-          failure_exception: new2
-          failure_guard: new2
+          success: final_success
+          failure: policy2
+          failure_timeout: final_failure_timeout
+          failure_retries: final_failure_retries
+          failure_exception: final_failure_exception
+          failure_guard: final_failure_guard
           target:
-            type: VFC
-            resourceTargetId: test
-        - id: new2
-          recipe: Migrate
-          retry: '30'
-          timeout: '40'
-          actor: SDNC
+            type: VNF
+            resourceID: vLoadBalancerMS
+        - id: policy2
+          recipe: VF Module Create
+          retry: '0'
+          timeout: '0'
+          actor: SO
           payload: ''
+          success: final_success
+          failure: final_failure
+          failure_timeout: final_failure_timeout
+          failure_retries: final_failure_retries
+          failure_exception: final_failure_exception
+          failure_guard: final_failure_guard
           target:
-            type: VFC
-            resourceTargetId: test
+            type: VFMODULE
+            resourceID: Vloadbalancerms..vpkg..module-1
+            modelInvariantId: ca052563-eb92-4b5b-ad41-9111768ce043
+            modelVersionId: 1e725ccc-b823-4f67-82b9-4f4367070dbc
+            modelName: Vloadbalancerms..vpkg..module-1
+            modelVersion: '1'
+            modelCustomizationId: 1bffdc31-a37d-4dee-b65c-dde623a76e52
index bfce6b3..ac1314e 100644 (file)
@@ -1,71 +1,82 @@
 {
-       "guard_policies": {
-               "guard1":{
-                       "recipe": "Rebuild",
-                       "actor": "SO",
-                       "clname": "testloop",
-                       "targets": ".*",
-                       "min": "3",
-                       "max": "7",
-                       "limit": "",
-                       "timeUnits": "",
-                       "timeWindow": "",
-                       "guardActiveStart": "00:00:01-05:00",
-                       "guardActiveEnd": "23:59:01-05:00"
-               },
-               "guard2":{
-                       "recipe": "Migrate",
-                       "actor": "SO",
-                       "clname": "testloop",
-                       "targets": ".*",
-                       "min": "1",
-                       "max": "2",
-                       "limit": "",
-                       "timeUnits": "",
-                       "timeWindow": "",
-                       "guardActiveStart": "00:00:01-05:00",
-                       "guardActiveEnd": "23:59:01-05:00"
-               }
-       },
-       "operational_policy": {
-               "controlLoop": {
-                       "controlLoopName": "control loop",
-                       "version": "2.0.0",
-                       "trigger_policy": "new1",
-                       "timeout": "30",
-                       "abatement": "true"
-               },
-               "policies": [
-                       {
-                               "id": "new1",
-                               "recipe": "Rebuild",
-                               "retry": "10",
-                               "timeout": "20",
-                               "actor": "SO",
-                               "payload": "requestParameters: '{\"usePreload\":true,\"userParams\":[]}'\r\nconfigurationParameters: '[{\"ip-addr\":\"$.vf-module-topology.vf-module-parameters.param[10].value\",\"oam-ip-addr\":\"$.vf-module-topology.vf-module-parameters.param[15].value\",\"enabled\":\"$.vf-module-topology.vf-module-parameters.param[22].value\"}]'",
-                               "success": "new2",
-                               "failure": "new2",
-                               "failure_timeout": "new2",
-                               "failure_retries": "new2",
-                               "failure_exception": "new2",
-                               "failure_guard": "new2",
-                               "target": {
-                                       "type": "VFC",
-                                       "resourceTargetId": "test"
-                               }
-                       },
-                       {
-                               "id": "new2",
-                               "recipe": "Migrate",
-                               "retry": "30",
-                               "timeout": "40",
-                               "actor": "SDNC",
-                               "payload": "",
-                               "target": {
-                                       "type": "VFC",
-                                       "resourceTargetId": "test"
-                               }
-                       }
-               ]
-       }
+  "operational_policy": {
+    "controlLoop": {
+      "timeout": "0",
+      "abatement": "True",
+      "trigger_policy": "policy1",
+      "controlLoopName": "LOOP_ASJOy_v1_0_ResourceInstanceName1_tca"
+    },
+    "policies": [
+      {
+        "id": "policy1",
+        "recipe": "Restart",
+        "retry": "0",
+        "timeout": "0",
+        "actor": "APPC",
+        "payload": "requestParameters: '{\"usePreload\":true,\"userParams\":[]}'\r\nconfigurationParameters: '[{\"ip-addr\":\"$.vf-module-topology.vf-module-parameters.param[10].value\",\"oam-ip-addr\":\"$.vf-module-topology.vf-module-parameters.param[15].value\",\"enabled\":\"$.vf-module-topology.vf-module-parameters.param[22].value\"}]'",
+        "success": "final_success",
+        "failure": "policy2",
+        "failure_timeout": "final_failure_timeout",
+        "failure_retries": "final_failure_retries",
+        "failure_exception": "final_failure_exception",
+        "failure_guard": "final_failure_guard",
+        "target": {
+          "type": "VNF",
+          "resourceID": "vLoadBalancerMS"
+        }
+      },
+    {
+        "id": "policy2",
+        "recipe": "VF Module Create",
+        "retry": "0",
+        "timeout": "0",
+        "actor": "SO",
+        "payload": "",
+        "success": "final_success",
+        "failure": "final_failure",
+        "failure_timeout": "final_failure_timeout",
+        "failure_retries": "final_failure_retries",
+        "failure_exception": "final_failure_exception",
+        "failure_guard": "final_failure_guard",
+        "target": {
+          "type": "VFMODULE",
+          "resourceID": "Vloadbalancerms..vpkg..module-1",
+          "modelInvariantId": "ca052563-eb92-4b5b-ad41-9111768ce043",
+          "modelVersionId": "1e725ccc-b823-4f67-82b9-4f4367070dbc",
+          "modelName": "Vloadbalancerms..vpkg..module-1",
+          "modelVersion": "1",
+          "modelCustomizationId": "1bffdc31-a37d-4dee-b65c-dde623a76e52"
+        }
+      }
+    ]
+  },
+  "guard_policies": [
+    {
+      "policy-id": "guard.minmax.new",
+      "content": {
+        "actor": "APPC",
+        "recipe": "Restart",
+        "targets": ".*",
+        "clname": "LOOP_ASJOy_v1_0_ResourceInstanceName1_tca",
+        "guardActiveStart": "00:00:00Z",
+        "guardActiveEnd": "10:00:00Z",
+        "min": "0",
+        "max": "1"
+      }
+    },
+    {
+      "policy-id": "guard.frequency.new",
+      "content": {
+        "actor": "APPC",
+        "recipe": "Rebuild",
+        "targets": ".*",
+        "clname": "LOOP_ASJOy_v1_0_ResourceInstanceName1_tca",
+        "guardActiveStart": "00:00:00Z",
+        "guardActiveEnd": "10:00:00Z",
+        "limit": "1",
+        "timeWindow": "2",
+        "timeUnits": "minute"
+      }
+    }
+  ]
 }
index bf941e5..ad3a5b4 100644 (file)
@@ -4,10 +4,10 @@
       "policy-id": "GuardOpPolicyTest"
     },
     {
-      "policy-id": "guard2"
+      "policy-id": "guard.minmax.new"
     },
     {
-      "policy-id": "guard1"
+      "policy-id": "guard.frequency.new"
     },
     {
       "policy-id": "configPolicyTest"
diff --git a/ui-react/package-lock.json b/ui-react/package-lock.json
new file mode 100644 (file)
index 0000000..4f64bb3
--- /dev/null
@@ -0,0 +1,13918 @@
+{
+  "name": "onap-clamp-ui",
+  "version": "4.1.0-SNAPSHOT",
+  "lockfileVersion": 1,
+  "requires": true,
+  "dependencies": {
+    "@babel/code-frame": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
+      "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
+      "requires": {
+        "@babel/highlight": "^7.0.0"
+      }
+    },
+    "@babel/core": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.5.5.tgz",
+      "integrity": "sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==",
+      "requires": {
+        "@babel/code-frame": "^7.5.5",
+        "@babel/generator": "^7.5.5",
+        "@babel/helpers": "^7.5.5",
+        "@babel/parser": "^7.5.5",
+        "@babel/template": "^7.4.4",
+        "@babel/traverse": "^7.5.5",
+        "@babel/types": "^7.5.5",
+        "convert-source-map": "^1.1.0",
+        "debug": "^4.1.0",
+        "json5": "^2.1.0",
+        "lodash": "^4.17.13",
+        "resolve": "^1.3.2",
+        "semver": "^5.4.1",
+        "source-map": "^0.5.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+        }
+      }
+    },
+    "@babel/generator": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.5.tgz",
+      "integrity": "sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==",
+      "requires": {
+        "@babel/types": "^7.5.5",
+        "jsesc": "^2.5.1",
+        "lodash": "^4.17.13",
+        "source-map": "^0.5.0",
+        "trim-right": "^1.0.1"
+      }
+    },
+    "@babel/helper-annotate-as-pure": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz",
+      "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==",
+      "requires": {
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "@babel/helper-builder-binary-assignment-operator-visitor": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz",
+      "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==",
+      "requires": {
+        "@babel/helper-explode-assignable-expression": "^7.1.0",
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "@babel/helper-builder-react-jsx": {
+      "version": "7.3.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz",
+      "integrity": "sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw==",
+      "requires": {
+        "@babel/types": "^7.3.0",
+        "esutils": "^2.0.0"
+      }
+    },
+    "@babel/helper-call-delegate": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz",
+      "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==",
+      "requires": {
+        "@babel/helper-hoist-variables": "^7.4.4",
+        "@babel/traverse": "^7.4.4",
+        "@babel/types": "^7.4.4"
+      }
+    },
+    "@babel/helper-create-class-features-plugin": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.5.5.tgz",
+      "integrity": "sha512-ZsxkyYiRA7Bg+ZTRpPvB6AbOFKTFFK4LrvTet8lInm0V468MWCaSYJE+I7v2z2r8KNLtYiV+K5kTCnR7dvyZjg==",
+      "requires": {
+        "@babel/helper-function-name": "^7.1.0",
+        "@babel/helper-member-expression-to-functions": "^7.5.5",
+        "@babel/helper-optimise-call-expression": "^7.0.0",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-replace-supers": "^7.5.5",
+        "@babel/helper-split-export-declaration": "^7.4.4"
+      }
+    },
+    "@babel/helper-define-map": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz",
+      "integrity": "sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==",
+      "requires": {
+        "@babel/helper-function-name": "^7.1.0",
+        "@babel/types": "^7.5.5",
+        "lodash": "^4.17.13"
+      }
+    },
+    "@babel/helper-explode-assignable-expression": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz",
+      "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==",
+      "requires": {
+        "@babel/traverse": "^7.1.0",
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "@babel/helper-function-name": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz",
+      "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
+      "requires": {
+        "@babel/helper-get-function-arity": "^7.0.0",
+        "@babel/template": "^7.1.0",
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "@babel/helper-get-function-arity": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz",
+      "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==",
+      "requires": {
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "@babel/helper-hoist-variables": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz",
+      "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==",
+      "requires": {
+        "@babel/types": "^7.4.4"
+      }
+    },
+    "@babel/helper-member-expression-to-functions": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz",
+      "integrity": "sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==",
+      "requires": {
+        "@babel/types": "^7.5.5"
+      }
+    },
+    "@babel/helper-module-imports": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz",
+      "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==",
+      "requires": {
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "@babel/helper-module-transforms": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz",
+      "integrity": "sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==",
+      "requires": {
+        "@babel/helper-module-imports": "^7.0.0",
+        "@babel/helper-simple-access": "^7.1.0",
+        "@babel/helper-split-export-declaration": "^7.4.4",
+        "@babel/template": "^7.4.4",
+        "@babel/types": "^7.5.5",
+        "lodash": "^4.17.13"
+      }
+    },
+    "@babel/helper-optimise-call-expression": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz",
+      "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==",
+      "requires": {
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "@babel/helper-plugin-utils": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz",
+      "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA=="
+    },
+    "@babel/helper-regex": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz",
+      "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==",
+      "requires": {
+        "lodash": "^4.17.13"
+      }
+    },
+    "@babel/helper-remap-async-to-generator": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz",
+      "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==",
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.0.0",
+        "@babel/helper-wrap-function": "^7.1.0",
+        "@babel/template": "^7.1.0",
+        "@babel/traverse": "^7.1.0",
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "@babel/helper-replace-supers": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz",
+      "integrity": "sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==",
+      "requires": {
+        "@babel/helper-member-expression-to-functions": "^7.5.5",
+        "@babel/helper-optimise-call-expression": "^7.0.0",
+        "@babel/traverse": "^7.5.5",
+        "@babel/types": "^7.5.5"
+      }
+    },
+    "@babel/helper-simple-access": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz",
+      "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==",
+      "requires": {
+        "@babel/template": "^7.1.0",
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "@babel/helper-split-export-declaration": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz",
+      "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==",
+      "requires": {
+        "@babel/types": "^7.4.4"
+      }
+    },
+    "@babel/helper-wrap-function": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz",
+      "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==",
+      "requires": {
+        "@babel/helper-function-name": "^7.1.0",
+        "@babel/template": "^7.1.0",
+        "@babel/traverse": "^7.1.0",
+        "@babel/types": "^7.2.0"
+      }
+    },
+    "@babel/helpers": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.5.5.tgz",
+      "integrity": "sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g==",
+      "requires": {
+        "@babel/template": "^7.4.4",
+        "@babel/traverse": "^7.5.5",
+        "@babel/types": "^7.5.5"
+      }
+    },
+    "@babel/highlight": {
+      "version": "7.5.0",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz",
+      "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
+      "requires": {
+        "chalk": "^2.0.0",
+        "esutils": "^2.0.2",
+        "js-tokens": "^4.0.0"
+      }
+    },
+    "@babel/parser": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.5.tgz",
+      "integrity": "sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g=="
+    },
+    "@babel/plugin-proposal-async-generator-functions": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz",
+      "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-remap-async-to-generator": "^7.1.0",
+        "@babel/plugin-syntax-async-generators": "^7.2.0"
+      }
+    },
+    "@babel/plugin-proposal-class-properties": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz",
+      "integrity": "sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A==",
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "^7.5.5",
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-proposal-decorators": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.4.4.tgz",
+      "integrity": "sha512-z7MpQz3XC/iQJWXH9y+MaWcLPNSMY9RQSthrLzak8R8hCj0fuyNk+Dzi9kfNe/JxxlWQ2g7wkABbgWjW36MTcw==",
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "^7.4.4",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-decorators": "^7.2.0"
+      }
+    },
+    "@babel/plugin-proposal-dynamic-import": {
+      "version": "7.5.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz",
+      "integrity": "sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-dynamic-import": "^7.2.0"
+      }
+    },
+    "@babel/plugin-proposal-json-strings": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz",
+      "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-json-strings": "^7.2.0"
+      }
+    },
+    "@babel/plugin-proposal-object-rest-spread": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz",
+      "integrity": "sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-object-rest-spread": "^7.2.0"
+      }
+    },
+    "@babel/plugin-proposal-optional-catch-binding": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz",
+      "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.2.0"
+      }
+    },
+    "@babel/plugin-proposal-unicode-property-regex": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz",
+      "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-regex": "^7.4.4",
+        "regexpu-core": "^4.5.4"
+      }
+    },
+    "@babel/plugin-syntax-async-generators": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz",
+      "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-decorators": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz",
+      "integrity": "sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-dynamic-import": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz",
+      "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-flow": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz",
+      "integrity": "sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-json-strings": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz",
+      "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-jsx": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz",
+      "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-object-rest-spread": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz",
+      "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-optional-catch-binding": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz",
+      "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-typescript": {
+      "version": "7.3.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz",
+      "integrity": "sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-arrow-functions": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz",
+      "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-async-to-generator": {
+      "version": "7.5.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz",
+      "integrity": "sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==",
+      "requires": {
+        "@babel/helper-module-imports": "^7.0.0",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-remap-async-to-generator": "^7.1.0"
+      }
+    },
+    "@babel/plugin-transform-block-scoped-functions": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz",
+      "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-block-scoping": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.5.5.tgz",
+      "integrity": "sha512-82A3CLRRdYubkG85lKwhZB0WZoHxLGsJdux/cOVaJCJpvYFl1LVzAIFyRsa7CvXqW8rBM4Zf3Bfn8PHt5DP0Sg==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "lodash": "^4.17.13"
+      }
+    },
+    "@babel/plugin-transform-classes": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz",
+      "integrity": "sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==",
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.0.0",
+        "@babel/helper-define-map": "^7.5.5",
+        "@babel/helper-function-name": "^7.1.0",
+        "@babel/helper-optimise-call-expression": "^7.0.0",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-replace-supers": "^7.5.5",
+        "@babel/helper-split-export-declaration": "^7.4.4",
+        "globals": "^11.1.0"
+      }
+    },
+    "@babel/plugin-transform-computed-properties": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz",
+      "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-destructuring": {
+      "version": "7.5.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.5.0.tgz",
+      "integrity": "sha512-YbYgbd3TryYYLGyC7ZR+Tq8H/+bCmwoaxHfJHupom5ECstzbRLTch6gOQbhEY9Z4hiCNHEURgq06ykFv9JZ/QQ==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-dotall-regex": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz",
+      "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-regex": "^7.4.4",
+        "regexpu-core": "^4.5.4"
+      }
+    },
+    "@babel/plugin-transform-duplicate-keys": {
+      "version": "7.5.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz",
+      "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-exponentiation-operator": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz",
+      "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==",
+      "requires": {
+        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0",
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-flow-strip-types": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.4.4.tgz",
+      "integrity": "sha512-WyVedfeEIILYEaWGAUWzVNyqG4sfsNooMhXWsu/YzOvVGcsnPb5PguysjJqI3t3qiaYj0BR8T2f5njdjTGe44Q==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-flow": "^7.2.0"
+      }
+    },
+    "@babel/plugin-transform-for-of": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz",
+      "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-function-name": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz",
+      "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==",
+      "requires": {
+        "@babel/helper-function-name": "^7.1.0",
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-literals": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz",
+      "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-member-expression-literals": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz",
+      "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-modules-amd": {
+      "version": "7.5.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz",
+      "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==",
+      "requires": {
+        "@babel/helper-module-transforms": "^7.1.0",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "babel-plugin-dynamic-import-node": "^2.3.0"
+      }
+    },
+    "@babel/plugin-transform-modules-commonjs": {
+      "version": "7.5.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz",
+      "integrity": "sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ==",
+      "requires": {
+        "@babel/helper-module-transforms": "^7.4.4",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-simple-access": "^7.1.0",
+        "babel-plugin-dynamic-import-node": "^2.3.0"
+      }
+    },
+    "@babel/plugin-transform-modules-systemjs": {
+      "version": "7.5.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz",
+      "integrity": "sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==",
+      "requires": {
+        "@babel/helper-hoist-variables": "^7.4.4",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "babel-plugin-dynamic-import-node": "^2.3.0"
+      }
+    },
+    "@babel/plugin-transform-modules-umd": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz",
+      "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==",
+      "requires": {
+        "@babel/helper-module-transforms": "^7.1.0",
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-named-capturing-groups-regex": {
+      "version": "7.4.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz",
+      "integrity": "sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg==",
+      "requires": {
+        "regexp-tree": "^0.1.6"
+      }
+    },
+    "@babel/plugin-transform-new-target": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz",
+      "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-object-super": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz",
+      "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-replace-supers": "^7.5.5"
+      }
+    },
+    "@babel/plugin-transform-parameters": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz",
+      "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==",
+      "requires": {
+        "@babel/helper-call-delegate": "^7.4.4",
+        "@babel/helper-get-function-arity": "^7.0.0",
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-property-literals": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz",
+      "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-react-constant-elements": {
+      "version": "7.5.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.5.0.tgz",
+      "integrity": "sha512-c5Ba8cpybZFp1Izkf2sWGuNjOxoQ32tFgBvvYvwGhi4+9f6vGiSK9Gex4uVuO/Va6YJFu41aAh1MzMjUWkp0IQ==",
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.0.0",
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-react-display-name": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz",
+      "integrity": "sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-react-jsx": {
+      "version": "7.3.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz",
+      "integrity": "sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==",
+      "requires": {
+        "@babel/helper-builder-react-jsx": "^7.3.0",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-jsx": "^7.2.0"
+      }
+    },
+    "@babel/plugin-transform-react-jsx-self": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz",
+      "integrity": "sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-jsx": "^7.2.0"
+      }
+    },
+    "@babel/plugin-transform-react-jsx-source": {
+      "version": "7.5.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.5.0.tgz",
+      "integrity": "sha512-58Q+Jsy4IDCZx7kqEZuSDdam/1oW8OdDX8f+Loo6xyxdfg1yF0GE2XNJQSTZCaMol93+FBzpWiPEwtbMloAcPg==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-jsx": "^7.2.0"
+      }
+    },
+    "@babel/plugin-transform-regenerator": {
+      "version": "7.4.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz",
+      "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==",
+      "requires": {
+        "regenerator-transform": "^0.14.0"
+      }
+    },
+    "@babel/plugin-transform-reserved-words": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz",
+      "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-runtime": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.5.5.tgz",
+      "integrity": "sha512-6Xmeidsun5rkwnGfMOp6/z9nSzWpHFNVr2Jx7kwoq4mVatQfQx5S56drBgEHF+XQbKOdIaOiMIINvp/kAwMN+w==",
+      "requires": {
+        "@babel/helper-module-imports": "^7.0.0",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "resolve": "^1.8.1",
+        "semver": "^5.5.1"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+        }
+      }
+    },
+    "@babel/plugin-transform-shorthand-properties": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz",
+      "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-spread": {
+      "version": "7.2.2",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz",
+      "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-sticky-regex": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz",
+      "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-regex": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-template-literals": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz",
+      "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==",
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.0.0",
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-typeof-symbol": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz",
+      "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-typescript": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.5.5.tgz",
+      "integrity": "sha512-pehKf4m640myZu5B2ZviLaiBlxMCjSZ1qTEO459AXKX5GnPueyulJeCqZFs1nz/Ya2dDzXQ1NxZ/kKNWyD4h6w==",
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "^7.5.5",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-typescript": "^7.2.0"
+      }
+    },
+    "@babel/plugin-transform-unicode-regex": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz",
+      "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-regex": "^7.4.4",
+        "regexpu-core": "^4.5.4"
+      }
+    },
+    "@babel/preset-env": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.5.5.tgz",
+      "integrity": "sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A==",
+      "requires": {
+        "@babel/helper-module-imports": "^7.0.0",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-proposal-async-generator-functions": "^7.2.0",
+        "@babel/plugin-proposal-dynamic-import": "^7.5.0",
+        "@babel/plugin-proposal-json-strings": "^7.2.0",
+        "@babel/plugin-proposal-object-rest-spread": "^7.5.5",
+        "@babel/plugin-proposal-optional-catch-binding": "^7.2.0",
+        "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
+        "@babel/plugin-syntax-async-generators": "^7.2.0",
+        "@babel/plugin-syntax-dynamic-import": "^7.2.0",
+        "@babel/plugin-syntax-json-strings": "^7.2.0",
+        "@babel/plugin-syntax-object-rest-spread": "^7.2.0",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.2.0",
+        "@babel/plugin-transform-arrow-functions": "^7.2.0",
+        "@babel/plugin-transform-async-to-generator": "^7.5.0",
+        "@babel/plugin-transform-block-scoped-functions": "^7.2.0",
+        "@babel/plugin-transform-block-scoping": "^7.5.5",
+        "@babel/plugin-transform-classes": "^7.5.5",
+        "@babel/plugin-transform-computed-properties": "^7.2.0",
+        "@babel/plugin-transform-destructuring": "^7.5.0",
+        "@babel/plugin-transform-dotall-regex": "^7.4.4",
+        "@babel/plugin-transform-duplicate-keys": "^7.5.0",
+        "@babel/plugin-transform-exponentiation-operator": "^7.2.0",
+        "@babel/plugin-transform-for-of": "^7.4.4",
+        "@babel/plugin-transform-function-name": "^7.4.4",
+        "@babel/plugin-transform-literals": "^7.2.0",
+        "@babel/plugin-transform-member-expression-literals": "^7.2.0",
+        "@babel/plugin-transform-modules-amd": "^7.5.0",
+        "@babel/plugin-transform-modules-commonjs": "^7.5.0",
+        "@babel/plugin-transform-modules-systemjs": "^7.5.0",
+        "@babel/plugin-transform-modules-umd": "^7.2.0",
+        "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5",
+        "@babel/plugin-transform-new-target": "^7.4.4",
+        "@babel/plugin-transform-object-super": "^7.5.5",
+        "@babel/plugin-transform-parameters": "^7.4.4",
+        "@babel/plugin-transform-property-literals": "^7.2.0",
+        "@babel/plugin-transform-regenerator": "^7.4.5",
+        "@babel/plugin-transform-reserved-words": "^7.2.0",
+        "@babel/plugin-transform-shorthand-properties": "^7.2.0",
+        "@babel/plugin-transform-spread": "^7.2.0",
+        "@babel/plugin-transform-sticky-regex": "^7.2.0",
+        "@babel/plugin-transform-template-literals": "^7.4.4",
+        "@babel/plugin-transform-typeof-symbol": "^7.2.0",
+        "@babel/plugin-transform-unicode-regex": "^7.4.4",
+        "@babel/types": "^7.5.5",
+        "browserslist": "^4.6.0",
+        "core-js-compat": "^3.1.1",
+        "invariant": "^2.2.2",
+        "js-levenshtein": "^1.1.3",
+        "semver": "^5.5.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+        }
+      }
+    },
+    "@babel/preset-react": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz",
+      "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-transform-react-display-name": "^7.0.0",
+        "@babel/plugin-transform-react-jsx": "^7.0.0",
+        "@babel/plugin-transform-react-jsx-self": "^7.0.0",
+        "@babel/plugin-transform-react-jsx-source": "^7.0.0"
+      }
+    },
+    "@babel/preset-typescript": {
+      "version": "7.3.3",
+      "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.3.3.tgz",
+      "integrity": "sha512-mzMVuIP4lqtn4du2ynEfdO0+RYcslwrZiJHXu4MGaC1ctJiW2fyaeDrtjJGs7R/KebZ1sgowcIoWf4uRpEfKEg==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-transform-typescript": "^7.3.2"
+      }
+    },
+    "@babel/runtime": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz",
+      "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==",
+      "requires": {
+        "regenerator-runtime": "^0.13.2"
+      }
+    },
+    "@babel/template": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz",
+      "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==",
+      "requires": {
+        "@babel/code-frame": "^7.0.0",
+        "@babel/parser": "^7.4.4",
+        "@babel/types": "^7.4.4"
+      }
+    },
+    "@babel/traverse": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.5.tgz",
+      "integrity": "sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==",
+      "requires": {
+        "@babel/code-frame": "^7.5.5",
+        "@babel/generator": "^7.5.5",
+        "@babel/helper-function-name": "^7.1.0",
+        "@babel/helper-split-export-declaration": "^7.4.4",
+        "@babel/parser": "^7.5.5",
+        "@babel/types": "^7.5.5",
+        "debug": "^4.1.0",
+        "globals": "^11.1.0",
+        "lodash": "^4.17.13"
+      }
+    },
+    "@babel/types": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz",
+      "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==",
+      "requires": {
+        "esutils": "^2.0.2",
+        "lodash": "^4.17.13",
+        "to-fast-properties": "^2.0.0"
+      }
+    },
+    "@cnakazawa/watch": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz",
+      "integrity": "sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA==",
+      "requires": {
+        "exec-sh": "^0.3.2",
+        "minimist": "^1.2.0"
+      }
+    },
+    "@csstools/convert-colors": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz",
+      "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw=="
+    },
+    "@csstools/normalize.css": {
+      "version": "9.0.1",
+      "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-9.0.1.tgz",
+      "integrity": "sha512-6It2EVfGskxZCQhuykrfnALg7oVeiI6KclWSmGDqB0AiInVrTGB9Jp9i4/Ad21u9Jde/voVQz6eFX/eSg/UsPA=="
+    },
+    "@emotion/cache": {
+      "version": "10.0.15",
+      "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.15.tgz",
+      "integrity": "sha512-8VthgeKhlGeTXSW1JN7I14AnAaiFPbOrqNqg3dPoGCZ3bnMjkrmRU0zrx0BtBw9esBaPaQgDB9y0tVgAGT2Mrg==",
+      "requires": {
+        "@emotion/sheet": "0.9.3",
+        "@emotion/stylis": "0.8.4",
+        "@emotion/utils": "0.11.2",
+        "@emotion/weak-memoize": "0.2.3"
+      }
+    },
+    "@emotion/core": {
+      "version": "10.0.15",
+      "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.0.15.tgz",
+      "integrity": "sha512-VHwwl3k/ddMfQOHYgOJryXOs2rGJ5AfKLQGm5AVolNonnr6tkmDI4nzIMNaPpveoXVs7sP0OrF24UunIPxveQw==",
+      "requires": {
+        "@babel/runtime": "^7.4.3",
+        "@emotion/cache": "^10.0.15",
+        "@emotion/css": "^10.0.14",
+        "@emotion/serialize": "^0.11.9",
+        "@emotion/sheet": "0.9.3",
+        "@emotion/utils": "0.11.2"
+      }
+    },
+    "@emotion/css": {
+      "version": "10.0.14",
+      "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.14.tgz",
+      "integrity": "sha512-MozgPkBEWvorcdpqHZE5x1D/PLEHUitALQCQYt2wayf4UNhpgQs2tN0UwHYS4FMy5ROBH+0ALyCFVYJ/ywmwlg==",
+      "requires": {
+        "@emotion/serialize": "^0.11.8",
+        "@emotion/utils": "0.11.2",
+        "babel-plugin-emotion": "^10.0.14"
+      }
+    },
+    "@emotion/hash": {
+      "version": "0.7.2",
+      "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.7.2.tgz",
+      "integrity": "sha512-RMtr1i6E8MXaBWwhXL3yeOU8JXRnz8GNxHvaUfVvwxokvayUY0zoBeWbKw1S9XkufmGEEdQd228pSZXFkAln8Q=="
+    },
+    "@emotion/is-prop-valid": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.2.tgz",
+      "integrity": "sha512-ZQIMAA2kLUWiUeMZNJDTeCwYRx1l8SQL0kHktze4COT22occKpDML1GDUXP5/sxhOMrZO8vZw773ni4H5Snrsg==",
+      "requires": {
+        "@emotion/memoize": "0.7.2"
+      }
+    },
+    "@emotion/memoize": {
+      "version": "0.7.2",
+      "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.2.tgz",
+      "integrity": "sha512-hnHhwQzvPCW1QjBWFyBtsETdllOM92BfrKWbUTmh9aeOlcVOiXvlPsK4104xH8NsaKfg86PTFsWkueQeUfMA/w=="
+    },
+    "@emotion/serialize": {
+      "version": "0.11.9",
+      "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.9.tgz",
+      "integrity": "sha512-/Cn4V81z3ZyFiDQRw8nhGFaHkxHtmCSSBUit4vgTuLA1BqxfJUYiqSq97tq/vV8z9LfIoqs6a9v6QrUFWZpK7A==",
+      "requires": {
+        "@emotion/hash": "0.7.2",
+        "@emotion/memoize": "0.7.2",
+        "@emotion/unitless": "0.7.4",
+        "@emotion/utils": "0.11.2",
+        "csstype": "^2.5.7"
+      }
+    },
+    "@emotion/sheet": {
+      "version": "0.9.3",
+      "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.3.tgz",
+      "integrity": "sha512-c3Q6V7Df7jfwSq5AzQWbXHa5soeE4F5cbqi40xn0CzXxWW9/6Mxq48WJEtqfWzbZtW9odZdnRAkwCQwN12ob4A=="
+    },
+    "@emotion/stylis": {
+      "version": "0.8.4",
+      "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.4.tgz",
+      "integrity": "sha512-TLmkCVm8f8gH0oLv+HWKiu7e8xmBIaokhxcEKPh1m8pXiV/akCiq50FvYgOwY42rjejck8nsdQxZlXZ7pmyBUQ=="
+    },
+    "@emotion/unitless": {
+      "version": "0.7.4",
+      "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.4.tgz",
+      "integrity": "sha512-kBa+cDHOR9jpRJ+kcGMsysrls0leukrm68DmFQoMIWQcXdr2cZvyvypWuGYT7U+9kAExUE7+T7r6G3C3A6L8MQ=="
+    },
+    "@emotion/utils": {
+      "version": "0.11.2",
+      "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.2.tgz",
+      "integrity": "sha512-UHX2XklLl3sIaP6oiMmlVzT0J+2ATTVpf0dHQVyPJHTkOITvXfaSqnRk6mdDhV9pR8T/tHc3cex78IKXssmzrA=="
+    },
+    "@emotion/weak-memoize": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.3.tgz",
+      "integrity": "sha512-zVgvPwGK7c1aVdUVc9Qv7SqepOGRDrqCw7KZPSZziWGxSlbII3gmvGLPzLX4d0n0BMbamBacUrN22zOMyFFEkQ=="
+    },
+    "@hapi/address": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.0.0.tgz",
+      "integrity": "sha512-mV6T0IYqb0xL1UALPFplXYQmR0twnXG0M6jUswpquqT2sD12BOiCiLy3EvMp/Fy7s3DZElC4/aPjEjo2jeZpvw=="
+    },
+    "@hapi/bourne": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz",
+      "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA=="
+    },
+    "@hapi/hoek": {
+      "version": "8.2.1",
+      "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.2.1.tgz",
+      "integrity": "sha512-JPiBy+oSmsq3St7XlipfN5pNA6bDJ1kpa73PrK/zR29CVClDVqy04AanM/M/qx5bSF+I61DdCfAvRrujau+zRg=="
+    },
+    "@hapi/joi": {
+      "version": "15.1.1",
+      "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz",
+      "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==",
+      "requires": {
+        "@hapi/address": "2.x.x",
+        "@hapi/bourne": "1.x.x",
+        "@hapi/hoek": "8.x.x",
+        "@hapi/topo": "3.x.x"
+      }
+    },
+    "@hapi/topo": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.3.tgz",
+      "integrity": "sha512-JmS9/vQK6dcUYn7wc2YZTqzIKubAQcJKu2KCKAru6es482U5RT5fP1EXCPtlXpiK7PR0On/kpQKI4fRKkzpZBQ==",
+      "requires": {
+        "@hapi/hoek": "8.x.x"
+      }
+    },
+    "@jest/console": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz",
+      "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==",
+      "requires": {
+        "@jest/source-map": "^24.9.0",
+        "chalk": "^2.0.1",
+        "slash": "^2.0.0"
+      }
+    },
+    "@jest/core": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz",
+      "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==",
+      "requires": {
+        "@jest/console": "^24.7.1",
+        "@jest/reporters": "^24.9.0",
+        "@jest/test-result": "^24.9.0",
+        "@jest/transform": "^24.9.0",
+        "@jest/types": "^24.9.0",
+        "ansi-escapes": "^3.0.0",
+        "chalk": "^2.0.1",
+        "exit": "^0.1.2",
+        "graceful-fs": "^4.1.15",
+        "jest-changed-files": "^24.9.0",
+        "jest-config": "^24.9.0",
+        "jest-haste-map": "^24.9.0",
+        "jest-message-util": "^24.9.0",
+        "jest-regex-util": "^24.3.0",
+        "jest-resolve": "^24.9.0",
+        "jest-resolve-dependencies": "^24.9.0",
+        "jest-runner": "^24.9.0",
+        "jest-runtime": "^24.9.0",
+        "jest-snapshot": "^24.9.0",
+        "jest-util": "^24.9.0",
+        "jest-validate": "^24.9.0",
+        "jest-watcher": "^24.9.0",
+        "micromatch": "^3.1.10",
+        "p-each-series": "^1.0.0",
+        "realpath-native": "^1.1.0",
+        "rimraf": "^2.5.4",
+        "slash": "^2.0.0",
+        "strip-ansi": "^5.0.0"
+      },
+      "dependencies": {
+        "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=="
+        },
+        "jest-resolve": {
+          "version": "24.9.0",
+          "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz",
+          "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==",
+          "requires": {
+            "@jest/types": "^24.9.0",
+            "browser-resolve": "^1.11.3",
+            "chalk": "^2.0.1",
+            "jest-pnp-resolver": "^1.2.1",
+            "realpath-native": "^1.1.0"
+          }
+        }
+      }
+    },
+    "@jest/environment": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz",
+      "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==",
+      "requires": {
+        "@jest/fake-timers": "^24.9.0",
+        "@jest/transform": "^24.9.0",
+        "@jest/types": "^24.9.0",
+        "jest-mock": "^24.9.0"
+      }
+    },
+    "@jest/fake-timers": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz",
+      "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==",
+      "requires": {
+        "@jest/types": "^24.9.0",
+        "jest-message-util": "^24.9.0",
+        "jest-mock": "^24.9.0"
+      }
+    },
+    "@jest/reporters": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz",
+      "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==",
+      "requires": {
+        "@jest/environment": "^24.9.0",
+        "@jest/test-result": "^24.9.0",
+        "@jest/transform": "^24.9.0",
+        "@jest/types": "^24.9.0",
+        "chalk": "^2.0.1",
+        "exit": "^0.1.2",
+        "glob": "^7.1.2",
+        "istanbul-lib-coverage": "^2.0.2",
+        "istanbul-lib-instrument": "^3.0.1",
+        "istanbul-lib-report": "^2.0.4",
+        "istanbul-lib-source-maps": "^3.0.1",
+        "istanbul-reports": "^2.2.6",
+        "jest-haste-map": "^24.9.0",
+        "jest-resolve": "^24.9.0",
+        "jest-runtime": "^24.9.0",
+        "jest-util": "^24.9.0",
+        "jest-worker": "^24.6.0",
+        "node-notifier": "^5.4.2",
+        "slash": "^2.0.0",
+        "source-map": "^0.6.0",
+        "string-length": "^2.0.0"
+      },
+      "dependencies": {
+        "jest-resolve": {
+          "version": "24.9.0",
+          "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz",
+          "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==",
+          "requires": {
+            "@jest/types": "^24.9.0",
+            "browser-resolve": "^1.11.3",
+            "chalk": "^2.0.1",
+            "jest-pnp-resolver": "^1.2.1",
+            "realpath-native": "^1.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        }
+      }
+    },
+    "@jest/source-map": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz",
+      "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==",
+      "requires": {
+        "callsites": "^3.0.0",
+        "graceful-fs": "^4.1.15",
+        "source-map": "^0.6.0"
+      },
+      "dependencies": {
+        "callsites": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+          "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        }
+      }
+    },
+    "@jest/test-result": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz",
+      "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==",
+      "requires": {
+        "@jest/console": "^24.9.0",
+        "@jest/types": "^24.9.0",
+        "@types/istanbul-lib-coverage": "^2.0.0"
+      }
+    },
+    "@jest/test-sequencer": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz",
+      "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==",
+      "requires": {
+        "@jest/test-result": "^24.9.0",
+        "jest-haste-map": "^24.9.0",
+        "jest-runner": "^24.9.0",
+        "jest-runtime": "^24.9.0"
+      }
+    },
+    "@jest/transform": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz",
+      "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==",
+      "requires": {
+        "@babel/core": "^7.1.0",
+        "@jest/types": "^24.9.0",
+        "babel-plugin-istanbul": "^5.1.0",
+        "chalk": "^2.0.1",
+        "convert-source-map": "^1.4.0",
+        "fast-json-stable-stringify": "^2.0.0",
+        "graceful-fs": "^4.1.15",
+        "jest-haste-map": "^24.9.0",
+        "jest-regex-util": "^24.9.0",
+        "jest-util": "^24.9.0",
+        "micromatch": "^3.1.10",
+        "pirates": "^4.0.1",
+        "realpath-native": "^1.1.0",
+        "slash": "^2.0.0",
+        "source-map": "^0.6.1",
+        "write-file-atomic": "2.4.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=="
+        }
+      }
+    },
+    "@jest/types": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz",
+      "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==",
+      "requires": {
+        "@types/istanbul-lib-coverage": "^2.0.0",
+        "@types/istanbul-reports": "^1.1.1",
+        "@types/yargs": "^13.0.0"
+      }
+    },
+    "@json-editor/json-editor": {
+      "version": "1.4.0-beta.0",
+      "resolved": "https://registry.npmjs.org/@json-editor/json-editor/-/json-editor-1.4.0-beta.0.tgz",
+      "integrity": "sha512-8fF7IqaT/KegVVsoe/Ewf1uwvGcRTF2jzlaJ+BzD5MrLu5l4IOxK5H6u+sl3nx0gWnLSZeSoNXCTJpnLLLEGcg=="
+    },
+    "@mrmlnc/readdir-enhanced": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+      "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+      "requires": {
+        "call-me-maybe": "^1.0.1",
+        "glob-to-regexp": "^0.3.0"
+      }
+    },
+    "@nodelib/fs.stat": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
+      "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw=="
+    },
+    "@react-bootstrap/react-popper": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/@react-bootstrap/react-popper/-/react-popper-1.2.1.tgz",
+      "integrity": "sha512-4l3q7LcZEhrSkI4d3Ie3g4CdrXqqTexXX4PFT45CB0z5z2JUbaxgRwKNq7r5j2bLdVpZm+uvUGqxJw8d9vgbJQ==",
+      "requires": {
+        "babel-runtime": "6.x.x",
+        "create-react-context": "^0.2.1",
+        "popper.js": "^1.14.4",
+        "prop-types": "^15.6.1",
+        "typed-styles": "^0.0.5",
+        "warning": "^3.0.0"
+      },
+      "dependencies": {
+        "warning": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
+          "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
+          "requires": {
+            "loose-envify": "^1.0.0"
+          }
+        }
+      }
+    },
+    "@restart/context": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/@restart/context/-/context-2.1.4.tgz",
+      "integrity": "sha512-INJYZQJP7g+IoDUh/475NlGiTeMfwTXUEr3tmRneckHIxNolGOW9CTq83S8cxq0CgJwwcMzMJFchxvlwe7Rk8Q=="
+    },
+    "@restart/hooks": {
+      "version": "0.3.12",
+      "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.3.12.tgz",
+      "integrity": "sha512-nltMFo5JkYcnntf0Cs3Kq7jskrKeGcftAKOqbEEa74sxlx0bfO3RjBly2aiRb7hnsYJCB8/99l+acQcl2lnq1w=="
+    },
+    "@svgr/babel-plugin-add-jsx-attribute": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz",
+      "integrity": "sha512-j7KnilGyZzYr/jhcrSYS3FGWMZVaqyCG0vzMCwzvei0coIkczuYMcniK07nI0aHJINciujjH11T72ICW5eL5Ig=="
+    },
+    "@svgr/babel-plugin-remove-jsx-attribute": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-4.2.0.tgz",
+      "integrity": "sha512-3XHLtJ+HbRCH4n28S7y/yZoEQnRpl0tvTZQsHqvaeNXPra+6vE5tbRliH3ox1yZYPCxrlqaJT/Mg+75GpDKlvQ=="
+    },
+    "@svgr/babel-plugin-remove-jsx-empty-expression": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-4.2.0.tgz",
+      "integrity": "sha512-yTr2iLdf6oEuUE9MsRdvt0NmdpMBAkgK8Bjhl6epb+eQWk6abBaX3d65UZ3E3FWaOwePyUgNyNCMVG61gGCQ7w=="
+    },
+    "@svgr/babel-plugin-replace-jsx-attribute-value": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-4.2.0.tgz",
+      "integrity": "sha512-U9m870Kqm0ko8beHawRXLGLvSi/ZMrl89gJ5BNcT452fAjtF2p4uRzXkdzvGJJJYBgx7BmqlDjBN/eCp5AAX2w=="
+    },
+    "@svgr/babel-plugin-svg-dynamic-title": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.3.1.tgz",
+      "integrity": "sha512-p6z6JJroP989jHWcuraeWpzdejehTmLUpyC9smhTBWyPN0VVGe2phbYxpPTV7Vh8XzmFrcG55idrnfWn/2oQEw=="
+    },
+    "@svgr/babel-plugin-svg-em-dimensions": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-4.2.0.tgz",
+      "integrity": "sha512-C0Uy+BHolCHGOZ8Dnr1zXy/KgpBOkEUYY9kI/HseHVPeMbluaX3CijJr7D4C5uR8zrc1T64nnq/k63ydQuGt4w=="
+    },
+    "@svgr/babel-plugin-transform-react-native-svg": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-4.2.0.tgz",
+      "integrity": "sha512-7YvynOpZDpCOUoIVlaaOUU87J4Z6RdD6spYN4eUb5tfPoKGSF9OG2NuhgYnq4jSkAxcpMaXWPf1cePkzmqTPNw=="
+    },
+    "@svgr/babel-plugin-transform-svg-component": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-4.2.0.tgz",
+      "integrity": "sha512-hYfYuZhQPCBVotABsXKSCfel2slf/yvJY8heTVX1PCTaq/IgASq1IyxPPKJ0chWREEKewIU/JMSsIGBtK1KKxw=="
+    },
+    "@svgr/babel-preset": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-4.3.1.tgz",
+      "integrity": "sha512-rPFKLmyhlh6oeBv3j2vEAj2nd2QbWqpoJLKzBLjwQVt+d9aeXajVaPNEqrES2spjXKR4OxfgSs7U0NtmAEkr0Q==",
+      "requires": {
+        "@svgr/babel-plugin-add-jsx-attribute": "^4.2.0",
+        "@svgr/babel-plugin-remove-jsx-attribute": "^4.2.0",
+        "@svgr/babel-plugin-remove-jsx-empty-expression": "^4.2.0",
+        "@svgr/babel-plugin-replace-jsx-attribute-value": "^4.2.0",
+        "@svgr/babel-plugin-svg-dynamic-title": "^4.3.1",
+        "@svgr/babel-plugin-svg-em-dimensions": "^4.2.0",
+        "@svgr/babel-plugin-transform-react-native-svg": "^4.2.0",
+        "@svgr/babel-plugin-transform-svg-component": "^4.2.0"
+      }
+    },
+    "@svgr/core": {
+      "version": "4.3.2",
+      "resolved": "https://registry.npmjs.org/@svgr/core/-/core-4.3.2.tgz",
+      "integrity": "sha512-N+tP5CLFd1hP9RpO83QJPZY3NL8AtrdqNbuhRgBkjE/49RnMrrRsFm1wY8pueUfAGvzn6tSXUq29o6ah8RuR5w==",
+      "requires": {
+        "@svgr/plugin-jsx": "^4.3.2",
+        "camelcase": "^5.3.1",
+        "cosmiconfig": "^5.2.1"
+      }
+    },
+    "@svgr/hast-util-to-babel-ast": {
+      "version": "4.3.2",
+      "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-4.3.2.tgz",
+      "integrity": "sha512-JioXclZGhFIDL3ddn4Kiq8qEqYM2PyDKV0aYno8+IXTLuYt6TOgHUbUAAFvqtb0Xn37NwP0BTHglejFoYr8RZg==",
+      "requires": {
+        "@babel/types": "^7.4.4"
+      }
+    },
+    "@svgr/plugin-jsx": {
+      "version": "4.3.2",
+      "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-4.3.2.tgz",
+      "integrity": "sha512-+1GW32RvmNmCsOkMoclA/TppNjHPLMnNZG3/Ecscxawp051XJ2MkO09Hn11VcotdC2EPrDfT8pELGRo+kbZ1Eg==",
+      "requires": {
+        "@babel/core": "^7.4.5",
+        "@svgr/babel-preset": "^4.3.1",
+        "@svgr/hast-util-to-babel-ast": "^4.3.2",
+        "svg-parser": "^2.0.0"
+      }
+    },
+    "@svgr/plugin-svgo": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-4.3.1.tgz",
+      "integrity": "sha512-PrMtEDUWjX3Ea65JsVCwTIXuSqa3CG9px+DluF1/eo9mlDrgrtFE7NE/DjdhjJgSM9wenlVBzkzneSIUgfUI/w==",
+      "requires": {
+        "cosmiconfig": "^5.2.1",
+        "merge-deep": "^3.0.2",
+        "svgo": "^1.2.2"
+      }
+    },
+    "@svgr/webpack": {
+      "version": "4.3.2",
+      "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-4.3.2.tgz",
+      "integrity": "sha512-F3VE5OvyOWBEd2bF7BdtFRyI6E9it3mN7teDw0JQTlVtc4HZEYiiLSl+Uf9Uub6IYHVGc+qIrxxDyeedkQru2w==",
+      "requires": {
+        "@babel/core": "^7.4.5",
+        "@babel/plugin-transform-react-constant-elements": "^7.0.0",
+        "@babel/preset-env": "^7.4.5",
+        "@babel/preset-react": "^7.0.0",
+        "@svgr/core": "^4.3.2",
+        "@svgr/plugin-jsx": "^4.3.2",
+        "@svgr/plugin-svgo": "^4.3.1",
+        "loader-utils": "^1.2.3"
+      }
+    },
+    "@types/babel__core": {
+      "version": "7.1.2",
+      "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.2.tgz",
+      "integrity": "sha512-cfCCrFmiGY/yq0NuKNxIQvZFy9kY/1immpSpTngOnyIbD4+eJOG5mxphhHDv3CHL9GltO4GcKr54kGBg3RNdbg==",
+      "requires": {
+        "@babel/parser": "^7.1.0",
+        "@babel/types": "^7.0.0",
+        "@types/babel__generator": "*",
+        "@types/babel__template": "*",
+        "@types/babel__traverse": "*"
+      }
+    },
+    "@types/babel__generator": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.0.2.tgz",
+      "integrity": "sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ==",
+      "requires": {
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "@types/babel__template": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.0.2.tgz",
+      "integrity": "sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==",
+      "requires": {
+        "@babel/parser": "^7.1.0",
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "@types/babel__traverse": {
+      "version": "7.0.7",
+      "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.7.tgz",
+      "integrity": "sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw==",
+      "requires": {
+        "@babel/types": "^7.3.0"
+      }
+    },
+    "@types/eslint-visitor-keys": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
+      "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag=="
+    },
+    "@types/istanbul-lib-coverage": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz",
+      "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg=="
+    },
+    "@types/istanbul-lib-report": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz",
+      "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==",
+      "requires": {
+        "@types/istanbul-lib-coverage": "*"
+      }
+    },
+    "@types/istanbul-reports": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz",
+      "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==",
+      "requires": {
+        "@types/istanbul-lib-coverage": "*",
+        "@types/istanbul-lib-report": "*"
+      }
+    },
+    "@types/json-schema": {
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.3.tgz",
+      "integrity": "sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A=="
+    },
+    "@types/node": {
+      "version": "12.7.1",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.1.tgz",
+      "integrity": "sha512-aK9jxMypeSrhiYofWWBf/T7O+KwaiAHzM4sveCdWPn71lzUSMimRnKzhXDKfKwV1kWoBo2P1aGgaIYGLf9/ljw==",
+      "dev": true
+    },
+    "@types/q": {
+      "version": "1.5.2",
+      "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz",
+      "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw=="
+    },
+    "@types/stack-utils": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",
+      "integrity": "sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw=="
+    },
+    "@types/yargs": {
+      "version": "13.0.2",
+      "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.2.tgz",
+      "integrity": "sha512-lwwgizwk/bIIU+3ELORkyuOgDjCh7zuWDFqRtPPhhVgq9N1F7CvLNKg1TX4f2duwtKQ0p044Au9r1PLIXHrIzQ==",
+      "requires": {
+        "@types/yargs-parser": "*"
+      }
+    },
+    "@types/yargs-parser": {
+      "version": "13.0.0",
+      "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.0.0.tgz",
+      "integrity": "sha512-wBlsw+8n21e6eTd4yVv8YD/E3xq0O6nNnJIquutAsFGE7EyMKz7W6RNT6BRu1SmdgmlCZ9tb0X+j+D6HGr8pZw=="
+    },
+    "@typescript-eslint/eslint-plugin": {
+      "version": "1.13.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.13.0.tgz",
+      "integrity": "sha512-WQHCozMnuNADiqMtsNzp96FNox5sOVpU8Xt4meaT4em8lOG1SrOv92/mUbEHQVh90sldKSfcOc/I0FOb/14G1g==",
+      "requires": {
+        "@typescript-eslint/experimental-utils": "1.13.0",
+        "eslint-utils": "^1.3.1",
+        "functional-red-black-tree": "^1.0.1",
+        "regexpp": "^2.0.1",
+        "tsutils": "^3.7.0"
+      }
+    },
+    "@typescript-eslint/experimental-utils": {
+      "version": "1.13.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz",
+      "integrity": "sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg==",
+      "requires": {
+        "@types/json-schema": "^7.0.3",
+        "@typescript-eslint/typescript-estree": "1.13.0",
+        "eslint-scope": "^4.0.0"
+      }
+    },
+    "@typescript-eslint/parser": {
+      "version": "1.13.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-1.13.0.tgz",
+      "integrity": "sha512-ITMBs52PCPgLb2nGPoeT4iU3HdQZHcPaZVw+7CsFagRJHUhyeTgorEwHXhFf3e7Evzi8oujKNpHc8TONth8AdQ==",
+      "requires": {
+        "@types/eslint-visitor-keys": "^1.0.0",
+        "@typescript-eslint/experimental-utils": "1.13.0",
+        "@typescript-eslint/typescript-estree": "1.13.0",
+        "eslint-visitor-keys": "^1.0.0"
+      }
+    },
+    "@typescript-eslint/typescript-estree": {
+      "version": "1.13.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz",
+      "integrity": "sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw==",
+      "requires": {
+        "lodash.unescape": "4.0.1",
+        "semver": "5.5.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.5.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+          "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA=="
+        }
+      }
+    },
+    "@webassemblyjs/ast": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz",
+      "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==",
+      "requires": {
+        "@webassemblyjs/helper-module-context": "1.8.5",
+        "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+        "@webassemblyjs/wast-parser": "1.8.5"
+      }
+    },
+    "@webassemblyjs/floating-point-hex-parser": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz",
+      "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ=="
+    },
+    "@webassemblyjs/helper-api-error": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz",
+      "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA=="
+    },
+    "@webassemblyjs/helper-buffer": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz",
+      "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q=="
+    },
+    "@webassemblyjs/helper-code-frame": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz",
+      "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==",
+      "requires": {
+        "@webassemblyjs/wast-printer": "1.8.5"
+      }
+    },
+    "@webassemblyjs/helper-fsm": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz",
+      "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow=="
+    },
+    "@webassemblyjs/helper-module-context": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz",
+      "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==",
+      "requires": {
+        "@webassemblyjs/ast": "1.8.5",
+        "mamacro": "^0.0.3"
+      }
+    },
+    "@webassemblyjs/helper-wasm-bytecode": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz",
+      "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ=="
+    },
+    "@webassemblyjs/helper-wasm-section": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz",
+      "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==",
+      "requires": {
+        "@webassemblyjs/ast": "1.8.5",
+        "@webassemblyjs/helper-buffer": "1.8.5",
+        "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+        "@webassemblyjs/wasm-gen": "1.8.5"
+      }
+    },
+    "@webassemblyjs/ieee754": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz",
+      "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==",
+      "requires": {
+        "@xtuc/ieee754": "^1.2.0"
+      }
+    },
+    "@webassemblyjs/leb128": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz",
+      "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==",
+      "requires": {
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "@webassemblyjs/utf8": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz",
+      "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw=="
+    },
+    "@webassemblyjs/wasm-edit": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz",
+      "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==",
+      "requires": {
+        "@webassemblyjs/ast": "1.8.5",
+        "@webassemblyjs/helper-buffer": "1.8.5",
+        "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+        "@webassemblyjs/helper-wasm-section": "1.8.5",
+        "@webassemblyjs/wasm-gen": "1.8.5",
+        "@webassemblyjs/wasm-opt": "1.8.5",
+        "@webassemblyjs/wasm-parser": "1.8.5",
+        "@webassemblyjs/wast-printer": "1.8.5"
+      }
+    },
+    "@webassemblyjs/wasm-gen": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz",
+      "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==",
+      "requires": {
+        "@webassemblyjs/ast": "1.8.5",
+        "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+        "@webassemblyjs/ieee754": "1.8.5",
+        "@webassemblyjs/leb128": "1.8.5",
+        "@webassemblyjs/utf8": "1.8.5"
+      }
+    },
+    "@webassemblyjs/wasm-opt": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz",
+      "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==",
+      "requires": {
+        "@webassemblyjs/ast": "1.8.5",
+        "@webassemblyjs/helper-buffer": "1.8.5",
+        "@webassemblyjs/wasm-gen": "1.8.5",
+        "@webassemblyjs/wasm-parser": "1.8.5"
+      }
+    },
+    "@webassemblyjs/wasm-parser": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz",
+      "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==",
+      "requires": {
+        "@webassemblyjs/ast": "1.8.5",
+        "@webassemblyjs/helper-api-error": "1.8.5",
+        "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+        "@webassemblyjs/ieee754": "1.8.5",
+        "@webassemblyjs/leb128": "1.8.5",
+        "@webassemblyjs/utf8": "1.8.5"
+      }
+    },
+    "@webassemblyjs/wast-parser": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz",
+      "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==",
+      "requires": {
+        "@webassemblyjs/ast": "1.8.5",
+        "@webassemblyjs/floating-point-hex-parser": "1.8.5",
+        "@webassemblyjs/helper-api-error": "1.8.5",
+        "@webassemblyjs/helper-code-frame": "1.8.5",
+        "@webassemblyjs/helper-fsm": "1.8.5",
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "@webassemblyjs/wast-printer": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz",
+      "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==",
+      "requires": {
+        "@webassemblyjs/ast": "1.8.5",
+        "@webassemblyjs/wast-parser": "1.8.5",
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "@xtuc/ieee754": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+      "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="
+    },
+    "@xtuc/long": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+      "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="
+    },
+    "abab": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz",
+      "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w=="
+    },
+    "accepts": {
+      "version": "1.3.7",
+      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+      "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+      "requires": {
+        "mime-types": "~2.1.24",
+        "negotiator": "0.6.2"
+      }
+    },
+    "acorn": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.0.0.tgz",
+      "integrity": "sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ=="
+    },
+    "acorn-globals": {
+      "version": "4.3.3",
+      "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.3.tgz",
+      "integrity": "sha512-vkR40VwS2SYO98AIeFvzWWh+xyc2qi9s7OoXSFEGIP/rOJKzjnhykaZJNnHdoq4BL2gGxI5EZOU16z896EYnOQ==",
+      "requires": {
+        "acorn": "^6.0.1",
+        "acorn-walk": "^6.0.1"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz",
+          "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA=="
+        }
+      }
+    },
+    "acorn-jsx": {
+      "version": "5.0.2",
+      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.2.tgz",
+      "integrity": "sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw=="
+    },
+    "acorn-walk": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
+      "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA=="
+    },
+    "address": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/address/-/address-1.1.0.tgz",
+      "integrity": "sha512-4diPfzWbLEIElVG4AnqP+00SULlPzNuyJFNnmMrLgyaxG6tZXJ1sn7mjBu4fHrJE+Yp/jgylOweJn2xsLMFggQ=="
+    },
+    "adjust-sourcemap-loader": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz",
+      "integrity": "sha512-4hFsTsn58+YjrU9qKzML2JSSDqKvN8mUGQ0nNIrfPi8hmIONT4L3uUaT6MKdMsZ9AjsU6D2xDkZxCkbQPxChrA==",
+      "requires": {
+        "assert": "1.4.1",
+        "camelcase": "5.0.0",
+        "loader-utils": "1.2.3",
+        "object-path": "0.11.4",
+        "regex-parser": "2.2.10"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz",
+          "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA=="
+        }
+      }
+    },
+    "airbnb-prop-types": {
+      "version": "2.14.0",
+      "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.14.0.tgz",
+      "integrity": "sha512-Yb09vUkr3KP9r9NqfRuYtDYZG76wt8mhTUi2Vfzsghk+qkg01/gOc9NU8n63ZcMCLzpAdMEXyKjCHlxV62yN1A==",
+      "dev": true,
+      "requires": {
+        "array.prototype.find": "^2.1.0",
+        "function.prototype.name": "^1.1.1",
+        "has": "^1.0.3",
+        "is-regex": "^1.0.4",
+        "object-is": "^1.0.1",
+        "object.assign": "^4.1.0",
+        "object.entries": "^1.1.0",
+        "prop-types": "^15.7.2",
+        "prop-types-exact": "^1.2.0",
+        "react-is": "^16.8.6"
+      }
+    },
+    "ajv": {
+      "version": "6.10.2",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
+      "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
+      "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": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ=="
+    },
+    "ajv-keywords": {
+      "version": "3.4.1",
+      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz",
+      "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ=="
+    },
+    "alphanum-sort": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
+      "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM="
+    },
+    "ansi-colors": {
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
+      "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA=="
+    },
+    "ansi-escapes": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz",
+      "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==",
+      "requires": {
+        "type-fest": "^0.5.2"
+      }
+    },
+    "ansi-html": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
+      "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4="
+    },
+    "ansi-regex": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+      "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg=="
+    },
+    "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": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+      "requires": {
+        "micromatch": "^3.1.4",
+        "normalize-path": "^2.1.1"
+      }
+    },
+    "aproba": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+      "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
+    },
+    "argparse": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+      "requires": {
+        "sprintf-js": "~1.0.2"
+      }
+    },
+    "aria-query": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz",
+      "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=",
+      "requires": {
+        "ast-types-flow": "0.0.7",
+        "commander": "^2.11.0"
+      }
+    },
+    "arity-n": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz",
+      "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U="
+    },
+    "arr-diff": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+      "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+    },
+    "arr-flatten": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+      "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
+    },
+    "arr-union": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+      "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
+    },
+    "array-equal": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",
+      "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM="
+    },
+    "array-filter": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
+      "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw="
+    },
+    "array-flatten": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
+      "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ=="
+    },
+    "array-includes": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz",
+      "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
+      "requires": {
+        "define-properties": "^1.1.2",
+        "es-abstract": "^1.7.0"
+      }
+    },
+    "array-map": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
+      "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI="
+    },
+    "array-reduce": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
+      "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys="
+    },
+    "array-union": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+      "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+      "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="
+    },
+    "array-unique": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+      "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+    },
+    "array.prototype.find": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.0.tgz",
+      "integrity": "sha512-Wn41+K1yuO5p7wRZDl7890c3xvv5UBrfVXTVIe28rSQb6LS0fZMDrQB6PAcxQFRFy6vJTLDc3A2+3CjQdzVKRg==",
+      "dev": true,
+      "requires": {
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.13.0"
+      }
+    },
+    "array.prototype.flat": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz",
+      "integrity": "sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw==",
+      "dev": true,
+      "requires": {
+        "define-properties": "^1.1.2",
+        "es-abstract": "^1.10.0",
+        "function-bind": "^1.1.1"
+      }
+    },
+    "arrify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+      "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0="
+    },
+    "asap": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+      "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
+    },
+    "asn1": {
+      "version": "0.2.4",
+      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
+      "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+      "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": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+      "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=",
+      "requires": {
+        "util": "0.10.3"
+      }
+    },
+    "assert-plus": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+      "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+    },
+    "assign-symbols": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+      "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
+    },
+    "ast-types-flow": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
+      "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0="
+    },
+    "astral-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+      "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg=="
+    },
+    "async": {
+      "version": "1.5.2",
+      "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+      "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
+    },
+    "async-each": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
+      "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ=="
+    },
+    "async-limiter": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+      "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
+    },
+    "asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+    },
+    "atob": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+      "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
+    },
+    "autoprefixer": {
+      "version": "9.6.1",
+      "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.1.tgz",
+      "integrity": "sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw==",
+      "requires": {
+        "browserslist": "^4.6.3",
+        "caniuse-lite": "^1.0.30000980",
+        "chalk": "^2.4.2",
+        "normalize-range": "^0.1.2",
+        "num2fraction": "^1.2.2",
+        "postcss": "^7.0.17",
+        "postcss-value-parser": "^4.0.0"
+      },
+      "dependencies": {
+        "postcss-value-parser": {
+          "version": "4.0.2",
+          "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz",
+          "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ=="
+        }
+      }
+    },
+    "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="
+    },
+    "aws4": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
+      "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
+    },
+    "axobject-query": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz",
+      "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==",
+      "requires": {
+        "ast-types-flow": "0.0.7"
+      }
+    },
+    "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=",
+      "requires": {
+        "chalk": "^1.1.3",
+        "esutils": "^2.0.2",
+        "js-tokens": "^3.0.2"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+        },
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "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"
+          }
+        },
+        "js-tokens": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+          "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "requires": {
+            "ansi-regex": "^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="
+        }
+      }
+    },
+    "babel-eslint": {
+      "version": "10.0.2",
+      "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.2.tgz",
+      "integrity": "sha512-UdsurWPtgiPgpJ06ryUnuaSXC2s0WoSZnQmEpbAH65XZSdwowgN5MvyP7e88nW07FYXv72erVtpBkxyDVKhH1Q==",
+      "requires": {
+        "@babel/code-frame": "^7.0.0",
+        "@babel/parser": "^7.0.0",
+        "@babel/traverse": "^7.0.0",
+        "@babel/types": "^7.0.0",
+        "eslint-scope": "3.7.1",
+        "eslint-visitor-keys": "^1.0.0"
+      },
+      "dependencies": {
+        "eslint-scope": {
+          "version": "3.7.1",
+          "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
+          "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
+          "requires": {
+            "esrecurse": "^4.1.0",
+            "estraverse": "^4.1.1"
+          }
+        }
+      }
+    },
+    "babel-extract-comments": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz",
+      "integrity": "sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==",
+      "requires": {
+        "babylon": "^6.18.0"
+      }
+    },
+    "babel-jest": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz",
+      "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==",
+      "requires": {
+        "@jest/transform": "^24.9.0",
+        "@jest/types": "^24.9.0",
+        "@types/babel__core": "^7.1.0",
+        "babel-plugin-istanbul": "^5.1.0",
+        "babel-preset-jest": "^24.9.0",
+        "chalk": "^2.4.2",
+        "slash": "^2.0.0"
+      }
+    },
+    "babel-loader": {
+      "version": "8.0.6",
+      "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz",
+      "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==",
+      "requires": {
+        "find-cache-dir": "^2.0.0",
+        "loader-utils": "^1.0.2",
+        "mkdirp": "^0.5.1",
+        "pify": "^4.0.1"
+      },
+      "dependencies": {
+        "pify": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+          "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
+        }
+      }
+    },
+    "babel-plugin-dynamic-import-node": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz",
+      "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==",
+      "requires": {
+        "object.assign": "^4.1.0"
+      }
+    },
+    "babel-plugin-emotion": {
+      "version": "10.0.15",
+      "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.15.tgz",
+      "integrity": "sha512-E3W68Zk8EcKpRUDW2tsFKi4gsavapMRjfr2/KKgG3l7l2zZpiKk0BxB59Ul9C0w0ekv6my/ylGOk2WroaqKXPw==",
+      "requires": {
+        "@babel/helper-module-imports": "^7.0.0",
+        "@emotion/hash": "0.7.2",
+        "@emotion/memoize": "0.7.2",
+        "@emotion/serialize": "^0.11.9",
+        "babel-plugin-macros": "^2.0.0",
+        "babel-plugin-syntax-jsx": "^6.18.0",
+        "convert-source-map": "^1.5.0",
+        "escape-string-regexp": "^1.0.5",
+        "find-root": "^1.1.0",
+        "source-map": "^0.5.7"
+      }
+    },
+    "babel-plugin-istanbul": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz",
+      "integrity": "sha512-5LphC0USA8t4i1zCtjbbNb6jJj/9+X6P37Qfirc/70EQ34xKlMW+a1RHGwxGI+SwWpNwZ27HqvzAobeqaXwiZw==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "find-up": "^3.0.0",
+        "istanbul-lib-instrument": "^3.3.0",
+        "test-exclude": "^5.2.3"
+      }
+    },
+    "babel-plugin-jest-hoist": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz",
+      "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==",
+      "requires": {
+        "@types/babel__traverse": "^7.0.6"
+      }
+    },
+    "babel-plugin-macros": {
+      "version": "2.6.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.6.1.tgz",
+      "integrity": "sha512-6W2nwiXme6j1n2erPOnmRiWfObUhWH7Qw1LMi9XZy8cj+KtESu3T6asZvtk5bMQQjX8te35o7CFueiSdL/2NmQ==",
+      "requires": {
+        "@babel/runtime": "^7.4.2",
+        "cosmiconfig": "^5.2.0",
+        "resolve": "^1.10.0"
+      }
+    },
+    "babel-plugin-named-asset-import": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.3.tgz",
+      "integrity": "sha512-1XDRysF4894BUdMChT+2HHbtJYiO7zx5Be7U6bT8dISy7OdyETMGIAQBMPQCsY1YRf0xcubwnKKaDr5bk15JTA=="
+    },
+    "babel-plugin-styled-components": {
+      "version": "1.10.6",
+      "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-1.10.6.tgz",
+      "integrity": "sha512-gyQj/Zf1kQti66100PhrCRjI5ldjaze9O0M3emXRPAN80Zsf8+e1thpTpaXJXVHXtaM4/+dJEgZHyS9Its+8SA==",
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.0.0",
+        "@babel/helper-module-imports": "^7.0.0",
+        "babel-plugin-syntax-jsx": "^6.18.0",
+        "lodash": "^4.17.11"
+      }
+    },
+    "babel-plugin-syntax-jsx": {
+      "version": "6.18.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
+      "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY="
+    },
+    "babel-plugin-syntax-object-rest-spread": {
+      "version": "6.13.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
+      "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U="
+    },
+    "babel-plugin-transform-object-rest-spread": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz",
+      "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=",
+      "requires": {
+        "babel-plugin-syntax-object-rest-spread": "^6.8.0",
+        "babel-runtime": "^6.26.0"
+      }
+    },
+    "babel-plugin-transform-react-remove-prop-types": {
+      "version": "0.4.24",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz",
+      "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA=="
+    },
+    "babel-preset-jest": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz",
+      "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==",
+      "requires": {
+        "@babel/plugin-syntax-object-rest-spread": "^7.0.0",
+        "babel-plugin-jest-hoist": "^24.9.0"
+      }
+    },
+    "babel-preset-react-app": {
+      "version": "9.0.1",
+      "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-9.0.1.tgz",
+      "integrity": "sha512-v7MeY+QxdBhM9oU5uOQCIHLsErYkEbbjctXsb10II+KAnttbe0rvprvP785dRxfa9dI4ZbsGXsRU07Qdi5BtOw==",
+      "requires": {
+        "@babel/core": "7.5.5",
+        "@babel/plugin-proposal-class-properties": "7.5.5",
+        "@babel/plugin-proposal-decorators": "7.4.4",
+        "@babel/plugin-proposal-object-rest-spread": "7.5.5",
+        "@babel/plugin-syntax-dynamic-import": "7.2.0",
+        "@babel/plugin-transform-destructuring": "7.5.0",
+        "@babel/plugin-transform-flow-strip-types": "7.4.4",
+        "@babel/plugin-transform-react-display-name": "7.2.0",
+        "@babel/plugin-transform-runtime": "7.5.5",
+        "@babel/preset-env": "7.5.5",
+        "@babel/preset-react": "7.0.0",
+        "@babel/preset-typescript": "7.3.3",
+        "@babel/runtime": "7.5.5",
+        "babel-plugin-dynamic-import-node": "2.3.0",
+        "babel-plugin-macros": "2.6.1",
+        "babel-plugin-transform-react-remove-prop-types": "0.4.24"
+      }
+    },
+    "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=",
+      "requires": {
+        "core-js": "^2.4.0",
+        "regenerator-runtime": "^0.11.0"
+      },
+      "dependencies": {
+        "regenerator-runtime": {
+          "version": "0.11.1",
+          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+          "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
+        }
+      }
+    },
+    "babylon": {
+      "version": "6.18.0",
+      "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+      "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ=="
+    },
+    "balanced-match": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+    },
+    "base": {
+      "version": "0.11.2",
+      "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+      "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+      "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=",
+          "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": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "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": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "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": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+        }
+      }
+    },
+    "base64-js": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
+      "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
+    },
+    "batch": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+      "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY="
+    },
+    "bcrypt-pbkdf": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+      "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+      "requires": {
+        "tweetnacl": "^0.14.3"
+      }
+    },
+    "big.js": {
+      "version": "5.2.2",
+      "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+      "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
+    },
+    "binary-extensions": {
+      "version": "1.13.1",
+      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+      "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw=="
+    },
+    "bluebird": {
+      "version": "3.5.5",
+      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz",
+      "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w=="
+    },
+    "bn.js": {
+      "version": "4.11.8",
+      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+      "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
+    },
+    "body-parser": {
+      "version": "1.19.0",
+      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+      "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+      "requires": {
+        "bytes": "3.1.0",
+        "content-type": "~1.0.4",
+        "debug": "2.6.9",
+        "depd": "~1.1.2",
+        "http-errors": "1.7.2",
+        "iconv-lite": "0.4.24",
+        "on-finished": "~2.3.0",
+        "qs": "6.7.0",
+        "raw-body": "2.4.0",
+        "type-is": "~1.6.17"
+      },
+      "dependencies": {
+        "bytes": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+          "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
+        },
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+        },
+        "qs": {
+          "version": "6.7.0",
+          "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+          "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
+        }
+      }
+    },
+    "bonjour": {
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
+      "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
+      "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="
+    },
+    "bootstrap-css-only": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/bootstrap-css-only/-/bootstrap-css-only-4.3.1.tgz",
+      "integrity": "sha512-xPQNmTR6skX7boM3Q/K2vWDL8RFhfHm5PbTcn/vd7nZtkzg9tc6ScNreIIsMaP9QLUxeqvUx+OGnDaiK4KBRiQ=="
+    },
+    "brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "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": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+      "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=",
+          "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="
+    },
+    "browser-process-hrtime": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz",
+      "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw=="
+    },
+    "browser-resolve": {
+      "version": "1.11.3",
+      "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz",
+      "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==",
+      "requires": {
+        "resolve": "1.1.7"
+      },
+      "dependencies": {
+        "resolve": {
+          "version": "1.1.7",
+          "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+          "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs="
+        }
+      }
+    },
+    "browserify-aes": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+      "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+      "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": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+      "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": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+      "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": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
+      "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+      "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=",
+      "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": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+      "requires": {
+        "pako": "~1.0.5"
+      }
+    },
+    "browserslist": {
+      "version": "4.6.6",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz",
+      "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==",
+      "requires": {
+        "caniuse-lite": "^1.0.30000984",
+        "electron-to-chromium": "^1.3.191",
+        "node-releases": "^1.1.25"
+      }
+    },
+    "bser": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.0.tgz",
+      "integrity": "sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg==",
+      "requires": {
+        "node-int64": "^0.4.0"
+      }
+    },
+    "buffer": {
+      "version": "4.9.1",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz",
+      "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=",
+      "requires": {
+        "base64-js": "^1.0.2",
+        "ieee754": "^1.1.4",
+        "isarray": "^1.0.0"
+      },
+      "dependencies": {
+        "isarray": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+        }
+      }
+    },
+    "buffer-from": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
+      "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
+    },
+    "buffer-indexof": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz",
+      "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g=="
+    },
+    "buffer-xor": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
+      "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
+    },
+    "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="
+    },
+    "bytes": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+      "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
+    },
+    "cacache": {
+      "version": "12.0.3",
+      "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz",
+      "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==",
+      "requires": {
+        "bluebird": "^3.5.5",
+        "chownr": "^1.1.1",
+        "figgy-pudding": "^3.5.1",
+        "glob": "^7.1.4",
+        "graceful-fs": "^4.1.15",
+        "infer-owner": "^1.0.3",
+        "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.3",
+        "ssri": "^6.0.1",
+        "unique-filename": "^1.1.1",
+        "y18n": "^4.0.0"
+      }
+    },
+    "cache-base": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+      "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+      "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"
+      }
+    },
+    "call-me-maybe": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz",
+      "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms="
+    },
+    "caller-callsite": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
+      "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
+      "requires": {
+        "callsites": "^2.0.0"
+      }
+    },
+    "caller-path": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
+      "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
+      "requires": {
+        "caller-callsite": "^2.0.0"
+      }
+    },
+    "callsites": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
+      "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA="
+    },
+    "camel-case": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",
+      "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
+      "requires": {
+        "no-case": "^2.2.0",
+        "upper-case": "^1.1.1"
+      }
+    },
+    "camelcase": {
+      "version": "5.3.1",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
+    },
+    "camelize": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz",
+      "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs="
+    },
+    "caniuse-api": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
+      "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
+      "requires": {
+        "browserslist": "^4.0.0",
+        "caniuse-lite": "^1.0.0",
+        "lodash.memoize": "^4.1.2",
+        "lodash.uniq": "^4.5.0"
+      }
+    },
+    "caniuse-lite": {
+      "version": "1.0.30000989",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz",
+      "integrity": "sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw=="
+    },
+    "capture-exit": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz",
+      "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==",
+      "requires": {
+        "rsvp": "^4.8.4"
+      }
+    },
+    "case-sensitive-paths-webpack-plugin": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.2.0.tgz",
+      "integrity": "sha512-u5ElzokS8A1pm9vM3/iDgTcI3xqHxuCao94Oz8etI3cf0Tio0p8izkDYbTIn09uP3yUUr6+veaE6IkjnTYS46g=="
+    },
+    "caseless": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+      "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+    },
+    "chalk": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+      "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": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="
+    },
+    "cheerio": {
+      "version": "1.0.0-rc.3",
+      "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz",
+      "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==",
+      "dev": true,
+      "requires": {
+        "css-select": "~1.2.0",
+        "dom-serializer": "~0.1.1",
+        "entities": "~1.1.1",
+        "htmlparser2": "^3.9.1",
+        "lodash": "^4.15.0",
+        "parse5": "^3.0.1"
+      },
+      "dependencies": {
+        "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"
+          }
+        },
+        "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"
+          }
+        },
+        "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"
+          }
+        },
+        "entities": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+          "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==",
+          "dev": true
+        },
+        "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.1.8",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+      "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+      "requires": {
+        "anymatch": "^2.0.0",
+        "async-each": "^1.0.1",
+        "braces": "^2.3.2",
+        "fsevents": "^1.2.7",
+        "glob-parent": "^3.1.0",
+        "inherits": "^2.0.3",
+        "is-binary-path": "^1.0.0",
+        "is-glob": "^4.0.0",
+        "normalize-path": "^3.0.0",
+        "path-is-absolute": "^1.0.0",
+        "readdirp": "^2.2.1",
+        "upath": "^1.1.1"
+      },
+      "dependencies": {
+        "fsevents": {
+          "version": "1.2.9",
+          "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
+          "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
+          "optional": true,
+          "requires": {
+            "nan": "^2.12.1",
+            "node-pre-gyp": "^0.12.0"
+          },
+          "dependencies": {
+            "abbrev": {
+              "version": "1.1.1",
+              "bundled": true,
+              "optional": true
+            },
+            "ansi-regex": {
+              "version": "2.1.1",
+              "bundled": true,
+              "optional": true
+            },
+            "aproba": {
+              "version": "1.2.0",
+              "bundled": true,
+              "optional": true
+            },
+            "are-we-there-yet": {
+              "version": "1.1.5",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "delegates": "^1.0.0",
+                "readable-stream": "^2.0.6"
+              }
+            },
+            "balanced-match": {
+              "version": "1.0.0",
+              "bundled": true,
+              "optional": true
+            },
+            "brace-expansion": {
+              "version": "1.1.11",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "balanced-match": "^1.0.0",
+                "concat-map": "0.0.1"
+              }
+            },
+            "chownr": {
+              "version": "1.1.1",
+              "bundled": true,
+              "optional": true
+            },
+            "code-point-at": {
+              "version": "1.1.0",
+              "bundled": true,
+              "optional": true
+            },
+            "concat-map": {
+              "version": "0.0.1",
+              "bundled": true,
+              "optional": true
+            },
+            "console-control-strings": {
+              "version": "1.1.0",
+              "bundled": true,
+              "optional": true
+            },
+            "core-util-is": {
+              "version": "1.0.2",
+              "bundled": true,
+              "optional": true
+            },
+            "debug": {
+              "version": "4.1.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "ms": "^2.1.1"
+              }
+            },
+            "deep-extend": {
+              "version": "0.6.0",
+              "bundled": true,
+              "optional": true
+            },
+            "delegates": {
+              "version": "1.0.0",
+              "bundled": true,
+              "optional": true
+            },
+            "detect-libc": {
+              "version": "1.0.3",
+              "bundled": true,
+              "optional": true
+            },
+            "fs-minipass": {
+              "version": "1.2.5",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "minipass": "^2.2.1"
+              }
+            },
+            "fs.realpath": {
+              "version": "1.0.0",
+              "bundled": true,
+              "optional": true
+            },
+            "gauge": {
+              "version": "2.7.4",
+              "bundled": 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,
+              "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,
+              "optional": true
+            },
+            "iconv-lite": {
+              "version": "0.4.24",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "safer-buffer": ">= 2.1.2 < 3"
+              }
+            },
+            "ignore-walk": {
+              "version": "3.0.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "minimatch": "^3.0.4"
+              }
+            },
+            "inflight": {
+              "version": "1.0.6",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "once": "^1.3.0",
+                "wrappy": "1"
+              }
+            },
+            "inherits": {
+              "version": "2.0.3",
+              "bundled": true,
+              "optional": true
+            },
+            "ini": {
+              "version": "1.3.5",
+              "bundled": true,
+              "optional": true
+            },
+            "is-fullwidth-code-point": {
+              "version": "1.0.0",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "number-is-nan": "^1.0.0"
+              }
+            },
+            "isarray": {
+              "version": "1.0.0",
+              "bundled": true,
+              "optional": true
+            },
+            "minimatch": {
+              "version": "3.0.4",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "brace-expansion": "^1.1.7"
+              }
+            },
+            "minimist": {
+              "version": "0.0.8",
+              "bundled": true,
+              "optional": true
+            },
+            "minipass": {
+              "version": "2.3.5",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "safe-buffer": "^5.1.2",
+                "yallist": "^3.0.0"
+              }
+            },
+            "minizlib": {
+              "version": "1.2.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "minipass": "^2.2.1"
+              }
+            },
+            "mkdirp": {
+              "version": "0.5.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "minimist": "0.0.8"
+              }
+            },
+            "ms": {
+              "version": "2.1.1",
+              "bundled": true,
+              "optional": true
+            },
+            "needle": {
+              "version": "2.3.0",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "debug": "^4.1.0",
+                "iconv-lite": "^0.4.4",
+                "sax": "^1.2.4"
+              }
+            },
+            "node-pre-gyp": {
+              "version": "0.12.0",
+              "bundled": 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,
+              "optional": true,
+              "requires": {
+                "abbrev": "1",
+                "osenv": "^0.1.4"
+              }
+            },
+            "npm-bundled": {
+              "version": "1.0.6",
+              "bundled": true,
+              "optional": true
+            },
+            "npm-packlist": {
+              "version": "1.4.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "ignore-walk": "^3.0.1",
+                "npm-bundled": "^1.0.1"
+              }
+            },
+            "npmlog": {
+              "version": "4.1.2",
+              "bundled": 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,
+              "optional": true
+            },
+            "object-assign": {
+              "version": "4.1.1",
+              "bundled": true,
+              "optional": true
+            },
+            "once": {
+              "version": "1.4.0",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "wrappy": "1"
+              }
+            },
+            "os-homedir": {
+              "version": "1.0.2",
+              "bundled": true,
+              "optional": true
+            },
+            "os-tmpdir": {
+              "version": "1.0.2",
+              "bundled": true,
+              "optional": true
+            },
+            "osenv": {
+              "version": "0.1.5",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "os-homedir": "^1.0.0",
+                "os-tmpdir": "^1.0.0"
+              }
+            },
+            "path-is-absolute": {
+              "version": "1.0.1",
+              "bundled": true,
+              "optional": true
+            },
+            "process-nextick-args": {
+              "version": "2.0.0",
+              "bundled": true,
+              "optional": true
+            },
+            "rc": {
+              "version": "1.2.8",
+              "bundled": 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,
+                  "optional": true
+                }
+              }
+            },
+            "readable-stream": {
+              "version": "2.3.6",
+              "bundled": 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,
+              "optional": true,
+              "requires": {
+                "glob": "^7.1.3"
+              }
+            },
+            "safe-buffer": {
+              "version": "5.1.2",
+              "bundled": true,
+              "optional": true
+            },
+            "safer-buffer": {
+              "version": "2.1.2",
+              "bundled": true,
+              "optional": true
+            },
+            "sax": {
+              "version": "1.2.4",
+              "bundled": true,
+              "optional": true
+            },
+            "semver": {
+              "version": "5.7.0",
+              "bundled": true,
+              "optional": true
+            },
+            "set-blocking": {
+              "version": "2.0.0",
+              "bundled": true,
+              "optional": true
+            },
+            "signal-exit": {
+              "version": "3.0.2",
+              "bundled": true,
+              "optional": true
+            },
+            "string-width": {
+              "version": "1.0.2",
+              "bundled": true,
+              "optional": 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,
+              "optional": true,
+              "requires": {
+                "safe-buffer": "~5.1.0"
+              }
+            },
+            "strip-ansi": {
+              "version": "3.0.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "ansi-regex": "^2.0.0"
+              }
+            },
+            "strip-json-comments": {
+              "version": "2.0.1",
+              "bundled": true,
+              "optional": true
+            },
+            "tar": {
+              "version": "4.4.8",
+              "bundled": 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,
+              "optional": true
+            },
+            "wide-align": {
+              "version": "1.1.3",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "string-width": "^1.0.2 || 2"
+              }
+            },
+            "wrappy": {
+              "version": "1.0.2",
+              "bundled": true,
+              "optional": true
+            },
+            "yallist": {
+              "version": "3.0.3",
+              "bundled": true,
+              "optional": true
+            }
+          }
+        },
+        "glob-parent": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+          "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=",
+              "requires": {
+                "is-extglob": "^2.1.0"
+              }
+            }
+          }
+        },
+        "normalize-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+          "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+        }
+      }
+    },
+    "chownr": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz",
+      "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A=="
+    },
+    "chrome-trace-event": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz",
+      "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==",
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "ci-info": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+      "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="
+    },
+    "cipher-base": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
+      "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
+      "requires": {
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "class-utils": {
+      "version": "0.3.6",
+      "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+      "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+      "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=",
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        }
+      }
+    },
+    "classnames": {
+      "version": "2.2.6",
+      "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
+      "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
+    },
+    "clean-css": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz",
+      "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==",
+      "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": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        }
+      }
+    },
+    "cli-cursor": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+      "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+      "requires": {
+        "restore-cursor": "^3.1.0"
+      }
+    },
+    "cli-width": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+      "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk="
+    },
+    "cliui": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+      "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+      "requires": {
+        "string-width": "^3.1.0",
+        "strip-ansi": "^5.2.0",
+        "wrap-ansi": "^5.1.0"
+      },
+      "dependencies": {
+        "emoji-regex": {
+          "version": "7.0.3",
+          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+          "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
+        },
+        "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="
+        },
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          }
+        }
+      }
+    },
+    "clone-deep": {
+      "version": "0.2.4",
+      "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz",
+      "integrity": "sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=",
+      "requires": {
+        "for-own": "^0.1.3",
+        "is-plain-object": "^2.0.1",
+        "kind-of": "^3.0.2",
+        "lazy-cache": "^1.0.3",
+        "shallow-clone": "^0.1.2"
+      }
+    },
+    "co": {
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ="
+    },
+    "coa": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz",
+      "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==",
+      "requires": {
+        "@types/q": "^1.5.1",
+        "chalk": "^2.4.1",
+        "q": "^1.1.2"
+      }
+    },
+    "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="
+    },
+    "collection-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+      "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+      "requires": {
+        "map-visit": "^1.0.0",
+        "object-visit": "^1.0.0"
+      }
+    },
+    "color": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz",
+      "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==",
+      "requires": {
+        "color-convert": "^1.9.1",
+        "color-string": "^1.5.2"
+      }
+    },
+    "color-convert": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+      "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+      "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="
+    },
+    "color-string": {
+      "version": "1.5.3",
+      "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz",
+      "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==",
+      "requires": {
+        "color-name": "^1.0.0",
+        "simple-swizzle": "^0.2.2"
+      }
+    },
+    "combined-stream": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+      "requires": {
+        "delayed-stream": "~1.0.0"
+      }
+    },
+    "commander": {
+      "version": "2.20.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
+      "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ=="
+    },
+    "common-tags": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz",
+      "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw=="
+    },
+    "commondir": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+      "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
+    },
+    "component-emitter": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
+      "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg=="
+    },
+    "compose-function": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz",
+      "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=",
+      "requires": {
+        "arity-n": "^1.0.4"
+      }
+    },
+    "compressible": {
+      "version": "2.0.17",
+      "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz",
+      "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==",
+      "requires": {
+        "mime-db": ">= 1.40.0 < 2"
+      }
+    },
+    "compression": {
+      "version": "1.7.4",
+      "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz",
+      "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==",
+      "requires": {
+        "accepts": "~1.3.5",
+        "bytes": "3.0.0",
+        "compressible": "~2.0.16",
+        "debug": "2.6.9",
+        "on-headers": "~1.0.2",
+        "safe-buffer": "5.1.2",
+        "vary": "~1.1.2"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+        }
+      }
+    },
+    "concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+    },
+    "concat-stream": {
+      "version": "1.6.2",
+      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+      "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+      "requires": {
+        "buffer-from": "^1.0.0",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.2.2",
+        "typedarray": "^0.0.6"
+      }
+    },
+    "confusing-browser-globals": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.8.tgz",
+      "integrity": "sha512-lI7asCibVJ6Qd3FGU7mu4sfG4try4LX3+GVS+Gv8UlrEf2AeW57piecapnog2UHZSbcX/P/1UDWVaTsblowlZg=="
+    },
+    "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=="
+    },
+    "console-browserify": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz",
+      "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
+      "requires": {
+        "date-now": "^0.1.4"
+      }
+    },
+    "constants-browserify": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
+      "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
+    },
+    "contains-path": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
+      "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo="
+    },
+    "content-disposition": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
+      "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+      "requires": {
+        "safe-buffer": "5.1.2"
+      }
+    },
+    "content-type": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
+      "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
+    },
+    "convert-source-map": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
+      "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
+      "requires": {
+        "safe-buffer": "~5.1.1"
+      }
+    },
+    "cookie": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
+      "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
+    },
+    "cookie-signature": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+      "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
+    },
+    "copy-concurrently": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
+      "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
+      "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="
+    },
+    "core-js": {
+      "version": "2.6.9",
+      "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
+      "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A=="
+    },
+    "core-js-compat": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.2.1.tgz",
+      "integrity": "sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A==",
+      "requires": {
+        "browserslist": "^4.6.6",
+        "semver": "^6.3.0"
+      }
+    },
+    "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="
+    },
+    "cosmiconfig": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",
+      "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",
+      "requires": {
+        "import-fresh": "^2.0.0",
+        "is-directory": "^0.3.1",
+        "js-yaml": "^3.13.1",
+        "parse-json": "^4.0.0"
+      }
+    },
+    "create-ecdh": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
+      "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==",
+      "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": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+      "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": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+      "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"
+      }
+    },
+    "create-react-context": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.2.3.tgz",
+      "integrity": "sha512-CQBmD0+QGgTaxDL3OX1IDXYqjkp2It4RIbcb99jS6AEg27Ga+a9G3JtK6SIu0HBwPLZlmwt9F7UwWA4Bn92Rag==",
+      "requires": {
+        "fbjs": "^0.8.0",
+        "gud": "^1.0.0"
+      }
+    },
+    "cross-spawn": {
+      "version": "6.0.5",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+      "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+      "requires": {
+        "nice-try": "^1.0.4",
+        "path-key": "^2.0.1",
+        "semver": "^5.5.0",
+        "shebang-command": "^1.2.0",
+        "which": "^1.2.9"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+        }
+      }
+    },
+    "crypto-browserify": {
+      "version": "3.12.0",
+      "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
+      "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
+      "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": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz",
+      "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==",
+      "requires": {
+        "inherits": "^2.0.3",
+        "source-map": "^0.6.1",
+        "source-map-resolve": "^0.5.2",
+        "urix": "^0.1.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=="
+        }
+      }
+    },
+    "css-blank-pseudo": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz",
+      "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==",
+      "requires": {
+        "postcss": "^7.0.5"
+      }
+    },
+    "css-color-keywords": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz",
+      "integrity": "sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU="
+    },
+    "css-color-names": {
+      "version": "0.0.4",
+      "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
+      "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA="
+    },
+    "css-declaration-sorter": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz",
+      "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==",
+      "requires": {
+        "postcss": "^7.0.1",
+        "timsort": "^0.3.0"
+      }
+    },
+    "css-has-pseudo": {
+      "version": "0.10.0",
+      "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz",
+      "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==",
+      "requires": {
+        "postcss": "^7.0.6",
+        "postcss-selector-parser": "^5.0.0-rc.4"
+      },
+      "dependencies": {
+        "cssesc": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+          "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="
+        },
+        "postcss-selector-parser": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
+          "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+          "requires": {
+            "cssesc": "^2.0.0",
+            "indexes-of": "^1.0.1",
+            "uniq": "^1.0.1"
+          }
+        }
+      }
+    },
+    "css-loader": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-2.1.1.tgz",
+      "integrity": "sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w==",
+      "requires": {
+        "camelcase": "^5.2.0",
+        "icss-utils": "^4.1.0",
+        "loader-utils": "^1.2.3",
+        "normalize-path": "^3.0.0",
+        "postcss": "^7.0.14",
+        "postcss-modules-extract-imports": "^2.0.0",
+        "postcss-modules-local-by-default": "^2.0.6",
+        "postcss-modules-scope": "^2.1.0",
+        "postcss-modules-values": "^2.0.0",
+        "postcss-value-parser": "^3.3.0",
+        "schema-utils": "^1.0.0"
+      },
+      "dependencies": {
+        "normalize-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+          "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+        }
+      }
+    },
+    "css-prefers-color-scheme": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz",
+      "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==",
+      "requires": {
+        "postcss": "^7.0.5"
+      }
+    },
+    "css-select": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz",
+      "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==",
+      "requires": {
+        "boolbase": "^1.0.0",
+        "css-what": "^2.1.2",
+        "domutils": "^1.7.0",
+        "nth-check": "^1.0.2"
+      }
+    },
+    "css-select-base-adapter": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz",
+      "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w=="
+    },
+    "css-to-react-native": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-2.3.1.tgz",
+      "integrity": "sha512-yO+oEx1Lf+hDKasqQRVrAvzMCz825Huh1VMlEEDlRWyAhFb/FWb6I0KpEF1PkyKQ7NEdcx9d5M2ZEWgJAsgPvQ==",
+      "requires": {
+        "camelize": "^1.0.0",
+        "css-color-keywords": "^1.0.0",
+        "postcss-value-parser": "^3.3.0"
+      }
+    },
+    "css-tree": {
+      "version": "1.0.0-alpha.33",
+      "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.33.tgz",
+      "integrity": "sha512-SPt57bh5nQnpsTBsx/IXbO14sRc9xXu5MtMAVuo0BaQQmyf0NupNPPSoMaqiAF5tDFafYsTkfeH4Q/HCKXkg4w==",
+      "requires": {
+        "mdn-data": "2.0.4",
+        "source-map": "^0.5.3"
+      }
+    },
+    "css-unit-converter": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz",
+      "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY="
+    },
+    "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=="
+    },
+    "cssdb": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz",
+      "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ=="
+    },
+    "cssesc": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
+    },
+    "cssnano": {
+      "version": "4.1.10",
+      "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz",
+      "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==",
+      "requires": {
+        "cosmiconfig": "^5.0.0",
+        "cssnano-preset-default": "^4.0.7",
+        "is-resolvable": "^1.0.0",
+        "postcss": "^7.0.0"
+      }
+    },
+    "cssnano-preset-default": {
+      "version": "4.0.7",
+      "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz",
+      "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==",
+      "requires": {
+        "css-declaration-sorter": "^4.0.1",
+        "cssnano-util-raw-cache": "^4.0.1",
+        "postcss": "^7.0.0",
+        "postcss-calc": "^7.0.1",
+        "postcss-colormin": "^4.0.3",
+        "postcss-convert-values": "^4.0.1",
+        "postcss-discard-comments": "^4.0.2",
+        "postcss-discard-duplicates": "^4.0.2",
+        "postcss-discard-empty": "^4.0.1",
+        "postcss-discard-overridden": "^4.0.1",
+        "postcss-merge-longhand": "^4.0.11",
+        "postcss-merge-rules": "^4.0.3",
+        "postcss-minify-font-values": "^4.0.2",
+        "postcss-minify-gradients": "^4.0.2",
+        "postcss-minify-params": "^4.0.2",
+        "postcss-minify-selectors": "^4.0.2",
+        "postcss-normalize-charset": "^4.0.1",
+        "postcss-normalize-display-values": "^4.0.2",
+        "postcss-normalize-positions": "^4.0.2",
+        "postcss-normalize-repeat-style": "^4.0.2",
+        "postcss-normalize-string": "^4.0.2",
+        "postcss-normalize-timing-functions": "^4.0.2",
+        "postcss-normalize-unicode": "^4.0.1",
+        "postcss-normalize-url": "^4.0.1",
+        "postcss-normalize-whitespace": "^4.0.2",
+        "postcss-ordered-values": "^4.1.2",
+        "postcss-reduce-initial": "^4.0.3",
+        "postcss-reduce-transforms": "^4.0.2",
+        "postcss-svgo": "^4.0.2",
+        "postcss-unique-selectors": "^4.0.1"
+      }
+    },
+    "cssnano-util-get-arguments": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz",
+      "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8="
+    },
+    "cssnano-util-get-match": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz",
+      "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0="
+    },
+    "cssnano-util-raw-cache": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz",
+      "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==",
+      "requires": {
+        "postcss": "^7.0.0"
+      }
+    },
+    "cssnano-util-same-parent": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz",
+      "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q=="
+    },
+    "csso": {
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz",
+      "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==",
+      "requires": {
+        "css-tree": "1.0.0-alpha.29"
+      },
+      "dependencies": {
+        "css-tree": {
+          "version": "1.0.0-alpha.29",
+          "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz",
+          "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==",
+          "requires": {
+            "mdn-data": "~1.1.0",
+            "source-map": "^0.5.3"
+          }
+        },
+        "mdn-data": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz",
+          "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA=="
+        }
+      }
+    },
+    "cssom": {
+      "version": "0.3.8",
+      "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
+      "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="
+    },
+    "cssstyle": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz",
+      "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==",
+      "requires": {
+        "cssom": "0.3.x"
+      }
+    },
+    "csstype": {
+      "version": "2.6.6",
+      "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.6.tgz",
+      "integrity": "sha512-RpFbQGUE74iyPgvr46U9t1xoQBM8T4BL8SxrN66Le2xYAPSaDJJKeztV3awugusb3g3G9iL8StmkBBXhcbbXhg=="
+    },
+    "cyclist": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz",
+      "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA="
+    },
+    "d": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
+      "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
+      "requires": {
+        "es5-ext": "^0.10.50",
+        "type": "^1.0.1"
+      }
+    },
+    "damerau-levenshtein": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz",
+      "integrity": "sha512-CBCRqFnpu715iPmw1KrdOrzRqbdFwQTwAWyyyYS42+iAgHCuXZ+/TdMgQkUENPomxEz9z1BEzuQU2Xw0kUuAgA=="
+    },
+    "dashdash": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+      "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+      "requires": {
+        "assert-plus": "^1.0.0"
+      }
+    },
+    "data-urls": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz",
+      "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==",
+      "requires": {
+        "abab": "^2.0.0",
+        "whatwg-mimetype": "^2.2.0",
+        "whatwg-url": "^7.0.0"
+      },
+      "dependencies": {
+        "whatwg-url": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz",
+          "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==",
+          "requires": {
+            "lodash.sortby": "^4.7.0",
+            "tr46": "^1.0.1",
+            "webidl-conversions": "^4.0.2"
+          }
+        }
+      }
+    },
+    "date-now": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
+      "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs="
+    },
+    "debug": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+      "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+      "requires": {
+        "ms": "^2.1.1"
+      }
+    },
+    "decamelize": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+    },
+    "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="
+    },
+    "deep-equal": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
+      "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU="
+    },
+    "deep-is": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+      "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
+    },
+    "default-gateway": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz",
+      "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==",
+      "requires": {
+        "execa": "^1.0.0",
+        "ip-regex": "^2.1.0"
+      }
+    },
+    "define-properties": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
+      "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
+      "requires": {
+        "object-keys": "^1.0.12"
+      }
+    },
+    "define-property": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+      "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+      "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": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "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": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "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": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+        }
+      }
+    },
+    "del": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz",
+      "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
+      "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": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+          "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+          "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": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+              "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+            }
+          }
+        }
+      }
+    },
+    "delayed-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+    },
+    "depd": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+      "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
+    },
+    "des.js": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz",
+      "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=",
+      "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="
+    },
+    "detect-newline": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz",
+      "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I="
+    },
+    "detect-node": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz",
+      "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw=="
+    },
+    "detect-port-alt": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz",
+      "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==",
+      "requires": {
+        "address": "^1.0.1",
+        "debug": "^2.6.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+        }
+      }
+    },
+    "diff-sequences": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz",
+      "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew=="
+    },
+    "diffie-hellman": {
+      "version": "5.0.3",
+      "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+      "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+      "requires": {
+        "bn.js": "^4.1.0",
+        "miller-rabin": "^4.0.0",
+        "randombytes": "^2.0.0"
+      }
+    },
+    "dir-glob": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz",
+      "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==",
+      "requires": {
+        "arrify": "^1.0.1",
+        "path-type": "^3.0.0"
+      }
+    },
+    "discontinuous-range": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz",
+      "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=",
+      "dev": true
+    },
+    "dns-equal": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
+      "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0="
+    },
+    "dns-packet": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz",
+      "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==",
+      "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=",
+      "requires": {
+        "buffer-indexof": "^1.0.0"
+      }
+    },
+    "doctrine": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+      "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+      "requires": {
+        "esutils": "^2.0.2"
+      }
+    },
+    "dom-converter": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
+      "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
+      "requires": {
+        "utila": "~0.4"
+      }
+    },
+    "dom-helpers": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz",
+      "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==",
+      "requires": {
+        "@babel/runtime": "^7.1.2"
+      }
+    },
+    "dom-serializer": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.1.tgz",
+      "integrity": "sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q==",
+      "requires": {
+        "domelementtype": "^2.0.1",
+        "entities": "^2.0.0"
+      },
+      "dependencies": {
+        "domelementtype": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz",
+          "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ=="
+        }
+      }
+    },
+    "domain-browser": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
+      "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA=="
+    },
+    "domelementtype": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+      "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="
+    },
+    "domexception": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",
+      "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",
+      "requires": {
+        "webidl-conversions": "^4.0.2"
+      }
+    },
+    "domhandler": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+      "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+      "requires": {
+        "domelementtype": "1"
+      }
+    },
+    "domutils": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz",
+      "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==",
+      "requires": {
+        "dom-serializer": "0",
+        "domelementtype": "1"
+      }
+    },
+    "dot-prop": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
+      "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
+      "requires": {
+        "is-obj": "^1.0.0"
+      }
+    },
+    "dotenv": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz",
+      "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w=="
+    },
+    "dotenv-expand": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz",
+      "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU="
+    },
+    "duplexer": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
+      "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E="
+    },
+    "duplexify": {
+      "version": "3.7.1",
+      "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
+      "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
+      "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=",
+      "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="
+    },
+    "electron-to-chromium": {
+      "version": "1.3.237",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.237.tgz",
+      "integrity": "sha512-SPAFjDr/7iiVK2kgTluwxela6eaWjjFkS9rO/iYpB/KGXgccUom5YC7OIf19c8m8GGptWxLU0Em8xM64A/N7Fg=="
+    },
+    "elliptic": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz",
+      "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==",
+      "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"
+      }
+    },
+    "emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+    },
+    "emojis-list": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
+      "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="
+    },
+    "encodeurl": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
+      "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
+    },
+    "encoding": {
+      "version": "0.1.12",
+      "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
+      "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
+      "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": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+      "requires": {
+        "once": "^1.4.0"
+      }
+    },
+    "enhanced-resolve": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz",
+      "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==",
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "memory-fs": "^0.4.0",
+        "tapable": "^1.0.0"
+      }
+    },
+    "entities": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz",
+      "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw=="
+    },
+    "enzyme": {
+      "version": "3.10.0",
+      "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.10.0.tgz",
+      "integrity": "sha512-p2yy9Y7t/PFbPoTvrWde7JIYB2ZyGC+NgTNbVEGvZ5/EyoYSr9aG/2rSbVvyNvMHEhw9/dmGUJHWtfQIEiX9pg==",
+      "dev": true,
+      "requires": {
+        "array.prototype.flat": "^1.2.1",
+        "cheerio": "^1.0.0-rc.2",
+        "function.prototype.name": "^1.1.0",
+        "has": "^1.0.3",
+        "html-element-map": "^1.0.0",
+        "is-boolean-object": "^1.0.0",
+        "is-callable": "^1.1.4",
+        "is-number-object": "^1.0.3",
+        "is-regex": "^1.0.4",
+        "is-string": "^1.0.4",
+        "is-subset": "^0.1.1",
+        "lodash.escape": "^4.0.1",
+        "lodash.isequal": "^4.5.0",
+        "object-inspect": "^1.6.0",
+        "object-is": "^1.0.1",
+        "object.assign": "^4.1.0",
+        "object.entries": "^1.0.4",
+        "object.values": "^1.0.4",
+        "raf": "^3.4.0",
+        "rst-selector-parser": "^2.2.3",
+        "string.prototype.trim": "^1.1.2"
+      }
+    },
+    "enzyme-adapter-react-16": {
+      "version": "1.14.0",
+      "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.14.0.tgz",
+      "integrity": "sha512-7PcOF7pb4hJUvjY7oAuPGpq3BmlCig3kxXGi2kFx0YzJHppqX1K8IIV9skT1IirxXlu8W7bneKi+oQ10QRnhcA==",
+      "dev": true,
+      "requires": {
+        "enzyme-adapter-utils": "^1.12.0",
+        "has": "^1.0.3",
+        "object.assign": "^4.1.0",
+        "object.values": "^1.1.0",
+        "prop-types": "^15.7.2",
+        "react-is": "^16.8.6",
+        "react-test-renderer": "^16.0.0-0",
+        "semver": "^5.7.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
+          "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
+          "dev": true
+        }
+      }
+    },
+    "enzyme-adapter-utils": {
+      "version": "1.12.0",
+      "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.12.0.tgz",
+      "integrity": "sha512-wkZvE0VxcFx/8ZsBw0iAbk3gR1d9hK447ebnSYBf95+r32ezBq+XDSAvRErkc4LZosgH8J7et7H7/7CtUuQfBA==",
+      "dev": true,
+      "requires": {
+        "airbnb-prop-types": "^2.13.2",
+        "function.prototype.name": "^1.1.0",
+        "object.assign": "^4.1.0",
+        "object.fromentries": "^2.0.0",
+        "prop-types": "^15.7.2",
+        "semver": "^5.6.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
+          "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
+          "dev": true
+        }
+      }
+    },
+    "errno": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
+      "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
+      "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": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+      "requires": {
+        "is-arrayish": "^0.2.1"
+      }
+    },
+    "es-abstract": {
+      "version": "1.13.0",
+      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz",
+      "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==",
+      "requires": {
+        "es-to-primitive": "^1.2.0",
+        "function-bind": "^1.1.1",
+        "has": "^1.0.3",
+        "is-callable": "^1.1.4",
+        "is-regex": "^1.0.4",
+        "object-keys": "^1.0.12"
+      }
+    },
+    "es-to-primitive": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
+      "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
+      "requires": {
+        "is-callable": "^1.1.4",
+        "is-date-object": "^1.0.1",
+        "is-symbol": "^1.0.2"
+      }
+    },
+    "es5-ext": {
+      "version": "0.10.50",
+      "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.50.tgz",
+      "integrity": "sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==",
+      "requires": {
+        "es6-iterator": "~2.0.3",
+        "es6-symbol": "~3.1.1",
+        "next-tick": "^1.0.0"
+      }
+    },
+    "es6-iterator": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
+      "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
+      "requires": {
+        "d": "1",
+        "es5-ext": "^0.10.35",
+        "es6-symbol": "^3.1.1"
+      }
+    },
+    "es6-symbol": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
+      "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
+      "requires": {
+        "d": "1",
+        "es5-ext": "~0.10.14"
+      }
+    },
+    "escape-html": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+      "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+    },
+    "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="
+    },
+    "escodegen": {
+      "version": "1.12.0",
+      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz",
+      "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==",
+      "requires": {
+        "esprima": "^3.1.3",
+        "estraverse": "^4.2.0",
+        "esutils": "^2.0.2",
+        "optionator": "^0.8.1",
+        "source-map": "~0.6.1"
+      },
+      "dependencies": {
+        "esprima": {
+          "version": "3.1.3",
+          "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
+          "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM="
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "optional": true
+        }
+      }
+    },
+    "eslint": {
+      "version": "6.2.1",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.2.1.tgz",
+      "integrity": "sha512-ES7BzEzr0Q6m5TK9i+/iTpKjclXitOdDK4vT07OqbkBT2/VcN/gO9EL1C4HlK3TAOXYv2ItcmbVR9jO1MR0fJg==",
+      "requires": {
+        "@babel/code-frame": "^7.0.0",
+        "ajv": "^6.10.0",
+        "chalk": "^2.1.0",
+        "cross-spawn": "^6.0.5",
+        "debug": "^4.0.1",
+        "doctrine": "^3.0.0",
+        "eslint-scope": "^5.0.0",
+        "eslint-utils": "^1.4.2",
+        "eslint-visitor-keys": "^1.1.0",
+        "espree": "^6.1.0",
+        "esquery": "^1.0.1",
+        "esutils": "^2.0.2",
+        "file-entry-cache": "^5.0.1",
+        "functional-red-black-tree": "^1.0.1",
+        "glob-parent": "^5.0.0",
+        "globals": "^11.7.0",
+        "ignore": "^4.0.6",
+        "import-fresh": "^3.0.0",
+        "imurmurhash": "^0.1.4",
+        "inquirer": "^6.4.1",
+        "is-glob": "^4.0.0",
+        "js-yaml": "^3.13.1",
+        "json-stable-stringify-without-jsonify": "^1.0.1",
+        "levn": "^0.3.0",
+        "lodash": "^4.17.14",
+        "minimatch": "^3.0.4",
+        "mkdirp": "^0.5.1",
+        "natural-compare": "^1.4.0",
+        "optionator": "^0.8.2",
+        "progress": "^2.0.0",
+        "regexpp": "^2.0.1",
+        "semver": "^6.1.2",
+        "strip-ansi": "^5.2.0",
+        "strip-json-comments": "^3.0.1",
+        "table": "^5.2.3",
+        "text-table": "^0.2.0",
+        "v8-compile-cache": "^2.0.3"
+      },
+      "dependencies": {
+        "eslint-scope": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz",
+          "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==",
+          "requires": {
+            "esrecurse": "^4.1.0",
+            "estraverse": "^4.1.1"
+          }
+        },
+        "import-fresh": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz",
+          "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==",
+          "requires": {
+            "parent-module": "^1.0.0",
+            "resolve-from": "^4.0.0"
+          }
+        },
+        "resolve-from": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+          "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
+        }
+      }
+    },
+    "eslint-config-react-app": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-5.0.1.tgz",
+      "integrity": "sha512-GYXP3F/0PSHlYfGHhahqnJze8rYKxzXgrzXVqRRd4rDO40ga4NA3aHM7/HKbwceDN0/C1Ij3BoAWFawJgRbXEw==",
+      "requires": {
+        "confusing-browser-globals": "^1.0.8"
+      }
+    },
+    "eslint-import-resolver-node": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz",
+      "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==",
+      "requires": {
+        "debug": "^2.6.9",
+        "resolve": "^1.5.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+        }
+      }
+    },
+    "eslint-loader": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.2.1.tgz",
+      "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==",
+      "requires": {
+        "loader-fs-cache": "^1.0.0",
+        "loader-utils": "^1.0.2",
+        "object-assign": "^4.0.1",
+        "object-hash": "^1.1.4",
+        "rimraf": "^2.6.1"
+      }
+    },
+    "eslint-module-utils": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz",
+      "integrity": "sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw==",
+      "requires": {
+        "debug": "^2.6.8",
+        "pkg-dir": "^2.0.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "requires": {
+            "ms": "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=",
+          "requires": {
+            "locate-path": "^2.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+          "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+          "requires": {
+            "p-locate": "^2.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+        },
+        "p-limit": {
+          "version": "1.3.0",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+          "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+          "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=",
+          "requires": {
+            "p-limit": "^1.1.0"
+          }
+        },
+        "p-try": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+          "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M="
+        },
+        "pkg-dir": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+          "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+          "requires": {
+            "find-up": "^2.1.0"
+          }
+        }
+      }
+    },
+    "eslint-plugin-flowtype": {
+      "version": "3.13.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.13.0.tgz",
+      "integrity": "sha512-bhewp36P+t7cEV0b6OdmoRWJCBYRiHFlqPZAG1oS3SF+Y0LQkeDvFSM4oxoxvczD1OdONCXMlJfQFiWLcV9urw==",
+      "requires": {
+        "lodash": "^4.17.15"
+      }
+    },
+    "eslint-plugin-import": {
+      "version": "2.18.2",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz",
+      "integrity": "sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ==",
+      "requires": {
+        "array-includes": "^3.0.3",
+        "contains-path": "^0.1.0",
+        "debug": "^2.6.9",
+        "doctrine": "1.5.0",
+        "eslint-import-resolver-node": "^0.3.2",
+        "eslint-module-utils": "^2.4.0",
+        "has": "^1.0.3",
+        "minimatch": "^3.0.4",
+        "object.values": "^1.1.0",
+        "read-pkg-up": "^2.0.0",
+        "resolve": "^1.11.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "doctrine": {
+          "version": "1.5.0",
+          "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
+          "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
+          "requires": {
+            "esutils": "^2.0.2",
+            "isarray": "^1.0.0"
+          }
+        },
+        "find-up": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+          "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+          "requires": {
+            "locate-path": "^2.0.0"
+          }
+        },
+        "isarray": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+        },
+        "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=",
+          "requires": {
+            "graceful-fs": "^4.1.2",
+            "parse-json": "^2.2.0",
+            "pify": "^2.0.0",
+            "strip-bom": "^3.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+          "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+          "requires": {
+            "p-locate": "^2.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+        },
+        "p-limit": {
+          "version": "1.3.0",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+          "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+          "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=",
+          "requires": {
+            "p-limit": "^1.1.0"
+          }
+        },
+        "p-try": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+          "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M="
+        },
+        "parse-json": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+          "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+          "requires": {
+            "error-ex": "^1.2.0"
+          }
+        },
+        "path-type": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+          "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+          "requires": {
+            "pify": "^2.0.0"
+          }
+        },
+        "pify": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw="
+        },
+        "read-pkg": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+          "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+          "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=",
+          "requires": {
+            "find-up": "^2.0.0",
+            "read-pkg": "^2.0.0"
+          }
+        },
+        "resolve": {
+          "version": "1.12.0",
+          "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
+          "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
+          "requires": {
+            "path-parse": "^1.0.6"
+          }
+        }
+      }
+    },
+    "eslint-plugin-jsx-a11y": {
+      "version": "6.2.3",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz",
+      "integrity": "sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==",
+      "requires": {
+        "@babel/runtime": "^7.4.5",
+        "aria-query": "^3.0.0",
+        "array-includes": "^3.0.3",
+        "ast-types-flow": "^0.0.7",
+        "axobject-query": "^2.0.2",
+        "damerau-levenshtein": "^1.0.4",
+        "emoji-regex": "^7.0.2",
+        "has": "^1.0.3",
+        "jsx-ast-utils": "^2.2.1"
+      },
+      "dependencies": {
+        "emoji-regex": {
+          "version": "7.0.3",
+          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+          "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
+        }
+      }
+    },
+    "eslint-plugin-react": {
+      "version": "7.14.3",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.14.3.tgz",
+      "integrity": "sha512-EzdyyBWC4Uz2hPYBiEJrKCUi2Fn+BJ9B/pJQcjw5X+x/H2Nm59S4MJIvL4O5NEE0+WbnQwEBxWY03oUk+Bc3FA==",
+      "requires": {
+        "array-includes": "^3.0.3",
+        "doctrine": "^2.1.0",
+        "has": "^1.0.3",
+        "jsx-ast-utils": "^2.1.0",
+        "object.entries": "^1.1.0",
+        "object.fromentries": "^2.0.0",
+        "object.values": "^1.1.0",
+        "prop-types": "^15.7.2",
+        "resolve": "^1.10.1"
+      },
+      "dependencies": {
+        "doctrine": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+          "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+          "requires": {
+            "esutils": "^2.0.2"
+          }
+        },
+        "resolve": {
+          "version": "1.12.0",
+          "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
+          "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
+          "requires": {
+            "path-parse": "^1.0.6"
+          }
+        }
+      }
+    },
+    "eslint-plugin-react-hooks": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz",
+      "integrity": "sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA=="
+    },
+    "eslint-scope": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
+      "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
+      "requires": {
+        "esrecurse": "^4.1.0",
+        "estraverse": "^4.1.1"
+      }
+    },
+    "eslint-utils": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.2.tgz",
+      "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==",
+      "requires": {
+        "eslint-visitor-keys": "^1.0.0"
+      }
+    },
+    "eslint-visitor-keys": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz",
+      "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A=="
+    },
+    "espree": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.0.tgz",
+      "integrity": "sha512-boA7CHRLlVWUSg3iL5Kmlt/xT3Q+sXnKoRYYzj1YeM10A76TEJBbotV5pKbnK42hEUIr121zTv+QLRM5LsCPXQ==",
+      "requires": {
+        "acorn": "^7.0.0",
+        "acorn-jsx": "^5.0.0",
+        "eslint-visitor-keys": "^1.1.0"
+      }
+    },
+    "esprima": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+    },
+    "esquery": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
+      "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
+      "requires": {
+        "estraverse": "^4.0.0"
+      }
+    },
+    "esrecurse": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+      "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+      "requires": {
+        "estraverse": "^4.1.0"
+      }
+    },
+    "estraverse": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="
+    },
+    "esutils": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
+    },
+    "etag": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
+      "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
+    },
+    "eventemitter3": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz",
+      "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q=="
+    },
+    "events": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz",
+      "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA=="
+    },
+    "eventsource": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz",
+      "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==",
+      "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": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+      "requires": {
+        "md5.js": "^1.3.4",
+        "safe-buffer": "^5.1.1"
+      }
+    },
+    "exec-sh": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz",
+      "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg=="
+    },
+    "execa": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+      "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+      "requires": {
+        "cross-spawn": "^6.0.0",
+        "get-stream": "^4.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"
+      }
+    },
+    "exit": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
+      "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw="
+    },
+    "expand-brackets": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+      "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+      "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": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "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=",
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+        }
+      }
+    },
+    "expect": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz",
+      "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==",
+      "requires": {
+        "@jest/types": "^24.9.0",
+        "ansi-styles": "^3.2.0",
+        "jest-get-type": "^24.9.0",
+        "jest-matcher-utils": "^24.9.0",
+        "jest-message-util": "^24.9.0",
+        "jest-regex-util": "^24.9.0"
+      }
+    },
+    "express": {
+      "version": "4.17.1",
+      "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
+      "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
+      "requires": {
+        "accepts": "~1.3.7",
+        "array-flatten": "1.1.1",
+        "body-parser": "1.19.0",
+        "content-disposition": "0.5.3",
+        "content-type": "~1.0.4",
+        "cookie": "0.4.0",
+        "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.2",
+        "fresh": "0.5.2",
+        "merge-descriptors": "1.0.1",
+        "methods": "~1.1.2",
+        "on-finished": "~2.3.0",
+        "parseurl": "~1.3.3",
+        "path-to-regexp": "0.1.7",
+        "proxy-addr": "~2.0.5",
+        "qs": "6.7.0",
+        "range-parser": "~1.2.1",
+        "safe-buffer": "5.1.2",
+        "send": "0.17.1",
+        "serve-static": "1.14.1",
+        "setprototypeof": "1.1.1",
+        "statuses": "~1.5.0",
+        "type-is": "~1.6.18",
+        "utils-merge": "1.0.1",
+        "vary": "~1.1.2"
+      },
+      "dependencies": {
+        "array-flatten": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+          "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
+        },
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+        },
+        "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="
+        },
+        "qs": {
+          "version": "6.7.0",
+          "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
+          "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
+        }
+      }
+    },
+    "extend": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+    },
+    "extend-shallow": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+      "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+      "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": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+          "requires": {
+            "is-plain-object": "^2.0.4"
+          }
+        }
+      }
+    },
+    "external-editor": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
+      "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
+      "requires": {
+        "chardet": "^0.7.0",
+        "iconv-lite": "^0.4.24",
+        "tmp": "^0.0.33"
+      }
+    },
+    "extglob": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+      "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+      "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=",
+          "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=",
+          "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": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "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": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "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": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+        }
+      }
+    },
+    "extsprintf": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
+    },
+    "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="
+    },
+    "fast-glob": {
+      "version": "2.2.7",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz",
+      "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==",
+      "requires": {
+        "@mrmlnc/readdir-enhanced": "^2.2.1",
+        "@nodelib/fs.stat": "^1.1.2",
+        "glob-parent": "^3.1.0",
+        "is-glob": "^4.0.0",
+        "merge2": "^1.2.3",
+        "micromatch": "^3.1.10"
+      },
+      "dependencies": {
+        "glob-parent": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+          "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=",
+              "requires": {
+                "is-extglob": "^2.1.0"
+              }
+            }
+          }
+        }
+      }
+    },
+    "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="
+    },
+    "fast-levenshtein": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
+    },
+    "faye-websocket": {
+      "version": "0.11.3",
+      "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
+      "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==",
+      "requires": {
+        "websocket-driver": ">=0.5.1"
+      }
+    },
+    "fb-watchman": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz",
+      "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=",
+      "requires": {
+        "bser": "^2.0.0"
+      }
+    },
+    "fbjs": {
+      "version": "0.8.17",
+      "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz",
+      "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=",
+      "requires": {
+        "core-js": "^1.0.0",
+        "isomorphic-fetch": "^2.1.1",
+        "loose-envify": "^1.0.0",
+        "object-assign": "^4.1.0",
+        "promise": "^7.1.1",
+        "setimmediate": "^1.0.5",
+        "ua-parser-js": "^0.7.18"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "1.2.7",
+          "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
+          "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY="
+        }
+      }
+    },
+    "figgy-pudding": {
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz",
+      "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w=="
+    },
+    "figures": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/figures/-/figures-3.0.0.tgz",
+      "integrity": "sha512-HKri+WoWoUgr83pehn/SIgLOMZ9nAWC6dcGj26RY2R4F50u4+RTUz0RCrUlOV3nKRAICW1UGzyb+kcX2qK1S/g==",
+      "requires": {
+        "escape-string-regexp": "^1.0.5"
+      }
+    },
+    "file-entry-cache": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
+      "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
+      "requires": {
+        "flat-cache": "^2.0.1"
+      }
+    },
+    "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==",
+      "requires": {
+        "loader-utils": "^1.0.2",
+        "schema-utils": "^1.0.0"
+      }
+    },
+    "filesize": {
+      "version": "3.6.1",
+      "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz",
+      "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg=="
+    },
+    "fill-range": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+      "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+      "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=",
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "finalhandler": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
+      "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+      "requires": {
+        "debug": "2.6.9",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "on-finished": "~2.3.0",
+        "parseurl": "~1.3.3",
+        "statuses": "~1.5.0",
+        "unpipe": "~1.0.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+        }
+      }
+    },
+    "find-cache-dir": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+      "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+      "requires": {
+        "commondir": "^1.0.1",
+        "make-dir": "^2.0.0",
+        "pkg-dir": "^3.0.0"
+      }
+    },
+    "find-root": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
+      "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng=="
+    },
+    "find-up": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+      "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+      "requires": {
+        "locate-path": "^3.0.0"
+      }
+    },
+    "flat-cache": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
+      "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
+      "requires": {
+        "flatted": "^2.0.0",
+        "rimraf": "2.6.3",
+        "write": "1.0.3"
+      }
+    },
+    "flatted": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz",
+      "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg=="
+    },
+    "flatten": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz",
+      "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I="
+    },
+    "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==",
+      "requires": {
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.3.6"
+      }
+    },
+    "follow-redirects": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz",
+      "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==",
+      "requires": {
+        "debug": "^3.2.6"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        }
+      }
+    },
+    "for-in": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
+    },
+    "for-own": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz",
+      "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
+      "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="
+    },
+    "fork-ts-checker-webpack-plugin": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.5.0.tgz",
+      "integrity": "sha512-zEhg7Hz+KhZlBhILYpXy+Beu96gwvkROWJiTXOCyOOMMrdBIRPvsBpBqgTI4jfJGrJXcqGwJR8zsBGDmzY0jsA==",
+      "requires": {
+        "babel-code-frame": "^6.22.0",
+        "chalk": "^2.4.1",
+        "chokidar": "^2.0.4",
+        "micromatch": "^3.1.10",
+        "minimatch": "^3.0.4",
+        "semver": "^5.6.0",
+        "tapable": "^1.0.0",
+        "worker-rpc": "^0.1.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+        }
+      }
+    },
+    "form-data": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+      "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+      "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="
+    },
+    "fragment-cache": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+      "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+      "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="
+    },
+    "from2": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+      "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+      "requires": {
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.0.0"
+      }
+    },
+    "fs-extra": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
+      "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "jsonfile": "^4.0.0",
+        "universalify": "^0.1.0"
+      }
+    },
+    "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=",
+      "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="
+    },
+    "fsevents": {
+      "version": "2.0.7",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.0.7.tgz",
+      "integrity": "sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ==",
+      "optional": true
+    },
+    "function-bind": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+    },
+    "function.prototype.name": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.1.tgz",
+      "integrity": "sha512-e1NzkiJuw6xqVH7YSdiW/qDHebcmMhPNe6w+4ZYYEg0VA+LaLzx37RimbPLuonHhYGFGPx1ME2nSi74JiaCr/Q==",
+      "dev": true,
+      "requires": {
+        "define-properties": "^1.1.3",
+        "function-bind": "^1.1.1",
+        "functions-have-names": "^1.1.1",
+        "is-callable": "^1.1.4"
+      }
+    },
+    "functional-red-black-tree": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+      "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc="
+    },
+    "functions-have-names": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.1.1.tgz",
+      "integrity": "sha512-U0kNHUoxwPNPWOJaMG7Z00d4a/qZVrFtzWJRaK8V9goaVOCXBSQSJpt3MYGNtkScKEBKovxLjnNdC9MlXwo5Pw==",
+      "dev": true
+    },
+    "get-caller-file": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+      "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
+    },
+    "get-own-enumerable-property-symbols": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz",
+      "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg=="
+    },
+    "get-stream": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+      "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+      "requires": {
+        "pump": "^3.0.0"
+      }
+    },
+    "get-value": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+      "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
+    },
+    "getpass": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+      "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+      "requires": {
+        "assert-plus": "^1.0.0"
+      }
+    },
+    "glob": {
+      "version": "7.1.4",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
+      "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
+      "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-parent": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz",
+      "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==",
+      "requires": {
+        "is-glob": "^4.0.1"
+      }
+    },
+    "glob-to-regexp": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
+      "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs="
+    },
+    "global-modules": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
+      "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==",
+      "requires": {
+        "global-prefix": "^3.0.0"
+      }
+    },
+    "global-prefix": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz",
+      "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==",
+      "requires": {
+        "ini": "^1.3.5",
+        "kind-of": "^6.0.2",
+        "which": "^1.3.1"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+        }
+      }
+    },
+    "globals": {
+      "version": "11.12.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+      "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
+    },
+    "globby": {
+      "version": "8.0.2",
+      "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz",
+      "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==",
+      "requires": {
+        "array-union": "^1.0.1",
+        "dir-glob": "2.0.0",
+        "fast-glob": "^2.0.2",
+        "glob": "^7.1.2",
+        "ignore": "^3.3.5",
+        "pify": "^3.0.0",
+        "slash": "^1.0.0"
+      },
+      "dependencies": {
+        "ignore": {
+          "version": "3.3.10",
+          "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
+          "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug=="
+        },
+        "slash": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+          "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU="
+        }
+      }
+    },
+    "graceful-fs": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz",
+      "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q=="
+    },
+    "growly": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
+      "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE="
+    },
+    "gud": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz",
+      "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw=="
+    },
+    "gzip-size": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz",
+      "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==",
+      "requires": {
+        "duplexer": "^0.1.1",
+        "pify": "^4.0.1"
+      },
+      "dependencies": {
+        "pify": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+          "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
+        }
+      }
+    },
+    "handle-thing": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz",
+      "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ=="
+    },
+    "handlebars": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz",
+      "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==",
+      "requires": {
+        "neo-async": "^2.6.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=="
+        }
+      }
+    },
+    "har-schema": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
+    },
+    "har-validator": {
+      "version": "5.1.3",
+      "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
+      "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
+      "requires": {
+        "ajv": "^6.5.5",
+        "har-schema": "^2.0.0"
+      }
+    },
+    "harmony-reflect": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.1.tgz",
+      "integrity": "sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA=="
+    },
+    "has": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+      "requires": {
+        "function-bind": "^1.1.1"
+      }
+    },
+    "has-ansi": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+      "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+      "requires": {
+        "ansi-regex": "^2.0.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+        }
+      }
+    },
+    "has-flag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+    },
+    "has-symbols": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
+      "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q="
+    },
+    "has-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+      "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+      "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=",
+      "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=",
+          "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=",
+      "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": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+      "requires": {
+        "inherits": "^2.0.3",
+        "minimalistic-assert": "^1.0.1"
+      }
+    },
+    "he": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+      "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
+    },
+    "hex-color-regex": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz",
+      "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ=="
+    },
+    "history": {
+      "version": "4.9.0",
+      "resolved": "https://registry.npmjs.org/history/-/history-4.9.0.tgz",
+      "integrity": "sha512-H2DkjCjXf0Op9OAr6nJ56fcRkTSNrUiv41vNJ6IswJjif6wlpZK0BTfFbi7qK9dXLSYZxkq5lBsj3vUjlYBYZA==",
+      "requires": {
+        "@babel/runtime": "^7.1.2",
+        "loose-envify": "^1.2.0",
+        "resolve-pathname": "^2.2.0",
+        "tiny-invariant": "^1.0.2",
+        "tiny-warning": "^1.0.0",
+        "value-equal": "^0.4.0"
+      }
+    },
+    "hmac-drbg": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+      "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
+      "requires": {
+        "hash.js": "^1.0.3",
+        "minimalistic-assert": "^1.0.0",
+        "minimalistic-crypto-utils": "^1.0.1"
+      }
+    },
+    "hoist-non-react-statics": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz",
+      "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==",
+      "requires": {
+        "react-is": "^16.7.0"
+      }
+    },
+    "hosted-git-info": {
+      "version": "2.8.4",
+      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz",
+      "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ=="
+    },
+    "hpack.js": {
+      "version": "2.1.6",
+      "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
+      "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
+      "requires": {
+        "inherits": "^2.0.1",
+        "obuf": "^1.0.0",
+        "readable-stream": "^2.0.1",
+        "wbuf": "^1.1.0"
+      }
+    },
+    "hsl-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz",
+      "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4="
+    },
+    "hsla-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz",
+      "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg="
+    },
+    "html-comment-regex": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz",
+      "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ=="
+    },
+    "html-element-map": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.1.0.tgz",
+      "integrity": "sha512-iqiG3dTZmy+uUaTmHarTL+3/A2VW9ox/9uasKEZC+R/wAtUrTcRlXPSaPqsnWPfIu8wqn09jQNwMRqzL54jSYA==",
+      "dev": true,
+      "requires": {
+        "array-filter": "^1.0.0"
+      },
+      "dependencies": {
+        "array-filter": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz",
+          "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=",
+          "dev": true
+        }
+      }
+    },
+    "html-encoding-sniffer": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",
+      "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",
+      "requires": {
+        "whatwg-encoding": "^1.0.1"
+      }
+    },
+    "html-entities": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
+      "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8="
+    },
+    "html-minifier": {
+      "version": "3.5.21",
+      "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz",
+      "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==",
+      "requires": {
+        "camel-case": "3.0.x",
+        "clean-css": "4.2.x",
+        "commander": "2.17.x",
+        "he": "1.2.x",
+        "param-case": "2.1.x",
+        "relateurl": "0.2.x",
+        "uglify-js": "3.4.x"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "2.17.1",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
+          "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg=="
+        }
+      }
+    },
+    "html-webpack-plugin": {
+      "version": "4.0.0-beta.5",
+      "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.5.tgz",
+      "integrity": "sha512-y5l4lGxOW3pz3xBTFdfB9rnnrWRPVxlAhX6nrBYIcW+2k2zC3mSp/3DxlWVCMBfnO6UAnoF8OcFn0IMy6kaKAQ==",
+      "requires": {
+        "html-minifier": "^3.5.20",
+        "loader-utils": "^1.1.0",
+        "lodash": "^4.17.11",
+        "pretty-error": "^2.1.1",
+        "tapable": "^1.1.0",
+        "util.promisify": "1.0.0"
+      }
+    },
+    "htmlparser2": {
+      "version": "3.10.1",
+      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz",
+      "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==",
+      "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": {
+        "entities": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+          "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
+        },
+        "readable-stream": {
+          "version": "3.4.0",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
+          "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        }
+      }
+    },
+    "http-deceiver": {
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
+      "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc="
+    },
+    "http-errors": {
+      "version": "1.7.2",
+      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
+      "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
+      "requires": {
+        "depd": "~1.1.2",
+        "inherits": "2.0.3",
+        "setprototypeof": "1.1.1",
+        "statuses": ">= 1.5.0 < 2",
+        "toidentifier": "1.0.0"
+      },
+      "dependencies": {
+        "inherits": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+        }
+      }
+    },
+    "http-parser-js": {
+      "version": "0.4.10",
+      "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz",
+      "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q="
+    },
+    "http-proxy": {
+      "version": "1.17.0",
+      "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz",
+      "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==",
+      "requires": {
+        "eventemitter3": "^3.0.0",
+        "follow-redirects": "^1.0.0",
+        "requires-port": "^1.0.0"
+      }
+    },
+    "http-proxy-middleware": {
+      "version": "0.19.1",
+      "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz",
+      "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==",
+      "requires": {
+        "http-proxy": "^1.17.0",
+        "is-glob": "^4.0.0",
+        "lodash": "^4.17.11",
+        "micromatch": "^3.1.10"
+      }
+    },
+    "http-signature": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+      "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+      "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="
+    },
+    "iconv-lite": {
+      "version": "0.4.24",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+      "requires": {
+        "safer-buffer": ">= 2.1.2 < 3"
+      }
+    },
+    "icss-replace-symbols": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
+      "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0="
+    },
+    "icss-utils": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz",
+      "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==",
+      "requires": {
+        "postcss": "^7.0.14"
+      }
+    },
+    "identity-obj-proxy": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz",
+      "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=",
+      "requires": {
+        "harmony-reflect": "^1.4.6"
+      }
+    },
+    "ieee754": {
+      "version": "1.1.13",
+      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
+      "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
+    },
+    "iferr": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
+      "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE="
+    },
+    "ignore": {
+      "version": "4.0.6",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+      "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="
+    },
+    "immer": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz",
+      "integrity": "sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg=="
+    },
+    "import-cwd": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz",
+      "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=",
+      "requires": {
+        "import-from": "^2.1.0"
+      }
+    },
+    "import-fresh": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
+      "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
+      "requires": {
+        "caller-path": "^2.0.0",
+        "resolve-from": "^3.0.0"
+      }
+    },
+    "import-from": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz",
+      "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
+      "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": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==",
+      "requires": {
+        "pkg-dir": "^3.0.0",
+        "resolve-cwd": "^2.0.0"
+      }
+    },
+    "imurmurhash": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
+    },
+    "indexes-of": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
+      "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc="
+    },
+    "infer-owner": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
+      "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A=="
+    },
+    "inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+      "requires": {
+        "once": "^1.3.0",
+        "wrappy": "1"
+      }
+    },
+    "inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+    },
+    "ini": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+      "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
+    },
+    "inquirer": {
+      "version": "6.5.1",
+      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.1.tgz",
+      "integrity": "sha512-uxNHBeQhRXIoHWTSNYUFhQVrHYFThIt6IVo2fFmSe8aBwdR3/w6b58hJpiL/fMukFkvGzjg+hSxFtwvVmKZmXw==",
+      "requires": {
+        "ansi-escapes": "^4.2.1",
+        "chalk": "^2.4.2",
+        "cli-cursor": "^3.1.0",
+        "cli-width": "^2.0.0",
+        "external-editor": "^3.0.3",
+        "figures": "^3.0.0",
+        "lodash": "^4.17.15",
+        "mute-stream": "0.0.8",
+        "run-async": "^2.2.0",
+        "rxjs": "^6.4.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^5.1.0",
+        "through": "^2.3.6"
+      }
+    },
+    "internal-ip": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz",
+      "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==",
+      "requires": {
+        "default-gateway": "^4.2.0",
+        "ipaddr.js": "^1.9.0"
+      }
+    },
+    "invariant": {
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
+      "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==",
+      "requires": {
+        "loose-envify": "^1.0.0"
+      }
+    },
+    "invert-kv": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
+      "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA=="
+    },
+    "ip": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
+      "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo="
+    },
+    "ip-regex": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
+      "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk="
+    },
+    "ipaddr.js": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
+      "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA=="
+    },
+    "is-absolute-url": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz",
+      "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY="
+    },
+    "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=",
+      "requires": {
+        "kind-of": "^3.0.2"
+      }
+    },
+    "is-arrayish": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+    },
+    "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=",
+      "requires": {
+        "binary-extensions": "^1.0.0"
+      }
+    },
+    "is-boolean-object": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.0.tgz",
+      "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=",
+      "dev": true
+    },
+    "is-buffer": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+    },
+    "is-callable": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
+      "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA=="
+    },
+    "is-ci": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
+      "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
+      "requires": {
+        "ci-info": "^2.0.0"
+      }
+    },
+    "is-color-stop": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz",
+      "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=",
+      "requires": {
+        "css-color-names": "^0.0.4",
+        "hex-color-regex": "^1.1.0",
+        "hsl-regex": "^1.0.0",
+        "hsla-regex": "^1.0.0",
+        "rgb-regex": "^1.0.1",
+        "rgba-regex": "^1.0.0"
+      }
+    },
+    "is-data-descriptor": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+      "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+      "requires": {
+        "kind-of": "^3.0.2"
+      }
+    },
+    "is-date-object": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
+      "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY="
+    },
+    "is-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+      "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+      "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": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+        }
+      }
+    },
+    "is-directory": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+      "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE="
+    },
+    "is-extendable": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik="
+    },
+    "is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+    },
+    "is-fullwidth-code-point": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
+    },
+    "is-generator-fn": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
+      "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ=="
+    },
+    "is-glob": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+      "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+      "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=",
+      "requires": {
+        "kind-of": "^3.0.2"
+      }
+    },
+    "is-number-object": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz",
+      "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=",
+      "dev": true
+    },
+    "is-obj": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+      "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8="
+    },
+    "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="
+    },
+    "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": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
+      "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=",
+      "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": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+      "requires": {
+        "isobject": "^3.0.1"
+      }
+    },
+    "is-promise": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+      "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
+    },
+    "is-regex": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
+      "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
+      "requires": {
+        "has": "^1.0.1"
+      }
+    },
+    "is-regexp": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
+      "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk="
+    },
+    "is-resolvable": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
+      "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg=="
+    },
+    "is-root": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz",
+      "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg=="
+    },
+    "is-stream": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
+    },
+    "is-string": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz",
+      "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=",
+      "dev": true
+    },
+    "is-subset": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
+      "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=",
+      "dev": true
+    },
+    "is-svg": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz",
+      "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==",
+      "requires": {
+        "html-comment-regex": "^1.1.0"
+      }
+    },
+    "is-symbol": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
+      "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
+      "requires": {
+        "has-symbols": "^1.0.0"
+      }
+    },
+    "is-typedarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+    },
+    "is-what": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.3.1.tgz",
+      "integrity": "sha512-seFn10yAXy+yJlTRO+8VfiafC+0QJanGLMPTBWLrJm/QPauuchy0UXh8B6H5o9VA8BAzk0iYievt6mNp6gfaqA=="
+    },
+    "is-windows": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+      "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
+    },
+    "is-wsl": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
+      "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
+    },
+    "isarray": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+      "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+    },
+    "isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+    },
+    "isobject": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+      "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
+    },
+    "isomorphic-fetch": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
+      "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
+      "requires": {
+        "node-fetch": "^1.0.1",
+        "whatwg-fetch": ">=0.10.0"
+      }
+    },
+    "isstream": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+    },
+    "istanbul-lib-coverage": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz",
+      "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA=="
+    },
+    "istanbul-lib-instrument": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz",
+      "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==",
+      "requires": {
+        "@babel/generator": "^7.4.0",
+        "@babel/parser": "^7.4.3",
+        "@babel/template": "^7.4.0",
+        "@babel/traverse": "^7.4.3",
+        "@babel/types": "^7.4.0",
+        "istanbul-lib-coverage": "^2.0.5",
+        "semver": "^6.0.0"
+      }
+    },
+    "istanbul-lib-report": {
+      "version": "2.0.8",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz",
+      "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==",
+      "requires": {
+        "istanbul-lib-coverage": "^2.0.5",
+        "make-dir": "^2.1.0",
+        "supports-color": "^6.1.0"
+      },
+      "dependencies": {
+        "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==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "istanbul-lib-source-maps": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz",
+      "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==",
+      "requires": {
+        "debug": "^4.1.1",
+        "istanbul-lib-coverage": "^2.0.5",
+        "make-dir": "^2.1.0",
+        "rimraf": "^2.6.3",
+        "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=="
+        }
+      }
+    },
+    "istanbul-reports": {
+      "version": "2.2.6",
+      "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz",
+      "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==",
+      "requires": {
+        "handlebars": "^4.1.2"
+      }
+    },
+    "jest": {
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/jest/-/jest-24.8.0.tgz",
+      "integrity": "sha512-o0HM90RKFRNWmAWvlyV8i5jGZ97pFwkeVoGvPW1EtLTgJc2+jcuqcbbqcSZLE/3f2S5pt0y2ZBETuhpWNl1Reg==",
+      "requires": {
+        "import-local": "^2.0.0",
+        "jest-cli": "^24.8.0"
+      },
+      "dependencies": {
+        "jest-cli": {
+          "version": "24.9.0",
+          "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz",
+          "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==",
+          "requires": {
+            "@jest/core": "^24.9.0",
+            "@jest/test-result": "^24.9.0",
+            "@jest/types": "^24.9.0",
+            "chalk": "^2.0.1",
+            "exit": "^0.1.2",
+            "import-local": "^2.0.0",
+            "is-ci": "^2.0.0",
+            "jest-config": "^24.9.0",
+            "jest-util": "^24.9.0",
+            "jest-validate": "^24.9.0",
+            "prompts": "^2.0.1",
+            "realpath-native": "^1.1.0",
+            "yargs": "^13.3.0"
+          }
+        }
+      }
+    },
+    "jest-changed-files": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz",
+      "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==",
+      "requires": {
+        "@jest/types": "^24.9.0",
+        "execa": "^1.0.0",
+        "throat": "^4.0.0"
+      }
+    },
+    "jest-config": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz",
+      "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==",
+      "requires": {
+        "@babel/core": "^7.1.0",
+        "@jest/test-sequencer": "^24.9.0",
+        "@jest/types": "^24.9.0",
+        "babel-jest": "^24.9.0",
+        "chalk": "^2.0.1",
+        "glob": "^7.1.1",
+        "jest-environment-jsdom": "^24.9.0",
+        "jest-environment-node": "^24.9.0",
+        "jest-get-type": "^24.9.0",
+        "jest-jasmine2": "^24.9.0",
+        "jest-regex-util": "^24.3.0",
+        "jest-resolve": "^24.9.0",
+        "jest-util": "^24.9.0",
+        "jest-validate": "^24.9.0",
+        "micromatch": "^3.1.10",
+        "pretty-format": "^24.9.0",
+        "realpath-native": "^1.1.0"
+      },
+      "dependencies": {
+        "jest-resolve": {
+          "version": "24.9.0",
+          "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz",
+          "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==",
+          "requires": {
+            "@jest/types": "^24.9.0",
+            "browser-resolve": "^1.11.3",
+            "chalk": "^2.0.1",
+            "jest-pnp-resolver": "^1.2.1",
+            "realpath-native": "^1.1.0"
+          }
+        }
+      }
+    },
+    "jest-diff": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz",
+      "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==",
+      "requires": {
+        "chalk": "^2.0.1",
+        "diff-sequences": "^24.9.0",
+        "jest-get-type": "^24.9.0",
+        "pretty-format": "^24.9.0"
+      }
+    },
+    "jest-docblock": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz",
+      "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==",
+      "requires": {
+        "detect-newline": "^2.1.0"
+      }
+    },
+    "jest-each": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz",
+      "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==",
+      "requires": {
+        "@jest/types": "^24.9.0",
+        "chalk": "^2.0.1",
+        "jest-get-type": "^24.9.0",
+        "jest-util": "^24.9.0",
+        "pretty-format": "^24.9.0"
+      }
+    },
+    "jest-environment-jsdom": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz",
+      "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==",
+      "requires": {
+        "@jest/environment": "^24.9.0",
+        "@jest/fake-timers": "^24.9.0",
+        "@jest/types": "^24.9.0",
+        "jest-mock": "^24.9.0",
+        "jest-util": "^24.9.0",
+        "jsdom": "^11.5.1"
+      }
+    },
+    "jest-environment-jsdom-fourteen": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/jest-environment-jsdom-fourteen/-/jest-environment-jsdom-fourteen-0.1.0.tgz",
+      "integrity": "sha512-4vtoRMg7jAstitRzL4nbw83VmGH8Rs13wrND3Ud2o1fczDhMUF32iIrNKwYGgeOPUdfvZU4oy8Bbv+ni1fgVCA==",
+      "requires": {
+        "jest-mock": "^24.5.0",
+        "jest-util": "^24.5.0",
+        "jsdom": "^14.0.0"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz",
+          "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA=="
+        },
+        "jsdom": {
+          "version": "14.1.0",
+          "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-14.1.0.tgz",
+          "integrity": "sha512-O901mfJSuTdwU2w3Sn+74T+RnDVP+FuV5fH8tcPWyqrseRAb0s5xOtPgCFiPOtLcyK7CLIJwPyD83ZqQWvA5ng==",
+          "requires": {
+            "abab": "^2.0.0",
+            "acorn": "^6.0.4",
+            "acorn-globals": "^4.3.0",
+            "array-equal": "^1.0.0",
+            "cssom": "^0.3.4",
+            "cssstyle": "^1.1.1",
+            "data-urls": "^1.1.0",
+            "domexception": "^1.0.1",
+            "escodegen": "^1.11.0",
+            "html-encoding-sniffer": "^1.0.2",
+            "nwsapi": "^2.1.3",
+            "parse5": "5.1.0",
+            "pn": "^1.1.0",
+            "request": "^2.88.0",
+            "request-promise-native": "^1.0.5",
+            "saxes": "^3.1.9",
+            "symbol-tree": "^3.2.2",
+            "tough-cookie": "^2.5.0",
+            "w3c-hr-time": "^1.0.1",
+            "w3c-xmlserializer": "^1.1.2",
+            "webidl-conversions": "^4.0.2",
+            "whatwg-encoding": "^1.0.5",
+            "whatwg-mimetype": "^2.3.0",
+            "whatwg-url": "^7.0.0",
+            "ws": "^6.1.2",
+            "xml-name-validator": "^3.0.0"
+          }
+        },
+        "parse5": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz",
+          "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ=="
+        },
+        "whatwg-url": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz",
+          "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==",
+          "requires": {
+            "lodash.sortby": "^4.7.0",
+            "tr46": "^1.0.1",
+            "webidl-conversions": "^4.0.2"
+          }
+        },
+        "ws": {
+          "version": "6.2.1",
+          "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
+          "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
+          "requires": {
+            "async-limiter": "~1.0.0"
+          }
+        }
+      }
+    },
+    "jest-environment-node": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz",
+      "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==",
+      "requires": {
+        "@jest/environment": "^24.9.0",
+        "@jest/fake-timers": "^24.9.0",
+        "@jest/types": "^24.9.0",
+        "jest-mock": "^24.9.0",
+        "jest-util": "^24.9.0"
+      }
+    },
+    "jest-get-type": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz",
+      "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q=="
+    },
+    "jest-haste-map": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz",
+      "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==",
+      "requires": {
+        "@jest/types": "^24.9.0",
+        "anymatch": "^2.0.0",
+        "fb-watchman": "^2.0.0",
+        "fsevents": "^1.2.7",
+        "graceful-fs": "^4.1.15",
+        "invariant": "^2.2.4",
+        "jest-serializer": "^24.9.0",
+        "jest-util": "^24.9.0",
+        "jest-worker": "^24.9.0",
+        "micromatch": "^3.1.10",
+        "sane": "^4.0.3",
+        "walker": "^1.0.7"
+      },
+      "dependencies": {
+        "fsevents": {
+          "version": "1.2.9",
+          "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz",
+          "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==",
+          "optional": true,
+          "requires": {
+            "nan": "^2.12.1",
+            "node-pre-gyp": "^0.12.0"
+          },
+          "dependencies": {
+            "abbrev": {
+              "version": "1.1.1",
+              "bundled": true,
+              "optional": true
+            },
+            "ansi-regex": {
+              "version": "2.1.1",
+              "bundled": true,
+              "optional": true
+            },
+            "aproba": {
+              "version": "1.2.0",
+              "bundled": true,
+              "optional": true
+            },
+            "are-we-there-yet": {
+              "version": "1.1.5",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "delegates": "^1.0.0",
+                "readable-stream": "^2.0.6"
+              }
+            },
+            "balanced-match": {
+              "version": "1.0.0",
+              "bundled": true,
+              "optional": true
+            },
+            "brace-expansion": {
+              "version": "1.1.11",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "balanced-match": "^1.0.0",
+                "concat-map": "0.0.1"
+              }
+            },
+            "chownr": {
+              "version": "1.1.1",
+              "bundled": true,
+              "optional": true
+            },
+            "code-point-at": {
+              "version": "1.1.0",
+              "bundled": true,
+              "optional": true
+            },
+            "concat-map": {
+              "version": "0.0.1",
+              "bundled": true,
+              "optional": true
+            },
+            "console-control-strings": {
+              "version": "1.1.0",
+              "bundled": true,
+              "optional": true
+            },
+            "core-util-is": {
+              "version": "1.0.2",
+              "bundled": true,
+              "optional": true
+            },
+            "debug": {
+              "version": "4.1.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "ms": "^2.1.1"
+              }
+            },
+            "deep-extend": {
+              "version": "0.6.0",
+              "bundled": true,
+              "optional": true
+            },
+            "delegates": {
+              "version": "1.0.0",
+              "bundled": true,
+              "optional": true
+            },
+            "detect-libc": {
+              "version": "1.0.3",
+              "bundled": true,
+              "optional": true
+            },
+            "fs-minipass": {
+              "version": "1.2.5",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "minipass": "^2.2.1"
+              }
+            },
+            "fs.realpath": {
+              "version": "1.0.0",
+              "bundled": true,
+              "optional": true
+            },
+            "gauge": {
+              "version": "2.7.4",
+              "bundled": 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,
+              "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,
+              "optional": true
+            },
+            "iconv-lite": {
+              "version": "0.4.24",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "safer-buffer": ">= 2.1.2 < 3"
+              }
+            },
+            "ignore-walk": {
+              "version": "3.0.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "minimatch": "^3.0.4"
+              }
+            },
+            "inflight": {
+              "version": "1.0.6",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "once": "^1.3.0",
+                "wrappy": "1"
+              }
+            },
+            "inherits": {
+              "version": "2.0.3",
+              "bundled": true,
+              "optional": true
+            },
+            "ini": {
+              "version": "1.3.5",
+              "bundled": true,
+              "optional": true
+            },
+            "is-fullwidth-code-point": {
+              "version": "1.0.0",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "number-is-nan": "^1.0.0"
+              }
+            },
+            "isarray": {
+              "version": "1.0.0",
+              "bundled": true,
+              "optional": true
+            },
+            "minimatch": {
+              "version": "3.0.4",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "brace-expansion": "^1.1.7"
+              }
+            },
+            "minimist": {
+              "version": "0.0.8",
+              "bundled": true,
+              "optional": true
+            },
+            "minipass": {
+              "version": "2.3.5",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "safe-buffer": "^5.1.2",
+                "yallist": "^3.0.0"
+              }
+            },
+            "minizlib": {
+              "version": "1.2.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "minipass": "^2.2.1"
+              }
+            },
+            "mkdirp": {
+              "version": "0.5.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "minimist": "0.0.8"
+              }
+            },
+            "ms": {
+              "version": "2.1.1",
+              "bundled": true,
+              "optional": true
+            },
+            "needle": {
+              "version": "2.3.0",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "debug": "^4.1.0",
+                "iconv-lite": "^0.4.4",
+                "sax": "^1.2.4"
+              }
+            },
+            "node-pre-gyp": {
+              "version": "0.12.0",
+              "bundled": 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,
+              "optional": true,
+              "requires": {
+                "abbrev": "1",
+                "osenv": "^0.1.4"
+              }
+            },
+            "npm-bundled": {
+              "version": "1.0.6",
+              "bundled": true,
+              "optional": true
+            },
+            "npm-packlist": {
+              "version": "1.4.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "ignore-walk": "^3.0.1",
+                "npm-bundled": "^1.0.1"
+              }
+            },
+            "npmlog": {
+              "version": "4.1.2",
+              "bundled": 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,
+              "optional": true
+            },
+            "object-assign": {
+              "version": "4.1.1",
+              "bundled": true,
+              "optional": true
+            },
+            "once": {
+              "version": "1.4.0",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "wrappy": "1"
+              }
+            },
+            "os-homedir": {
+              "version": "1.0.2",
+              "bundled": true,
+              "optional": true
+            },
+            "os-tmpdir": {
+              "version": "1.0.2",
+              "bundled": true,
+              "optional": true
+            },
+            "osenv": {
+              "version": "0.1.5",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "os-homedir": "^1.0.0",
+                "os-tmpdir": "^1.0.0"
+              }
+            },
+            "path-is-absolute": {
+              "version": "1.0.1",
+              "bundled": true,
+              "optional": true
+            },
+            "process-nextick-args": {
+              "version": "2.0.0",
+              "bundled": true,
+              "optional": true
+            },
+            "rc": {
+              "version": "1.2.8",
+              "bundled": 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,
+                  "optional": true
+                }
+              }
+            },
+            "readable-stream": {
+              "version": "2.3.6",
+              "bundled": 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,
+              "optional": true,
+              "requires": {
+                "glob": "^7.1.3"
+              }
+            },
+            "safe-buffer": {
+              "version": "5.1.2",
+              "bundled": true,
+              "optional": true
+            },
+            "safer-buffer": {
+              "version": "2.1.2",
+              "bundled": true,
+              "optional": true
+            },
+            "sax": {
+              "version": "1.2.4",
+              "bundled": true,
+              "optional": true
+            },
+            "semver": {
+              "version": "5.7.0",
+              "bundled": true,
+              "optional": true
+            },
+            "set-blocking": {
+              "version": "2.0.0",
+              "bundled": true,
+              "optional": true
+            },
+            "signal-exit": {
+              "version": "3.0.2",
+              "bundled": true,
+              "optional": true
+            },
+            "string-width": {
+              "version": "1.0.2",
+              "bundled": true,
+              "optional": 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,
+              "optional": true,
+              "requires": {
+                "safe-buffer": "~5.1.0"
+              }
+            },
+            "strip-ansi": {
+              "version": "3.0.1",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "ansi-regex": "^2.0.0"
+              }
+            },
+            "strip-json-comments": {
+              "version": "2.0.1",
+              "bundled": true,
+              "optional": true
+            },
+            "tar": {
+              "version": "4.4.8",
+              "bundled": 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,
+              "optional": true
+            },
+            "wide-align": {
+              "version": "1.1.3",
+              "bundled": true,
+              "optional": true,
+              "requires": {
+                "string-width": "^1.0.2 || 2"
+              }
+            },
+            "wrappy": {
+              "version": "1.0.2",
+              "bundled": true,
+              "optional": true
+            },
+            "yallist": {
+              "version": "3.0.3",
+              "bundled": true,
+              "optional": true
+            }
+          }
+        }
+      }
+    },
+    "jest-jasmine2": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz",
+      "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==",
+      "requires": {
+        "@babel/traverse": "^7.1.0",
+        "@jest/environment": "^24.9.0",
+        "@jest/test-result": "^24.9.0",
+        "@jest/types": "^24.9.0",
+        "chalk": "^2.0.1",
+        "co": "^4.6.0",
+        "expect": "^24.9.0",
+        "is-generator-fn": "^2.0.0",
+        "jest-each": "^24.9.0",
+        "jest-matcher-utils": "^24.9.0",
+        "jest-message-util": "^24.9.0",
+        "jest-runtime": "^24.9.0",
+        "jest-snapshot": "^24.9.0",
+        "jest-util": "^24.9.0",
+        "pretty-format": "^24.9.0",
+        "throat": "^4.0.0"
+      }
+    },
+    "jest-leak-detector": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz",
+      "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==",
+      "requires": {
+        "jest-get-type": "^24.9.0",
+        "pretty-format": "^24.9.0"
+      }
+    },
+    "jest-matcher-utils": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz",
+      "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==",
+      "requires": {
+        "chalk": "^2.0.1",
+        "jest-diff": "^24.9.0",
+        "jest-get-type": "^24.9.0",
+        "pretty-format": "^24.9.0"
+      }
+    },
+    "jest-message-util": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz",
+      "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==",
+      "requires": {
+        "@babel/code-frame": "^7.0.0",
+        "@jest/test-result": "^24.9.0",
+        "@jest/types": "^24.9.0",
+        "@types/stack-utils": "^1.0.1",
+        "chalk": "^2.0.1",
+        "micromatch": "^3.1.10",
+        "slash": "^2.0.0",
+        "stack-utils": "^1.0.1"
+      }
+    },
+    "jest-mock": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz",
+      "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==",
+      "requires": {
+        "@jest/types": "^24.9.0"
+      }
+    },
+    "jest-pnp-resolver": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz",
+      "integrity": "sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ=="
+    },
+    "jest-regex-util": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz",
+      "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA=="
+    },
+    "jest-resolve": {
+      "version": "24.8.0",
+      "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz",
+      "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==",
+      "requires": {
+        "@jest/types": "^24.8.0",
+        "browser-resolve": "^1.11.3",
+        "chalk": "^2.0.1",
+        "jest-pnp-resolver": "^1.2.1",
+        "realpath-native": "^1.1.0"
+      }
+    },
+    "jest-resolve-dependencies": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz",
+      "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==",
+      "requires": {
+        "@jest/types": "^24.9.0",
+        "jest-regex-util": "^24.3.0",
+        "jest-snapshot": "^24.9.0"
+      }
+    },
+    "jest-runner": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz",
+      "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==",
+      "requires": {
+        "@jest/console": "^24.7.1",
+        "@jest/environment": "^24.9.0",
+        "@jest/test-result": "^24.9.0",
+        "@jest/types": "^24.9.0",
+        "chalk": "^2.4.2",
+        "exit": "^0.1.2",
+        "graceful-fs": "^4.1.15",
+        "jest-config": "^24.9.0",
+        "jest-docblock": "^24.3.0",
+        "jest-haste-map": "^24.9.0",
+        "jest-jasmine2": "^24.9.0",
+        "jest-leak-detector": "^24.9.0",
+        "jest-message-util": "^24.9.0",
+        "jest-resolve": "^24.9.0",
+        "jest-runtime": "^24.9.0",
+        "jest-util": "^24.9.0",
+        "jest-worker": "^24.6.0",
+        "source-map-support": "^0.5.6",
+        "throat": "^4.0.0"
+      },
+      "dependencies": {
+        "jest-resolve": {
+          "version": "24.9.0",
+          "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz",
+          "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==",
+          "requires": {
+            "@jest/types": "^24.9.0",
+            "browser-resolve": "^1.11.3",
+            "chalk": "^2.0.1",
+            "jest-pnp-resolver": "^1.2.1",
+            "realpath-native": "^1.1.0"
+          }
+        }
+      }
+    },
+    "jest-runtime": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz",
+      "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==",
+      "requires": {
+        "@jest/console": "^24.7.1",
+        "@jest/environment": "^24.9.0",
+        "@jest/source-map": "^24.3.0",
+        "@jest/transform": "^24.9.0",
+        "@jest/types": "^24.9.0",
+        "@types/yargs": "^13.0.0",
+        "chalk": "^2.0.1",
+        "exit": "^0.1.2",
+        "glob": "^7.1.3",
+        "graceful-fs": "^4.1.15",
+        "jest-config": "^24.9.0",
+        "jest-haste-map": "^24.9.0",
+        "jest-message-util": "^24.9.0",
+        "jest-mock": "^24.9.0",
+        "jest-regex-util": "^24.3.0",
+        "jest-resolve": "^24.9.0",
+        "jest-snapshot": "^24.9.0",
+        "jest-util": "^24.9.0",
+        "jest-validate": "^24.9.0",
+        "realpath-native": "^1.1.0",
+        "slash": "^2.0.0",
+        "strip-bom": "^3.0.0",
+        "yargs": "^13.3.0"
+      },
+      "dependencies": {
+        "jest-resolve": {
+          "version": "24.9.0",
+          "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz",
+          "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==",
+          "requires": {
+            "@jest/types": "^24.9.0",
+            "browser-resolve": "^1.11.3",
+            "chalk": "^2.0.1",
+            "jest-pnp-resolver": "^1.2.1",
+            "realpath-native": "^1.1.0"
+          }
+        }
+      }
+    },
+    "jest-serializer": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz",
+      "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ=="
+    },
+    "jest-snapshot": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz",
+      "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==",
+      "requires": {
+        "@babel/types": "^7.0.0",
+        "@jest/types": "^24.9.0",
+        "chalk": "^2.0.1",
+        "expect": "^24.9.0",
+        "jest-diff": "^24.9.0",
+        "jest-get-type": "^24.9.0",
+        "jest-matcher-utils": "^24.9.0",
+        "jest-message-util": "^24.9.0",
+        "jest-resolve": "^24.9.0",
+        "mkdirp": "^0.5.1",
+        "natural-compare": "^1.4.0",
+        "pretty-format": "^24.9.0",
+        "semver": "^6.2.0"
+      },
+      "dependencies": {
+        "jest-resolve": {
+          "version": "24.9.0",
+          "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz",
+          "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==",
+          "requires": {
+            "@jest/types": "^24.9.0",
+            "browser-resolve": "^1.11.3",
+            "chalk": "^2.0.1",
+            "jest-pnp-resolver": "^1.2.1",
+            "realpath-native": "^1.1.0"
+          }
+        }
+      }
+    },
+    "jest-util": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz",
+      "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==",
+      "requires": {
+        "@jest/console": "^24.9.0",
+        "@jest/fake-timers": "^24.9.0",
+        "@jest/source-map": "^24.9.0",
+        "@jest/test-result": "^24.9.0",
+        "@jest/types": "^24.9.0",
+        "callsites": "^3.0.0",
+        "chalk": "^2.0.1",
+        "graceful-fs": "^4.1.15",
+        "is-ci": "^2.0.0",
+        "mkdirp": "^0.5.1",
+        "slash": "^2.0.0",
+        "source-map": "^0.6.0"
+      },
+      "dependencies": {
+        "callsites": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+          "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        }
+      }
+    },
+    "jest-validate": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz",
+      "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==",
+      "requires": {
+        "@jest/types": "^24.9.0",
+        "camelcase": "^5.3.1",
+        "chalk": "^2.0.1",
+        "jest-get-type": "^24.9.0",
+        "leven": "^3.1.0",
+        "pretty-format": "^24.9.0"
+      }
+    },
+    "jest-watch-typeahead": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-0.3.1.tgz",
+      "integrity": "sha512-cDIko96c4Yqg/7mfye1eEYZ6Pvugo9mnOOhGQod3Es7/KptNv1b+9gFVaotzdqNqTlwbkA80BnWHtzV4dc+trA==",
+      "requires": {
+        "ansi-escapes": "^3.0.0",
+        "chalk": "^2.4.1",
+        "jest-watcher": "^24.3.0",
+        "slash": "^2.0.0",
+        "string-length": "^2.0.0",
+        "strip-ansi": "^5.0.0"
+      },
+      "dependencies": {
+        "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=="
+        }
+      }
+    },
+    "jest-watcher": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz",
+      "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==",
+      "requires": {
+        "@jest/test-result": "^24.9.0",
+        "@jest/types": "^24.9.0",
+        "@types/yargs": "^13.0.0",
+        "ansi-escapes": "^3.0.0",
+        "chalk": "^2.0.1",
+        "jest-util": "^24.9.0",
+        "string-length": "^2.0.0"
+      },
+      "dependencies": {
+        "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=="
+        }
+      }
+    },
+    "jest-worker": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz",
+      "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==",
+      "requires": {
+        "merge-stream": "^2.0.0",
+        "supports-color": "^6.1.0"
+      },
+      "dependencies": {
+        "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==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "js-levenshtein": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz",
+      "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g=="
+    },
+    "js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+    },
+    "js-yaml": {
+      "version": "3.13.1",
+      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+      "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+      "requires": {
+        "argparse": "^1.0.7",
+        "esprima": "^4.0.0"
+      }
+    },
+    "jsbn": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
+    },
+    "jsdom": {
+      "version": "11.12.0",
+      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz",
+      "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==",
+      "requires": {
+        "abab": "^2.0.0",
+        "acorn": "^5.5.3",
+        "acorn-globals": "^4.1.0",
+        "array-equal": "^1.0.0",
+        "cssom": ">= 0.3.2 < 0.4.0",
+        "cssstyle": "^1.0.0",
+        "data-urls": "^1.0.0",
+        "domexception": "^1.0.1",
+        "escodegen": "^1.9.1",
+        "html-encoding-sniffer": "^1.0.2",
+        "left-pad": "^1.3.0",
+        "nwsapi": "^2.0.7",
+        "parse5": "4.0.0",
+        "pn": "^1.1.0",
+        "request": "^2.87.0",
+        "request-promise-native": "^1.0.5",
+        "sax": "^1.2.4",
+        "symbol-tree": "^3.2.2",
+        "tough-cookie": "^2.3.4",
+        "w3c-hr-time": "^1.0.1",
+        "webidl-conversions": "^4.0.2",
+        "whatwg-encoding": "^1.0.3",
+        "whatwg-mimetype": "^2.1.0",
+        "whatwg-url": "^6.4.1",
+        "ws": "^5.2.0",
+        "xml-name-validator": "^3.0.0"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "5.7.3",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+          "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw=="
+        }
+      }
+    },
+    "jsesc": {
+      "version": "2.5.2",
+      "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+      "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
+    },
+    "json-parse-better-errors": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+      "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="
+    },
+    "json-schema": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
+    },
+    "json-schema-traverse": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+    },
+    "json-stable-stringify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
+      "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
+      "requires": {
+        "jsonify": "~0.0.0"
+      }
+    },
+    "json-stable-stringify-without-jsonify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+      "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE="
+    },
+    "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="
+    },
+    "json3": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz",
+      "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA=="
+    },
+    "json5": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz",
+      "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==",
+      "requires": {
+        "minimist": "^1.2.0"
+      }
+    },
+    "jsonfile": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+      "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+      "requires": {
+        "graceful-fs": "^4.1.6"
+      }
+    },
+    "jsonify": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+      "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM="
+    },
+    "jsprim": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+      "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+      "requires": {
+        "assert-plus": "1.0.0",
+        "extsprintf": "1.3.0",
+        "json-schema": "0.2.3",
+        "verror": "1.10.0"
+      }
+    },
+    "jsx-ast-utils": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.1.tgz",
+      "integrity": "sha512-v3FxCcAf20DayI+uxnCuw795+oOIkVu6EnJ1+kSzhqqTZHNkTZ7B66ZgLp4oLJ/gbA64cI0B7WRoHZMSRdyVRQ==",
+      "requires": {
+        "array-includes": "^3.0.3",
+        "object.assign": "^4.1.0"
+      }
+    },
+    "keycode": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.2.0.tgz",
+      "integrity": "sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ="
+    },
+    "killable": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz",
+      "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg=="
+    },
+    "kind-of": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+      "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+      "requires": {
+        "is-buffer": "^1.1.5"
+      }
+    },
+    "kleur": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
+      "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="
+    },
+    "last-call-webpack-plugin": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz",
+      "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==",
+      "requires": {
+        "lodash": "^4.17.5",
+        "webpack-sources": "^1.1.0"
+      }
+    },
+    "lazy-cache": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+      "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
+    },
+    "lcid": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
+      "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
+      "requires": {
+        "invert-kv": "^2.0.0"
+      }
+    },
+    "left-pad": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz",
+      "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA=="
+    },
+    "leven": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
+      "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A=="
+    },
+    "levn": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+      "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+      "requires": {
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2"
+      }
+    },
+    "load-json-file": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+      "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+      "requires": {
+        "graceful-fs": "^4.1.2",
+        "parse-json": "^4.0.0",
+        "pify": "^3.0.0",
+        "strip-bom": "^3.0.0"
+      }
+    },
+    "loader-fs-cache": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz",
+      "integrity": "sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==",
+      "requires": {
+        "find-cache-dir": "^0.1.1",
+        "mkdirp": "0.5.1"
+      },
+      "dependencies": {
+        "find-cache-dir": {
+          "version": "0.1.1",
+          "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz",
+          "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=",
+          "requires": {
+            "commondir": "^1.0.1",
+            "mkdirp": "^0.5.1",
+            "pkg-dir": "^1.0.0"
+          }
+        },
+        "find-up": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+          "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+          "requires": {
+            "path-exists": "^2.0.0",
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "path-exists": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+          "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+          "requires": {
+            "pinkie-promise": "^2.0.0"
+          }
+        },
+        "pkg-dir": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
+          "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
+          "requires": {
+            "find-up": "^1.0.0"
+          }
+        }
+      }
+    },
+    "loader-runner": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
+      "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw=="
+    },
+    "loader-utils": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
+      "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
+      "requires": {
+        "big.js": "^5.2.2",
+        "emojis-list": "^2.0.0",
+        "json5": "^1.0.1"
+      },
+      "dependencies": {
+        "json5": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+          "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+          "requires": {
+            "minimist": "^1.2.0"
+          }
+        }
+      }
+    },
+    "locate-path": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+      "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+      "requires": {
+        "p-locate": "^3.0.0",
+        "path-exists": "^3.0.0"
+      }
+    },
+    "lodash": {
+      "version": "4.17.15",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+      "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
+    },
+    "lodash._reinterpolate": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
+      "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0="
+    },
+    "lodash.escape": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz",
+      "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=",
+      "dev": true
+    },
+    "lodash.flattendeep": {
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
+      "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=",
+      "dev": true
+    },
+    "lodash.isequal": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+      "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=",
+      "dev": true
+    },
+    "lodash.memoize": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+      "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4="
+    },
+    "lodash.sortby": {
+      "version": "4.7.0",
+      "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+      "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg="
+    },
+    "lodash.template": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz",
+      "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==",
+      "requires": {
+        "lodash._reinterpolate": "^3.0.0",
+        "lodash.templatesettings": "^4.0.0"
+      }
+    },
+    "lodash.templatesettings": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz",
+      "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==",
+      "requires": {
+        "lodash._reinterpolate": "^3.0.0"
+      }
+    },
+    "lodash.unescape": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz",
+      "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw="
+    },
+    "lodash.uniq": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
+      "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M="
+    },
+    "loglevel": {
+      "version": "1.6.3",
+      "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.3.tgz",
+      "integrity": "sha512-LoEDv5pgpvWgPF4kNYuIp0qqSJVWak/dML0RY74xlzMZiT9w77teNAwKYKWBTYjlokMirg+o3jBwp+vlLrcfAA=="
+    },
+    "loose-envify": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+      "requires": {
+        "js-tokens": "^3.0.0 || ^4.0.0"
+      }
+    },
+    "lower-case": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",
+      "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw="
+    },
+    "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==",
+      "requires": {
+        "yallist": "^3.0.2"
+      }
+    },
+    "make-dir": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+      "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+      "requires": {
+        "pify": "^4.0.1",
+        "semver": "^5.6.0"
+      },
+      "dependencies": {
+        "pify": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+          "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
+        },
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+        }
+      }
+    },
+    "makeerror": {
+      "version": "1.0.11",
+      "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
+      "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
+      "requires": {
+        "tmpl": "1.0.x"
+      }
+    },
+    "mamacro": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz",
+      "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA=="
+    },
+    "map-age-cleaner": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
+      "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
+      "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="
+    },
+    "map-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+      "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+      "requires": {
+        "object-visit": "^1.0.0"
+      }
+    },
+    "md5.js": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+      "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+      "requires": {
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.1.2"
+      }
+    },
+    "mdn-data": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
+      "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA=="
+    },
+    "media-typer": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+      "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
+    },
+    "mem": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
+      "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
+      "requires": {
+        "map-age-cleaner": "^0.1.1",
+        "mimic-fn": "^2.0.0",
+        "p-is-promise": "^2.0.0"
+      }
+    },
+    "memoize-one": {
+      "version": "5.0.5",
+      "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.0.5.tgz",
+      "integrity": "sha512-ey6EpYv0tEaIbM/nTDOpHciXUvd+ackQrJgEzBwemhZZIWZjcyodqEcrmqDy2BKRTM3a65kKBV4WtLXJDt26SQ=="
+    },
+    "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=",
+      "requires": {
+        "errno": "^0.1.3",
+        "readable-stream": "^2.0.1"
+      }
+    },
+    "merge-anything": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-2.4.0.tgz",
+      "integrity": "sha512-MhJcPOEcDUIbwU0LnEfx5S9s9dfQ/KPu4g2UA5T5G1LRKS0XmpDvJ9+UUfTkfhge+nA1gStE4tJAvx6lXLs+rg==",
+      "requires": {
+        "is-what": "^3.2.4"
+      }
+    },
+    "merge-deep": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.2.tgz",
+      "integrity": "sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA==",
+      "requires": {
+        "arr-union": "^3.1.0",
+        "clone-deep": "^0.2.4",
+        "kind-of": "^3.0.2"
+      }
+    },
+    "merge-descriptors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+      "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
+    },
+    "merge-stream": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
+    },
+    "merge2": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.4.tgz",
+      "integrity": "sha512-FYE8xI+6pjFOhokZu0We3S5NKCirLbCzSh2Usf3qEyr4X8U+0jNg9P8RZ4qz+V2UoECLVwSyzU3LxXBaLGtD3A=="
+    },
+    "methods": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+      "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+    },
+    "microevent.ts": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz",
+      "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g=="
+    },
+    "micromatch": {
+      "version": "3.1.10",
+      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+      "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+      "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"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+        }
+      }
+    },
+    "miller-rabin": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
+      "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+      "requires": {
+        "bn.js": "^4.0.0",
+        "brorand": "^1.0.1"
+      }
+    },
+    "mime": {
+      "version": "2.4.4",
+      "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz",
+      "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA=="
+    },
+    "mime-db": {
+      "version": "1.40.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
+      "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA=="
+    },
+    "mime-types": {
+      "version": "2.1.24",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
+      "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
+      "requires": {
+        "mime-db": "1.40.0"
+      }
+    },
+    "mimic-fn": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+      "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
+    },
+    "mini-create-react-context": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.3.2.tgz",
+      "integrity": "sha512-2v+OeetEyliMt5VHMXsBhABoJ0/M4RCe7fatd/fBy6SMiKazUSEt3gxxypfnk2SHMkdBYvorHRoQxuGoiwbzAw==",
+      "requires": {
+        "@babel/runtime": "^7.4.0",
+        "gud": "^1.0.0",
+        "tiny-warning": "^1.0.2"
+      }
+    },
+    "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==",
+      "requires": {
+        "loader-utils": "^1.1.0",
+        "schema-utils": "^1.0.0",
+        "webpack-sources": "^1.1.0"
+      }
+    },
+    "minimalistic-assert": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+      "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
+    },
+    "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="
+    },
+    "minimatch": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+      "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="
+    },
+    "mississippi": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
+      "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
+      "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"
+      }
+    },
+    "mixin-deep": {
+      "version": "1.3.2",
+      "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
+      "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+      "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": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+          "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=",
+      "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="
+        }
+      }
+    },
+    "mkdirp": {
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+      "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="
+        }
+      }
+    },
+    "moo": {
+      "version": "0.4.3",
+      "resolved": "https://registry.npmjs.org/moo/-/moo-0.4.3.tgz",
+      "integrity": "sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw==",
+      "dev": true
+    },
+    "move-concurrently": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
+      "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
+      "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.1.2",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+    },
+    "multicast-dns": {
+      "version": "6.2.3",
+      "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
+      "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==",
+      "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="
+    },
+    "mute-stream": {
+      "version": "0.0.8",
+      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
+      "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
+    },
+    "nan": {
+      "version": "2.14.0",
+      "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
+      "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
+      "optional": true
+    },
+    "nanomatch": {
+      "version": "1.2.13",
+      "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+      "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+      "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"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+        }
+      }
+    },
+    "natural-compare": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+      "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc="
+    },
+    "nearley": {
+      "version": "2.18.0",
+      "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.18.0.tgz",
+      "integrity": "sha512-/zQOMCeJcioI0xJtd5RpBiWw2WP7wLe6vq8/3Yu0rEwgus/G/+pViX80oA87JdVgjRt2895mZSv2VfZmy4W1uw==",
+      "dev": true,
+      "requires": {
+        "commander": "^2.19.0",
+        "moo": "^0.4.3",
+        "railroad-diagrams": "^1.0.0",
+        "randexp": "0.4.6",
+        "semver": "^5.4.1"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
+          "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
+          "dev": true
+        }
+      }
+    },
+    "negotiator": {
+      "version": "0.6.2",
+      "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
+      "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
+    },
+    "neo-async": {
+      "version": "2.6.1",
+      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
+      "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw=="
+    },
+    "next-tick": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
+      "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw="
+    },
+    "nice-try": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+      "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
+    },
+    "no-case": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",
+      "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",
+      "requires": {
+        "lower-case": "^1.1.1"
+      }
+    },
+    "node-fetch": {
+      "version": "1.7.3",
+      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
+      "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
+      "requires": {
+        "encoding": "^0.1.11",
+        "is-stream": "^1.0.1"
+      }
+    },
+    "node-forge": {
+      "version": "0.7.5",
+      "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz",
+      "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ=="
+    },
+    "node-int64": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
+      "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs="
+    },
+    "node-libs-browser": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
+      "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
+      "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.1",
+        "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": "^1.0.1"
+      },
+      "dependencies": {
+        "inherits": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+        },
+        "punycode": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+        },
+        "util": {
+          "version": "0.11.1",
+          "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
+          "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
+          "requires": {
+            "inherits": "2.0.3"
+          }
+        }
+      }
+    },
+    "node-modules-regexp": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
+      "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA="
+    },
+    "node-notifier": {
+      "version": "5.4.3",
+      "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz",
+      "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==",
+      "requires": {
+        "growly": "^1.3.0",
+        "is-wsl": "^1.1.0",
+        "semver": "^5.5.0",
+        "shellwords": "^0.1.1",
+        "which": "^1.3.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+        }
+      }
+    },
+    "node-releases": {
+      "version": "1.1.28",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.28.tgz",
+      "integrity": "sha512-AQw4emh6iSXnCpDiFe0phYcThiccmkNWMZnFZ+lDJjAP8J0m2fVd59duvUUyuTirQOhIAajTFkzG6FHCLBO59g==",
+      "requires": {
+        "semver": "^5.3.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+        }
+      }
+    },
+    "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==",
+      "requires": {
+        "hosted-git-info": "^2.1.4",
+        "resolve": "^1.10.0",
+        "semver": "2 || 3 || 4 || 5",
+        "validate-npm-package-license": "^3.0.1"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+        }
+      }
+    },
+    "normalize-path": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+      "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+      "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="
+    },
+    "normalize-url": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
+      "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg=="
+    },
+    "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=",
+      "requires": {
+        "path-key": "^2.0.0"
+      }
+    },
+    "nth-check": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
+      "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
+      "requires": {
+        "boolbase": "~1.0.0"
+      }
+    },
+    "num2fraction": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
+      "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4="
+    },
+    "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="
+    },
+    "nwsapi": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz",
+      "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw=="
+    },
+    "oauth-sign": {
+      "version": "0.9.0",
+      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+      "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
+    },
+    "object-assign": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+    },
+    "object-copy": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+      "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+      "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=",
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        }
+      }
+    },
+    "object-hash": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz",
+      "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA=="
+    },
+    "object-inspect": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz",
+      "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==",
+      "dev": true
+    },
+    "object-is": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz",
+      "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=",
+      "dev": true
+    },
+    "object-keys": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
+    },
+    "object-path": {
+      "version": "0.11.4",
+      "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz",
+      "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk="
+    },
+    "object-visit": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+      "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+      "requires": {
+        "isobject": "^3.0.0"
+      }
+    },
+    "object.assign": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
+      "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+      "requires": {
+        "define-properties": "^1.1.2",
+        "function-bind": "^1.1.1",
+        "has-symbols": "^1.0.0",
+        "object-keys": "^1.0.11"
+      }
+    },
+    "object.entries": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz",
+      "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==",
+      "requires": {
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.12.0",
+        "function-bind": "^1.1.1",
+        "has": "^1.0.3"
+      }
+    },
+    "object.fromentries": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.0.tgz",
+      "integrity": "sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA==",
+      "requires": {
+        "define-properties": "^1.1.2",
+        "es-abstract": "^1.11.0",
+        "function-bind": "^1.1.1",
+        "has": "^1.0.1"
+      }
+    },
+    "object.getownpropertydescriptors": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
+      "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
+      "requires": {
+        "define-properties": "^1.1.2",
+        "es-abstract": "^1.5.1"
+      }
+    },
+    "object.pick": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+      "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+      "requires": {
+        "isobject": "^3.0.1"
+      }
+    },
+    "object.values": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz",
+      "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==",
+      "requires": {
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.12.0",
+        "function-bind": "^1.1.1",
+        "has": "^1.0.3"
+      }
+    },
+    "obuf": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
+      "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg=="
+    },
+    "on-finished": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+      "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+      "requires": {
+        "ee-first": "1.1.1"
+      }
+    },
+    "on-headers": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+      "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
+    },
+    "once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+      "requires": {
+        "wrappy": "1"
+      }
+    },
+    "onetime": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
+      "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
+      "requires": {
+        "mimic-fn": "^2.1.0"
+      }
+    },
+    "open": {
+      "version": "6.4.0",
+      "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz",
+      "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==",
+      "requires": {
+        "is-wsl": "^1.1.0"
+      }
+    },
+    "opn": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz",
+      "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==",
+      "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=",
+      "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="
+        },
+        "wordwrap": {
+          "version": "0.0.3",
+          "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+          "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
+        }
+      }
+    },
+    "optimize-css-assets-webpack-plugin": {
+      "version": "5.0.3",
+      "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz",
+      "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==",
+      "requires": {
+        "cssnano": "^4.1.10",
+        "last-call-webpack-plugin": "^3.0.0"
+      }
+    },
+    "optionator": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+      "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+      "requires": {
+        "deep-is": "~0.1.3",
+        "fast-levenshtein": "~2.0.4",
+        "levn": "~0.3.0",
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2",
+        "wordwrap": "~1.0.0"
+      }
+    },
+    "original": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
+      "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==",
+      "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="
+    },
+    "os-locale": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
+      "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
+      "requires": {
+        "execa": "^1.0.0",
+        "lcid": "^2.0.0",
+        "mem": "^4.0.0"
+      }
+    },
+    "os-tmpdir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
+    },
+    "p-defer": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
+      "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww="
+    },
+    "p-each-series": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz",
+      "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=",
+      "requires": {
+        "p-reduce": "^1.0.0"
+      }
+    },
+    "p-finally": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
+    },
+    "p-is-promise": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz",
+      "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg=="
+    },
+    "p-limit": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz",
+      "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
+      "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": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+      "requires": {
+        "p-limit": "^2.0.0"
+      }
+    },
+    "p-map": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
+      "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA=="
+    },
+    "p-reduce": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz",
+      "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo="
+    },
+    "p-try": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+    },
+    "pako": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz",
+      "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw=="
+    },
+    "parallel-transform": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz",
+      "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=",
+      "requires": {
+        "cyclist": "~0.2.2",
+        "inherits": "^2.0.3",
+        "readable-stream": "^2.1.5"
+      }
+    },
+    "param-case": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
+      "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=",
+      "requires": {
+        "no-case": "^2.2.0"
+      }
+    },
+    "parent-module": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+      "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+      "requires": {
+        "callsites": "^3.0.0"
+      },
+      "dependencies": {
+        "callsites": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+          "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
+        }
+      }
+    },
+    "parse-asn1": {
+      "version": "5.1.4",
+      "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz",
+      "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==",
+      "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-json": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+      "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+      "requires": {
+        "error-ex": "^1.3.1",
+        "json-parse-better-errors": "^1.0.1"
+      }
+    },
+    "parse5": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz",
+      "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA=="
+    },
+    "parseurl": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
+      "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
+    },
+    "pascalcase": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+      "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
+    },
+    "path-browserify": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
+      "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ=="
+    },
+    "path-dirname": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
+      "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA="
+    },
+    "path-exists": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+    },
+    "path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+    },
+    "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="
+    },
+    "path-key": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+      "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
+    },
+    "path-parse": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+      "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
+    },
+    "path-to-regexp": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
+      "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
+      "requires": {
+        "isarray": "0.0.1"
+      }
+    },
+    "path-type": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+      "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+      "requires": {
+        "pify": "^3.0.0"
+      }
+    },
+    "pbkdf2": {
+      "version": "3.0.17",
+      "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
+      "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
+      "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"
+      }
+    },
+    "performance-now": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+      "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
+    },
+    "pify": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+      "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
+    },
+    "pinkie": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
+    },
+    "pinkie-promise": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+      "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+      "requires": {
+        "pinkie": "^2.0.0"
+      }
+    },
+    "pirates": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
+      "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
+      "requires": {
+        "node-modules-regexp": "^1.0.0"
+      }
+    },
+    "pkg-dir": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+      "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+      "requires": {
+        "find-up": "^3.0.0"
+      }
+    },
+    "pkg-up": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz",
+      "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=",
+      "requires": {
+        "find-up": "^2.1.0"
+      },
+      "dependencies": {
+        "find-up": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+          "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+          "requires": {
+            "locate-path": "^2.0.0"
+          }
+        },
+        "locate-path": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+          "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+          "requires": {
+            "p-locate": "^2.0.0",
+            "path-exists": "^3.0.0"
+          }
+        },
+        "p-limit": {
+          "version": "1.3.0",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+          "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+          "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=",
+          "requires": {
+            "p-limit": "^1.1.0"
+          }
+        },
+        "p-try": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+          "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M="
+        }
+      }
+    },
+    "pn": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",
+      "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA=="
+    },
+    "pnp-webpack-plugin": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.5.0.tgz",
+      "integrity": "sha512-jd9olUr9D7do+RN8Wspzhpxhgp1n6Vd0NtQ4SFkmIACZoEL1nkyAdW9Ygrinjec0vgDcWjscFQQ1gDW8rsfKTg==",
+      "requires": {
+        "ts-pnp": "^1.1.2"
+      }
+    },
+    "popper.js": {
+      "version": "1.15.0",
+      "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.15.0.tgz",
+      "integrity": "sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA=="
+    },
+    "portfinder": {
+      "version": "1.0.23",
+      "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.23.tgz",
+      "integrity": "sha512-B729mL/uLklxtxuiJKfQ84WPxNw5a7Yhx3geQZdcA4GjNjZSTSSMMWyoennMVnTWSmAR0lMdzWYN0JLnHrg1KQ==",
+      "requires": {
+        "async": "^1.5.2",
+        "debug": "^2.2.0",
+        "mkdirp": "0.5.x"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+        }
+      }
+    },
+    "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="
+    },
+    "postcss": {
+      "version": "7.0.17",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.17.tgz",
+      "integrity": "sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ==",
+      "requires": {
+        "chalk": "^2.4.2",
+        "source-map": "^0.6.1",
+        "supports-color": "^6.1.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=="
+        },
+        "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==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "postcss-attribute-case-insensitive": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.1.tgz",
+      "integrity": "sha512-L2YKB3vF4PetdTIthQVeT+7YiSzMoNMLLYxPXXppOOP7NoazEAy45sh2LvJ8leCQjfBcfkYQs8TtCcQjeZTp8A==",
+      "requires": {
+        "postcss": "^7.0.2",
+        "postcss-selector-parser": "^5.0.0"
+      },
+      "dependencies": {
+        "cssesc": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+          "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="
+        },
+        "postcss-selector-parser": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
+          "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+          "requires": {
+            "cssesc": "^2.0.0",
+            "indexes-of": "^1.0.1",
+            "uniq": "^1.0.1"
+          }
+        }
+      }
+    },
+    "postcss-browser-comments": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-2.0.0.tgz",
+      "integrity": "sha512-xGG0UvoxwBc4Yx4JX3gc0RuDl1kc4bVihCzzk6UC72YPfq5fu3c717Nu8Un3nvnq1BJ31gBnFXIG/OaUTnpHgA==",
+      "requires": {
+        "postcss": "^7.0.2"
+      }
+    },
+    "postcss-calc": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz",
+      "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==",
+      "requires": {
+        "css-unit-converter": "^1.1.1",
+        "postcss": "^7.0.5",
+        "postcss-selector-parser": "^5.0.0-rc.4",
+        "postcss-value-parser": "^3.3.1"
+      },
+      "dependencies": {
+        "cssesc": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+          "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="
+        },
+        "postcss-selector-parser": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
+          "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+          "requires": {
+            "cssesc": "^2.0.0",
+            "indexes-of": "^1.0.1",
+            "uniq": "^1.0.1"
+          }
+        }
+      }
+    },
+    "postcss-color-functional-notation": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz",
+      "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==",
+      "requires": {
+        "postcss": "^7.0.2",
+        "postcss-values-parser": "^2.0.0"
+      }
+    },
+    "postcss-color-gray": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz",
+      "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==",
+      "requires": {
+        "@csstools/convert-colors": "^1.4.0",
+        "postcss": "^7.0.5",
+        "postcss-values-parser": "^2.0.0"
+      }
+    },
+    "postcss-color-hex-alpha": {
+      "version": "5.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz",
+      "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==",
+      "requires": {
+        "postcss": "^7.0.14",
+        "postcss-values-parser": "^2.0.1"
+      }
+    },
+    "postcss-color-mod-function": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz",
+      "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==",
+      "requires": {
+        "@csstools/convert-colors": "^1.4.0",
+        "postcss": "^7.0.2",
+        "postcss-values-parser": "^2.0.0"
+      }
+    },
+    "postcss-color-rebeccapurple": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz",
+      "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==",
+      "requires": {
+        "postcss": "^7.0.2",
+        "postcss-values-parser": "^2.0.0"
+      }
+    },
+    "postcss-colormin": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz",
+      "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==",
+      "requires": {
+        "browserslist": "^4.0.0",
+        "color": "^3.0.0",
+        "has": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-convert-values": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz",
+      "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==",
+      "requires": {
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-custom-media": {
+      "version": "7.0.8",
+      "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz",
+      "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==",
+      "requires": {
+        "postcss": "^7.0.14"
+      }
+    },
+    "postcss-custom-properties": {
+      "version": "8.0.11",
+      "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz",
+      "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==",
+      "requires": {
+        "postcss": "^7.0.17",
+        "postcss-values-parser": "^2.0.1"
+      }
+    },
+    "postcss-custom-selectors": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz",
+      "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==",
+      "requires": {
+        "postcss": "^7.0.2",
+        "postcss-selector-parser": "^5.0.0-rc.3"
+      },
+      "dependencies": {
+        "cssesc": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+          "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="
+        },
+        "postcss-selector-parser": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
+          "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+          "requires": {
+            "cssesc": "^2.0.0",
+            "indexes-of": "^1.0.1",
+            "uniq": "^1.0.1"
+          }
+        }
+      }
+    },
+    "postcss-dir-pseudo-class": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz",
+      "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==",
+      "requires": {
+        "postcss": "^7.0.2",
+        "postcss-selector-parser": "^5.0.0-rc.3"
+      },
+      "dependencies": {
+        "cssesc": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+          "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="
+        },
+        "postcss-selector-parser": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
+          "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+          "requires": {
+            "cssesc": "^2.0.0",
+            "indexes-of": "^1.0.1",
+            "uniq": "^1.0.1"
+          }
+        }
+      }
+    },
+    "postcss-discard-comments": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz",
+      "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==",
+      "requires": {
+        "postcss": "^7.0.0"
+      }
+    },
+    "postcss-discard-duplicates": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz",
+      "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==",
+      "requires": {
+        "postcss": "^7.0.0"
+      }
+    },
+    "postcss-discard-empty": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz",
+      "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==",
+      "requires": {
+        "postcss": "^7.0.0"
+      }
+    },
+    "postcss-discard-overridden": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz",
+      "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==",
+      "requires": {
+        "postcss": "^7.0.0"
+      }
+    },
+    "postcss-double-position-gradients": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz",
+      "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==",
+      "requires": {
+        "postcss": "^7.0.5",
+        "postcss-values-parser": "^2.0.0"
+      }
+    },
+    "postcss-env-function": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz",
+      "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==",
+      "requires": {
+        "postcss": "^7.0.2",
+        "postcss-values-parser": "^2.0.0"
+      }
+    },
+    "postcss-flexbugs-fixes": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.1.0.tgz",
+      "integrity": "sha512-jr1LHxQvStNNAHlgco6PzY308zvLklh7SJVYuWUwyUQncofaAlD2l+P/gxKHOdqWKe7xJSkVLFF/2Tp+JqMSZA==",
+      "requires": {
+        "postcss": "^7.0.0"
+      }
+    },
+    "postcss-focus-visible": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz",
+      "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==",
+      "requires": {
+        "postcss": "^7.0.2"
+      }
+    },
+    "postcss-focus-within": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz",
+      "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==",
+      "requires": {
+        "postcss": "^7.0.2"
+      }
+    },
+    "postcss-font-variant": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz",
+      "integrity": "sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg==",
+      "requires": {
+        "postcss": "^7.0.2"
+      }
+    },
+    "postcss-gap-properties": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz",
+      "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==",
+      "requires": {
+        "postcss": "^7.0.2"
+      }
+    },
+    "postcss-image-set-function": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz",
+      "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==",
+      "requires": {
+        "postcss": "^7.0.2",
+        "postcss-values-parser": "^2.0.0"
+      }
+    },
+    "postcss-initial": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.1.tgz",
+      "integrity": "sha512-I2Sz83ZSHybMNh02xQDK609lZ1/QOyYeuizCjzEhlMgeV/HcDJapQiH4yTqLjZss0X6/6VvKFXUeObaHpJoINw==",
+      "requires": {
+        "lodash.template": "^4.5.0",
+        "postcss": "^7.0.2"
+      }
+    },
+    "postcss-lab-function": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz",
+      "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==",
+      "requires": {
+        "@csstools/convert-colors": "^1.4.0",
+        "postcss": "^7.0.2",
+        "postcss-values-parser": "^2.0.0"
+      }
+    },
+    "postcss-load-config": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz",
+      "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==",
+      "requires": {
+        "cosmiconfig": "^5.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": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==",
+      "requires": {
+        "loader-utils": "^1.1.0",
+        "postcss": "^7.0.0",
+        "postcss-load-config": "^2.0.0",
+        "schema-utils": "^1.0.0"
+      }
+    },
+    "postcss-logical": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz",
+      "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==",
+      "requires": {
+        "postcss": "^7.0.2"
+      }
+    },
+    "postcss-media-minmax": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz",
+      "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==",
+      "requires": {
+        "postcss": "^7.0.2"
+      }
+    },
+    "postcss-merge-longhand": {
+      "version": "4.0.11",
+      "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz",
+      "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==",
+      "requires": {
+        "css-color-names": "0.0.4",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0",
+        "stylehacks": "^4.0.0"
+      }
+    },
+    "postcss-merge-rules": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz",
+      "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==",
+      "requires": {
+        "browserslist": "^4.0.0",
+        "caniuse-api": "^3.0.0",
+        "cssnano-util-same-parent": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-selector-parser": "^3.0.0",
+        "vendors": "^1.0.0"
+      },
+      "dependencies": {
+        "postcss-selector-parser": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
+          "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+          "requires": {
+            "dot-prop": "^4.1.1",
+            "indexes-of": "^1.0.1",
+            "uniq": "^1.0.1"
+          }
+        }
+      }
+    },
+    "postcss-minify-font-values": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz",
+      "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==",
+      "requires": {
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-minify-gradients": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz",
+      "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==",
+      "requires": {
+        "cssnano-util-get-arguments": "^4.0.0",
+        "is-color-stop": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-minify-params": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz",
+      "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==",
+      "requires": {
+        "alphanum-sort": "^1.0.0",
+        "browserslist": "^4.0.0",
+        "cssnano-util-get-arguments": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0",
+        "uniqs": "^2.0.0"
+      }
+    },
+    "postcss-minify-selectors": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz",
+      "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==",
+      "requires": {
+        "alphanum-sort": "^1.0.0",
+        "has": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-selector-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss-selector-parser": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
+          "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+          "requires": {
+            "dot-prop": "^4.1.1",
+            "indexes-of": "^1.0.1",
+            "uniq": "^1.0.1"
+          }
+        }
+      }
+    },
+    "postcss-modules-extract-imports": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz",
+      "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==",
+      "requires": {
+        "postcss": "^7.0.5"
+      }
+    },
+    "postcss-modules-local-by-default": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz",
+      "integrity": "sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA==",
+      "requires": {
+        "postcss": "^7.0.6",
+        "postcss-selector-parser": "^6.0.0",
+        "postcss-value-parser": "^3.3.1"
+      }
+    },
+    "postcss-modules-scope": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.1.0.tgz",
+      "integrity": "sha512-91Rjps0JnmtUB0cujlc8KIKCsJXWjzuxGeT/+Q2i2HXKZ7nBUeF9YQTZZTNvHVoNYj1AthsjnGLtqDUE0Op79A==",
+      "requires": {
+        "postcss": "^7.0.6",
+        "postcss-selector-parser": "^6.0.0"
+      }
+    },
+    "postcss-modules-values": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz",
+      "integrity": "sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w==",
+      "requires": {
+        "icss-replace-symbols": "^1.1.0",
+        "postcss": "^7.0.6"
+      }
+    },
+    "postcss-nesting": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz",
+      "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==",
+      "requires": {
+        "postcss": "^7.0.2"
+      }
+    },
+    "postcss-normalize": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-7.0.1.tgz",
+      "integrity": "sha512-NOp1fwrG+6kVXWo7P9SizCHX6QvioxFD/hZcI2MLxPmVnFJFC0j0DDpIuNw2tUDeCFMni59gCVgeJ1/hYhj2OQ==",
+      "requires": {
+        "@csstools/normalize.css": "^9.0.1",
+        "browserslist": "^4.1.1",
+        "postcss": "^7.0.2",
+        "postcss-browser-comments": "^2.0.0"
+      }
+    },
+    "postcss-normalize-charset": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz",
+      "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==",
+      "requires": {
+        "postcss": "^7.0.0"
+      }
+    },
+    "postcss-normalize-display-values": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz",
+      "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==",
+      "requires": {
+        "cssnano-util-get-match": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-normalize-positions": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz",
+      "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==",
+      "requires": {
+        "cssnano-util-get-arguments": "^4.0.0",
+        "has": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-normalize-repeat-style": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz",
+      "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==",
+      "requires": {
+        "cssnano-util-get-arguments": "^4.0.0",
+        "cssnano-util-get-match": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-normalize-string": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz",
+      "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==",
+      "requires": {
+        "has": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-normalize-timing-functions": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz",
+      "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==",
+      "requires": {
+        "cssnano-util-get-match": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-normalize-unicode": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz",
+      "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==",
+      "requires": {
+        "browserslist": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-normalize-url": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz",
+      "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==",
+      "requires": {
+        "is-absolute-url": "^2.0.0",
+        "normalize-url": "^3.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-normalize-whitespace": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz",
+      "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==",
+      "requires": {
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-ordered-values": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz",
+      "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==",
+      "requires": {
+        "cssnano-util-get-arguments": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-overflow-shorthand": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz",
+      "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==",
+      "requires": {
+        "postcss": "^7.0.2"
+      }
+    },
+    "postcss-page-break": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz",
+      "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==",
+      "requires": {
+        "postcss": "^7.0.2"
+      }
+    },
+    "postcss-place": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz",
+      "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==",
+      "requires": {
+        "postcss": "^7.0.2",
+        "postcss-values-parser": "^2.0.0"
+      }
+    },
+    "postcss-preset-env": {
+      "version": "6.7.0",
+      "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz",
+      "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==",
+      "requires": {
+        "autoprefixer": "^9.6.1",
+        "browserslist": "^4.6.4",
+        "caniuse-lite": "^1.0.30000981",
+        "css-blank-pseudo": "^0.1.4",
+        "css-has-pseudo": "^0.10.0",
+        "css-prefers-color-scheme": "^3.1.1",
+        "cssdb": "^4.4.0",
+        "postcss": "^7.0.17",
+        "postcss-attribute-case-insensitive": "^4.0.1",
+        "postcss-color-functional-notation": "^2.0.1",
+        "postcss-color-gray": "^5.0.0",
+        "postcss-color-hex-alpha": "^5.0.3",
+        "postcss-color-mod-function": "^3.0.3",
+        "postcss-color-rebeccapurple": "^4.0.1",
+        "postcss-custom-media": "^7.0.8",
+        "postcss-custom-properties": "^8.0.11",
+        "postcss-custom-selectors": "^5.1.2",
+        "postcss-dir-pseudo-class": "^5.0.0",
+        "postcss-double-position-gradients": "^1.0.0",
+        "postcss-env-function": "^2.0.2",
+        "postcss-focus-visible": "^4.0.0",
+        "postcss-focus-within": "^3.0.0",
+        "postcss-font-variant": "^4.0.0",
+        "postcss-gap-properties": "^2.0.0",
+        "postcss-image-set-function": "^3.0.1",
+        "postcss-initial": "^3.0.0",
+        "postcss-lab-function": "^2.0.1",
+        "postcss-logical": "^3.0.0",
+        "postcss-media-minmax": "^4.0.0",
+        "postcss-nesting": "^7.0.0",
+        "postcss-overflow-shorthand": "^2.0.0",
+        "postcss-page-break": "^2.0.0",
+        "postcss-place": "^4.0.1",
+        "postcss-pseudo-class-any-link": "^6.0.0",
+        "postcss-replace-overflow-wrap": "^3.0.0",
+        "postcss-selector-matches": "^4.0.0",
+        "postcss-selector-not": "^4.0.0"
+      }
+    },
+    "postcss-pseudo-class-any-link": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz",
+      "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==",
+      "requires": {
+        "postcss": "^7.0.2",
+        "postcss-selector-parser": "^5.0.0-rc.3"
+      },
+      "dependencies": {
+        "cssesc": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz",
+          "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg=="
+        },
+        "postcss-selector-parser": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz",
+          "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==",
+          "requires": {
+            "cssesc": "^2.0.0",
+            "indexes-of": "^1.0.1",
+            "uniq": "^1.0.1"
+          }
+        }
+      }
+    },
+    "postcss-reduce-initial": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz",
+      "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==",
+      "requires": {
+        "browserslist": "^4.0.0",
+        "caniuse-api": "^3.0.0",
+        "has": "^1.0.0",
+        "postcss": "^7.0.0"
+      }
+    },
+    "postcss-reduce-transforms": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz",
+      "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==",
+      "requires": {
+        "cssnano-util-get-match": "^4.0.0",
+        "has": "^1.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0"
+      }
+    },
+    "postcss-replace-overflow-wrap": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz",
+      "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==",
+      "requires": {
+        "postcss": "^7.0.2"
+      }
+    },
+    "postcss-safe-parser": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz",
+      "integrity": "sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ==",
+      "requires": {
+        "postcss": "^7.0.0"
+      }
+    },
+    "postcss-selector-matches": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz",
+      "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==",
+      "requires": {
+        "balanced-match": "^1.0.0",
+        "postcss": "^7.0.2"
+      }
+    },
+    "postcss-selector-not": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz",
+      "integrity": "sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ==",
+      "requires": {
+        "balanced-match": "^1.0.0",
+        "postcss": "^7.0.2"
+      }
+    },
+    "postcss-selector-parser": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz",
+      "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==",
+      "requires": {
+        "cssesc": "^3.0.0",
+        "indexes-of": "^1.0.1",
+        "uniq": "^1.0.1"
+      }
+    },
+    "postcss-svgo": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz",
+      "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==",
+      "requires": {
+        "is-svg": "^3.0.0",
+        "postcss": "^7.0.0",
+        "postcss-value-parser": "^3.0.0",
+        "svgo": "^1.0.0"
+      }
+    },
+    "postcss-unique-selectors": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz",
+      "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==",
+      "requires": {
+        "alphanum-sort": "^1.0.0",
+        "postcss": "^7.0.0",
+        "uniqs": "^2.0.0"
+      }
+    },
+    "postcss-value-parser": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+      "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ=="
+    },
+    "postcss-values-parser": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz",
+      "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==",
+      "requires": {
+        "flatten": "^1.0.2",
+        "indexes-of": "^1.0.1",
+        "uniq": "^1.0.1"
+      }
+    },
+    "prelude-ls": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+      "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
+    },
+    "pretty-bytes": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.3.0.tgz",
+      "integrity": "sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg=="
+    },
+    "pretty-error": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz",
+      "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=",
+      "requires": {
+        "renderkid": "^2.0.1",
+        "utila": "~0.4"
+      }
+    },
+    "pretty-format": {
+      "version": "24.9.0",
+      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz",
+      "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==",
+      "requires": {
+        "@jest/types": "^24.9.0",
+        "ansi-regex": "^4.0.0",
+        "ansi-styles": "^3.2.0",
+        "react-is": "^16.8.4"
+      }
+    },
+    "private": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+      "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg=="
+    },
+    "process": {
+      "version": "0.11.10",
+      "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
+      "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI="
+    },
+    "process-nextick-args": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+    },
+    "progress": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+      "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="
+    },
+    "promise": {
+      "version": "7.3.1",
+      "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
+      "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
+      "requires": {
+        "asap": "~2.0.3"
+      }
+    },
+    "promise-inflight": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+      "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM="
+    },
+    "prompts": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.2.1.tgz",
+      "integrity": "sha512-VObPvJiWPhpZI6C5m60XOzTfnYg/xc/an+r9VYymj9WJW3B/DIH+REzjpAACPf8brwPeP+7vz3bIim3S+AaMjw==",
+      "requires": {
+        "kleur": "^3.0.3",
+        "sisteransi": "^1.0.3"
+      }
+    },
+    "prop-types": {
+      "version": "15.7.2",
+      "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
+      "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
+      "requires": {
+        "loose-envify": "^1.4.0",
+        "object-assign": "^4.1.1",
+        "react-is": "^16.8.1"
+      }
+    },
+    "prop-types-exact": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.0.tgz",
+      "integrity": "sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==",
+      "dev": true,
+      "requires": {
+        "has": "^1.0.3",
+        "object.assign": "^4.1.0",
+        "reflect.ownkeys": "^0.2.0"
+      }
+    },
+    "prop-types-extra": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.0.tgz",
+      "integrity": "sha512-QFyuDxvMipmIVKD2TwxLVPzMnO4e5oOf1vr3tJIomL8E7d0lr6phTHd5nkPhFIzTD1idBLLEPeylL9g+rrTzRg==",
+      "requires": {
+        "react-is": "^16.3.2",
+        "warning": "^3.0.0"
+      },
+      "dependencies": {
+        "warning": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
+          "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=",
+          "requires": {
+            "loose-envify": "^1.0.0"
+          }
+        }
+      }
+    },
+    "proxy-addr": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
+      "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==",
+      "requires": {
+        "forwarded": "~0.1.2",
+        "ipaddr.js": "1.9.0"
+      }
+    },
+    "prr": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
+      "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
+    },
+    "psl": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz",
+      "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag=="
+    },
+    "public-encrypt": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
+      "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+      "requires": {
+        "bn.js": "^4.1.0",
+        "browserify-rsa": "^4.0.0",
+        "create-hash": "^1.1.0",
+        "parse-asn1": "^5.0.0",
+        "randombytes": "^2.0.1",
+        "safe-buffer": "^5.1.2"
+      }
+    },
+    "pump": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+      "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+      "requires": {
+        "end-of-stream": "^1.1.0",
+        "once": "^1.3.1"
+      }
+    },
+    "pumpify": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
+      "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
+      "requires": {
+        "duplexify": "^3.6.0",
+        "inherits": "^2.0.3",
+        "pump": "^2.0.0"
+      },
+      "dependencies": {
+        "pump": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
+          "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
+          "requires": {
+            "end-of-stream": "^1.1.0",
+            "once": "^1.3.1"
+          }
+        }
+      }
+    },
+    "punycode": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+      "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+    },
+    "q": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+      "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc="
+    },
+    "qs": {
+      "version": "6.5.2",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+      "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
+    },
+    "querystring": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
+      "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA="
+    },
+    "querystring-es3": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
+      "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
+    },
+    "querystringify": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz",
+      "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA=="
+    },
+    "raf": {
+      "version": "3.4.1",
+      "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
+      "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
+      "requires": {
+        "performance-now": "^2.1.0"
+      }
+    },
+    "railroad-diagrams": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz",
+      "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=",
+      "dev": true
+    },
+    "randexp": {
+      "version": "0.4.6",
+      "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz",
+      "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==",
+      "dev": true,
+      "requires": {
+        "discontinuous-range": "1.0.0",
+        "ret": "~0.1.10"
+      }
+    },
+    "randombytes": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+      "requires": {
+        "safe-buffer": "^5.1.0"
+      }
+    },
+    "randomfill": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
+      "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+      "requires": {
+        "randombytes": "^2.0.5",
+        "safe-buffer": "^5.1.0"
+      }
+    },
+    "range-parser": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
+      "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
+    },
+    "raw-body": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
+      "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
+      "requires": {
+        "bytes": "3.1.0",
+        "http-errors": "1.7.2",
+        "iconv-lite": "0.4.24",
+        "unpipe": "1.0.0"
+      },
+      "dependencies": {
+        "bytes": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
+          "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
+        }
+      }
+    },
+    "react": {
+      "version": "16.9.0",
+      "resolved": "https://registry.npmjs.org/react/-/react-16.9.0.tgz",
+      "integrity": "sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w==",
+      "requires": {
+        "loose-envify": "^1.1.0",
+        "object-assign": "^4.1.1",
+        "prop-types": "^15.6.2"
+      }
+    },
+    "react-app-polyfill": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-1.0.2.tgz",
+      "integrity": "sha512-yZcpLnIr0FOIzrOOz9JC37NWAWEuCaQWmYn9EWjEzlCW4cOmA5MkT5L3iP8QuUeFnoqVCTJgjIWYbXEJgNXhGA==",
+      "requires": {
+        "core-js": "3.1.4",
+        "object-assign": "4.1.1",
+        "promise": "8.0.3",
+        "raf": "3.4.1",
+        "regenerator-runtime": "0.13.3",
+        "whatwg-fetch": "3.0.0"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "3.1.4",
+          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.1.4.tgz",
+          "integrity": "sha512-YNZN8lt82XIMLnLirj9MhKDFZHalwzzrL9YLt6eb0T5D0EDl4IQ90IGkua8mHbnxNrkj1d8hbdizMc0Qmg1WnQ=="
+        },
+        "promise": {
+          "version": "8.0.3",
+          "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.3.tgz",
+          "integrity": "sha512-HeRDUL1RJiLhyA0/grn+PTShlBAcLuh/1BJGtrvjwbvRDCTLLMEz9rOGCV+R3vHY4MixIuoMEd9Yq/XvsTPcjw==",
+          "requires": {
+            "asap": "~2.0.6"
+          }
+        }
+      }
+    },
+    "react-bootstrap": {
+      "version": "1.0.0-beta.12",
+      "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-1.0.0-beta.12.tgz",
+      "integrity": "sha512-qBEAthAzqM+OTS2h5ZCfV5/yZUadQcMlaep4iPyPqsu92JzdcznhSDjw6b+asiepsyQgiS33t8OPeLLRiIDh9Q==",
+      "requires": {
+        "@babel/runtime": "^7.4.2",
+        "@react-bootstrap/react-popper": "1.2.1",
+        "@restart/context": "^2.1.4",
+        "@restart/hooks": "^0.3.11",
+        "classnames": "^2.2.6",
+        "dom-helpers": "^3.4.0",
+        "invariant": "^2.2.4",
+        "keycode": "^2.2.0",
+        "popper.js": "^1.14.7",
+        "prop-types": "^15.7.2",
+        "prop-types-extra": "^1.1.0",
+        "react-overlays": "^1.2.0",
+        "react-transition-group": "^4.0.0",
+        "uncontrollable": "^7.0.0",
+        "warning": "^4.0.3"
+      }
+    },
+    "react-context-toolbox": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/react-context-toolbox/-/react-context-toolbox-2.0.2.tgz",
+      "integrity": "sha512-tY4j0imkYC3n5ZlYSgFkaw7fmlCp3IoQQ6DxpqeNHzcD0hf+6V+/HeJxviLUZ1Rv1Yn3N3xyO2EhkkZwHn0m1A=="
+    },
+    "react-dev-utils": {
+      "version": "9.0.3",
+      "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-9.0.3.tgz",
+      "integrity": "sha512-OyInhcwsvycQ3Zr2pQN+HV4gtRXrky5mJXIy4HnqrWa+mI624xfYfqGuC9dYbxp4Qq3YZzP8GSGQjv0AgNU15w==",
+      "requires": {
+        "@babel/code-frame": "7.5.5",
+        "address": "1.1.0",
+        "browserslist": "4.6.6",
+        "chalk": "2.4.2",
+        "cross-spawn": "6.0.5",
+        "detect-port-alt": "1.1.6",
+        "escape-string-regexp": "1.0.5",
+        "filesize": "3.6.1",
+        "find-up": "3.0.0",
+        "fork-ts-checker-webpack-plugin": "1.5.0",
+        "global-modules": "2.0.0",
+        "globby": "8.0.2",
+        "gzip-size": "5.1.1",
+        "immer": "1.10.0",
+        "inquirer": "6.5.0",
+        "is-root": "2.1.0",
+        "loader-utils": "1.2.3",
+        "open": "^6.3.0",
+        "pkg-up": "2.0.0",
+        "react-error-overlay": "^6.0.1",
+        "recursive-readdir": "2.2.2",
+        "shell-quote": "1.6.1",
+        "sockjs-client": "1.3.0",
+        "strip-ansi": "5.2.0",
+        "text-table": "0.2.0"
+      },
+      "dependencies": {
+        "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=="
+        },
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+        },
+        "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=",
+          "requires": {
+            "restore-cursor": "^2.0.0"
+          }
+        },
+        "figures": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+          "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+          "requires": {
+            "escape-string-regexp": "^1.0.5"
+          }
+        },
+        "inquirer": {
+          "version": "6.5.0",
+          "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.0.tgz",
+          "integrity": "sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA==",
+          "requires": {
+            "ansi-escapes": "^3.2.0",
+            "chalk": "^2.4.2",
+            "cli-cursor": "^2.1.0",
+            "cli-width": "^2.0.0",
+            "external-editor": "^3.0.3",
+            "figures": "^2.0.0",
+            "lodash": "^4.17.12",
+            "mute-stream": "0.0.7",
+            "run-async": "^2.2.0",
+            "rxjs": "^6.4.0",
+            "string-width": "^2.1.0",
+            "strip-ansi": "^5.1.0",
+            "through": "^2.3.6"
+          }
+        },
+        "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="
+        },
+        "mimic-fn": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+          "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="
+        },
+        "mute-stream": {
+          "version": "0.0.7",
+          "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+          "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s="
+        },
+        "onetime": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+          "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+          "requires": {
+            "mimic-fn": "^1.0.0"
+          }
+        },
+        "restore-cursor": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+          "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+          "requires": {
+            "onetime": "^2.0.0",
+            "signal-exit": "^3.0.2"
+          }
+        },
+        "string-width": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+          "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+          "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=",
+              "requires": {
+                "ansi-regex": "^3.0.0"
+              }
+            }
+          }
+        }
+      }
+    },
+    "react-dom": {
+      "version": "16.9.0",
+      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.9.0.tgz",
+      "integrity": "sha512-YFT2rxO9hM70ewk9jq0y6sQk8cL02xm4+IzYBz75CQGlClQQ1Bxq0nhHF6OtSbit+AIahujJgb/CPRibFkMNJQ==",
+      "requires": {
+        "loose-envify": "^1.1.0",
+        "object-assign": "^4.1.1",
+        "prop-types": "^15.6.2",
+        "scheduler": "^0.15.0"
+      }
+    },
+    "react-error-overlay": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.1.tgz",
+      "integrity": "sha512-V9yoTr6MeZXPPd4nV/05eCBvGH9cGzc52FN8fs0O0TVQ3HYYf1n7EgZVtHbldRq5xU9zEzoXIITjYNIfxDDdUw=="
+    },
+    "react-input-autosize": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/react-input-autosize/-/react-input-autosize-2.2.1.tgz",
+      "integrity": "sha512-3+K4CD13iE4lQQ2WlF8PuV5htfmTRLH6MDnfndHM6LuBRszuXnuyIfE7nhSKt8AzRBZ50bu0sAhkNMeS5pxQQA==",
+      "requires": {
+        "prop-types": "^15.5.8"
+      }
+    },
+    "react-is": {
+      "version": "16.9.0",
+      "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.9.0.tgz",
+      "integrity": "sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw=="
+    },
+    "react-lifecycles-compat": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
+      "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
+    },
+    "react-overlays": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-1.2.0.tgz",
+      "integrity": "sha512-i/FCV8wR6aRaI+Kz/dpJhOdyx+ah2tN1RhT9InPrexyC4uzf3N4bNayFTGtUeQVacj57j1Mqh1CwV60/5153Iw==",
+      "requires": {
+        "classnames": "^2.2.6",
+        "dom-helpers": "^3.4.0",
+        "prop-types": "^15.6.2",
+        "prop-types-extra": "^1.1.0",
+        "react-context-toolbox": "^2.0.2",
+        "react-popper": "^1.3.2",
+        "uncontrollable": "^6.0.0",
+        "warning": "^4.0.2"
+      },
+      "dependencies": {
+        "uncontrollable": {
+          "version": "6.2.3",
+          "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-6.2.3.tgz",
+          "integrity": "sha512-VgOAoBU2ptCL2bfTG2Mra0I8i1u6Aq84AFonD5tmCAYSfs3hWvr2Rlw0q2ntoxXTHjcQOmZOh3FKaN+UZVyREQ==",
+          "requires": {
+            "@babel/runtime": "^7.4.5",
+            "invariant": "^2.2.4"
+          }
+        }
+      }
+    },
+    "react-popper": {
+      "version": "1.3.4",
+      "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-1.3.4.tgz",
+      "integrity": "sha512-9AcQB29V+WrBKk6X7p0eojd1f25/oJajVdMZkywIoAV6Ag7hzE1Mhyeup2Q1QnvFRtGQFQvtqfhlEoDAPfKAVA==",
+      "requires": {
+        "@babel/runtime": "^7.1.2",
+        "create-react-context": "^0.3.0",
+        "popper.js": "^1.14.4",
+        "prop-types": "^15.6.1",
+        "typed-styles": "^0.0.7",
+        "warning": "^4.0.2"
+      },
+      "dependencies": {
+        "create-react-context": {
+          "version": "0.3.0",
+          "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.3.0.tgz",
+          "integrity": "sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw==",
+          "requires": {
+            "gud": "^1.0.0",
+            "warning": "^4.0.3"
+          }
+        },
+        "typed-styles": {
+          "version": "0.0.7",
+          "resolved": "https://registry.npmjs.org/typed-styles/-/typed-styles-0.0.7.tgz",
+          "integrity": "sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q=="
+        }
+      }
+    },
+    "react-router": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.0.1.tgz",
+      "integrity": "sha512-EM7suCPNKb1NxcTZ2LEOWFtQBQRQXecLxVpdsP4DW4PbbqYWeRiLyV/Tt1SdCrvT2jcyXAXmVTmzvSzrPR63Bg==",
+      "requires": {
+        "@babel/runtime": "^7.1.2",
+        "history": "^4.9.0",
+        "hoist-non-react-statics": "^3.1.0",
+        "loose-envify": "^1.3.1",
+        "mini-create-react-context": "^0.3.0",
+        "path-to-regexp": "^1.7.0",
+        "prop-types": "^15.6.2",
+        "react-is": "^16.6.0",
+        "tiny-invariant": "^1.0.2",
+        "tiny-warning": "^1.0.0"
+      }
+    },
+    "react-router-dom": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.0.1.tgz",
+      "integrity": "sha512-zaVHSy7NN0G91/Bz9GD4owex5+eop+KvgbxXsP/O+iW1/Ln+BrJ8QiIR5a6xNPtrdTvLkxqlDClx13QO1uB8CA==",
+      "requires": {
+        "@babel/runtime": "^7.1.2",
+        "history": "^4.9.0",
+        "loose-envify": "^1.3.1",
+        "prop-types": "^15.6.2",
+        "react-router": "5.0.1",
+        "tiny-invariant": "^1.0.2",
+        "tiny-warning": "^1.0.0"
+      }
+    },
+    "react-scripts": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.1.1.tgz",
+      "integrity": "sha512-dbjTG9vJC61OI62hIswQYg5xHvwlxDTH6QXz6ICEuA5AqkFQWk1LKl76sk8fVL2WsyumbBc4FErALwKcEV2vNA==",
+      "requires": {
+        "@babel/core": "7.5.5",
+        "@svgr/webpack": "4.3.2",
+        "@typescript-eslint/eslint-plugin": "1.13.0",
+        "@typescript-eslint/parser": "1.13.0",
+        "babel-eslint": "10.0.2",
+        "babel-jest": "^24.8.0",
+        "babel-loader": "8.0.6",
+        "babel-plugin-named-asset-import": "^0.3.3",
+        "babel-preset-react-app": "^9.0.1",
+        "camelcase": "^5.2.0",
+        "case-sensitive-paths-webpack-plugin": "2.2.0",
+        "css-loader": "2.1.1",
+        "dotenv": "6.2.0",
+        "dotenv-expand": "4.2.0",
+        "eslint": "^6.1.0",
+        "eslint-config-react-app": "^5.0.1",
+        "eslint-loader": "2.2.1",
+        "eslint-plugin-flowtype": "3.13.0",
+        "eslint-plugin-import": "2.18.2",
+        "eslint-plugin-jsx-a11y": "6.2.3",
+        "eslint-plugin-react": "7.14.3",
+        "eslint-plugin-react-hooks": "^1.6.1",
+        "file-loader": "3.0.1",
+        "fs-extra": "7.0.1",
+        "fsevents": "2.0.7",
+        "html-webpack-plugin": "4.0.0-beta.5",
+        "identity-obj-proxy": "3.0.0",
+        "is-wsl": "^1.1.0",
+        "jest": "24.8.0",
+        "jest-environment-jsdom-fourteen": "0.1.0",
+        "jest-resolve": "24.8.0",
+        "jest-watch-typeahead": "0.3.1",
+        "mini-css-extract-plugin": "0.5.0",
+        "optimize-css-assets-webpack-plugin": "5.0.3",
+        "pnp-webpack-plugin": "1.5.0",
+        "postcss-flexbugs-fixes": "4.1.0",
+        "postcss-loader": "3.0.0",
+        "postcss-normalize": "7.0.1",
+        "postcss-preset-env": "6.7.0",
+        "postcss-safe-parser": "4.0.1",
+        "react-app-polyfill": "^1.0.2",
+        "react-dev-utils": "^9.0.3",
+        "resolve": "1.12.0",
+        "resolve-url-loader": "3.1.0",
+        "sass-loader": "7.2.0",
+        "semver": "6.3.0",
+        "style-loader": "1.0.0",
+        "terser-webpack-plugin": "1.4.1",
+        "ts-pnp": "1.1.2",
+        "url-loader": "2.1.0",
+        "webpack": "4.39.1",
+        "webpack-dev-server": "3.2.1",
+        "webpack-manifest-plugin": "2.0.4",
+        "workbox-webpack-plugin": "4.3.1"
+      },
+      "dependencies": {
+        "resolve": {
+          "version": "1.12.0",
+          "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
+          "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
+          "requires": {
+            "path-parse": "^1.0.6"
+          }
+        }
+      }
+    },
+    "react-select": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/react-select/-/react-select-3.0.4.tgz",
+      "integrity": "sha512-fbVISKa/lSUlLsltuatfUiKcWCNvdLXxFFyrzVQCBUsjxJZH/m7UMPdw/ywmRixAmwXAP++MdbNNZypOsiDEfA==",
+      "requires": {
+        "@babel/runtime": "^7.4.4",
+        "@emotion/cache": "^10.0.9",
+        "@emotion/core": "^10.0.9",
+        "@emotion/css": "^10.0.9",
+        "classnames": "^2.2.5",
+        "memoize-one": "^5.0.0",
+        "prop-types": "^15.6.0",
+        "raf": "^3.4.0",
+        "react-input-autosize": "^2.2.1",
+        "react-transition-group": "^2.2.1"
+      },
+      "dependencies": {
+        "react-transition-group": {
+          "version": "2.9.0",
+          "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz",
+          "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==",
+          "requires": {
+            "dom-helpers": "^3.4.0",
+            "loose-envify": "^1.4.0",
+            "prop-types": "^15.6.2",
+            "react-lifecycles-compat": "^3.0.4"
+          }
+        }
+      }
+    },
+    "react-test-renderer": {
+      "version": "16.9.0",
+      "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.9.0.tgz",
+      "integrity": "sha512-R62stB73qZyhrJo7wmCW9jgl/07ai+YzvouvCXIJLBkRlRqLx4j9RqcLEAfNfU3OxTGucqR2Whmn3/Aad6L3hQ==",
+      "dev": true,
+      "requires": {
+        "object-assign": "^4.1.1",
+        "prop-types": "^15.6.2",
+        "react-is": "^16.9.0",
+        "scheduler": "^0.15.0"
+      },
+      "dependencies": {
+        "scheduler": {
+          "version": "0.15.0",
+          "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz",
+          "integrity": "sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==",
+          "dev": true,
+          "requires": {
+            "loose-envify": "^1.1.0",
+            "object-assign": "^4.1.1"
+          }
+        }
+      }
+    },
+    "react-transition-group": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.2.2.tgz",
+      "integrity": "sha512-uP0tjqewtvjb7kGZFpZYPoD/NlVZmIgts9eTt1w35pAaEApPxQGv94lD3VkqyXf2aMqrSGwhs6EV/DLaoKbLSw==",
+      "requires": {
+        "@babel/runtime": "^7.4.5",
+        "dom-helpers": "^3.4.0",
+        "loose-envify": "^1.4.0",
+        "prop-types": "^15.6.2"
+      }
+    },
+    "read-pkg": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+      "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+      "requires": {
+        "load-json-file": "^4.0.0",
+        "normalize-package-data": "^2.3.2",
+        "path-type": "^3.0.0"
+      }
+    },
+    "read-pkg-up": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz",
+      "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==",
+      "requires": {
+        "find-up": "^3.0.0",
+        "read-pkg": "^3.0.0"
+      }
+    },
+    "readable-stream": {
+      "version": "2.3.6",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+      "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+      "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"
+      },
+      "dependencies": {
+        "isarray": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+        }
+      }
+    },
+    "readdirp": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
+      "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+      "requires": {
+        "graceful-fs": "^4.1.11",
+        "micromatch": "^3.1.10",
+        "readable-stream": "^2.0.2"
+      }
+    },
+    "realpath-native": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz",
+      "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==",
+      "requires": {
+        "util.promisify": "^1.0.0"
+      }
+    },
+    "recursive-readdir": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz",
+      "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==",
+      "requires": {
+        "minimatch": "3.0.4"
+      }
+    },
+    "reflect.ownkeys": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz",
+      "integrity": "sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=",
+      "dev": true
+    },
+    "regenerate": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
+      "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg=="
+    },
+    "regenerate-unicode-properties": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz",
+      "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==",
+      "requires": {
+        "regenerate": "^1.4.0"
+      }
+    },
+    "regenerator-runtime": {
+      "version": "0.13.3",
+      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",
+      "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw=="
+    },
+    "regenerator-transform": {
+      "version": "0.14.1",
+      "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz",
+      "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==",
+      "requires": {
+        "private": "^0.1.6"
+      }
+    },
+    "regex-not": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+      "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+      "requires": {
+        "extend-shallow": "^3.0.2",
+        "safe-regex": "^1.1.0"
+      }
+    },
+    "regex-parser": {
+      "version": "2.2.10",
+      "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz",
+      "integrity": "sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA=="
+    },
+    "regexp-tree": {
+      "version": "0.1.11",
+      "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.11.tgz",
+      "integrity": "sha512-7/l/DgapVVDzZobwMCCgMlqiqyLFJ0cduo/j+3BcDJIB+yJdsYCfKuI3l/04NV+H/rfNRdPIDbXNZHM9XvQatg=="
+    },
+    "regexpp": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
+      "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw=="
+    },
+    "regexpu-core": {
+      "version": "4.5.5",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.5.tgz",
+      "integrity": "sha512-FpI67+ky9J+cDizQUJlIlNZFKual/lUkFr1AG6zOCpwZ9cLrg8UUVakyUQJD7fCDIe9Z2nwTQJNPyonatNmDFQ==",
+      "requires": {
+        "regenerate": "^1.4.0",
+        "regenerate-unicode-properties": "^8.1.0",
+        "regjsgen": "^0.5.0",
+        "regjsparser": "^0.6.0",
+        "unicode-match-property-ecmascript": "^1.0.4",
+        "unicode-match-property-value-ecmascript": "^1.1.0"
+      }
+    },
+    "regjsgen": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz",
+      "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA=="
+    },
+    "regjsparser": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz",
+      "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==",
+      "requires": {
+        "jsesc": "~0.5.0"
+      },
+      "dependencies": {
+        "jsesc": {
+          "version": "0.5.0",
+          "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+          "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
+        }
+      }
+    },
+    "relateurl": {
+      "version": "0.2.7",
+      "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
+      "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk="
+    },
+    "remove-trailing-separator": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
+      "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
+    },
+    "renderkid": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz",
+      "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==",
+      "requires": {
+        "css-select": "^1.1.0",
+        "dom-converter": "^0.2",
+        "htmlparser2": "^3.3.0",
+        "strip-ansi": "^3.0.0",
+        "utila": "^0.4.0"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+        },
+        "css-select": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+          "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+          "requires": {
+            "boolbase": "~1.0.0",
+            "css-what": "2.1",
+            "domutils": "1.5.1",
+            "nth-check": "~1.0.1"
+          }
+        },
+        "domutils": {
+          "version": "1.5.1",
+          "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+          "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+          "requires": {
+            "dom-serializer": "0",
+            "domelementtype": "1"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        }
+      }
+    },
+    "repeat-element": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+      "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g=="
+    },
+    "repeat-string": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+    },
+    "request": {
+      "version": "2.88.0",
+      "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
+      "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
+      "requires": {
+        "aws-sign2": "~0.7.0",
+        "aws4": "^1.8.0",
+        "caseless": "~0.12.0",
+        "combined-stream": "~1.0.6",
+        "extend": "~3.0.2",
+        "forever-agent": "~0.6.1",
+        "form-data": "~2.3.2",
+        "har-validator": "~5.1.0",
+        "http-signature": "~1.2.0",
+        "is-typedarray": "~1.0.0",
+        "isstream": "~0.1.2",
+        "json-stringify-safe": "~5.0.1",
+        "mime-types": "~2.1.19",
+        "oauth-sign": "~0.9.0",
+        "performance-now": "^2.1.0",
+        "qs": "~6.5.2",
+        "safe-buffer": "^5.1.2",
+        "tough-cookie": "~2.4.3",
+        "tunnel-agent": "^0.6.0",
+        "uuid": "^3.3.2"
+      },
+      "dependencies": {
+        "punycode": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
+        },
+        "tough-cookie": {
+          "version": "2.4.3",
+          "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
+          "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
+          "requires": {
+            "psl": "^1.1.24",
+            "punycode": "^1.4.1"
+          }
+        }
+      }
+    },
+    "request-promise-core": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz",
+      "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==",
+      "requires": {
+        "lodash": "^4.17.11"
+      }
+    },
+    "request-promise-native": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz",
+      "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==",
+      "requires": {
+        "request-promise-core": "1.1.2",
+        "stealthy-require": "^1.1.1",
+        "tough-cookie": "^2.3.3"
+      }
+    },
+    "require-directory": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
+    },
+    "require-main-filename": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+      "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
+    },
+    "requires-port": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+      "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
+    },
+    "resolve": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz",
+      "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==",
+      "requires": {
+        "path-parse": "^1.0.6"
+      }
+    },
+    "resolve-cwd": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz",
+      "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=",
+      "requires": {
+        "resolve-from": "^3.0.0"
+      }
+    },
+    "resolve-from": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+      "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g="
+    },
+    "resolve-pathname": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz",
+      "integrity": "sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg=="
+    },
+    "resolve-url": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+      "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
+    },
+    "resolve-url-loader": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.0.tgz",
+      "integrity": "sha512-2QcrA+2QgVqsMJ1Hn5NnJXIGCX1clQ1F6QJTqOeiaDw9ACo1G2k+8/shq3mtqne03HOFyskAClqfxKyFBriXZg==",
+      "requires": {
+        "adjust-sourcemap-loader": "2.0.0",
+        "camelcase": "5.0.0",
+        "compose-function": "3.0.3",
+        "convert-source-map": "1.6.0",
+        "es6-iterator": "2.0.3",
+        "loader-utils": "1.2.3",
+        "postcss": "7.0.14",
+        "rework": "1.0.1",
+        "rework-visit": "1.0.0",
+        "source-map": "0.6.1"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz",
+          "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA=="
+        },
+        "postcss": {
+          "version": "7.0.14",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz",
+          "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==",
+          "requires": {
+            "chalk": "^2.4.2",
+            "source-map": "^0.6.1",
+            "supports-color": "^6.1.0"
+          }
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        },
+        "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==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        }
+      }
+    },
+    "restore-cursor": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+      "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+      "requires": {
+        "onetime": "^5.1.0",
+        "signal-exit": "^3.0.2"
+      }
+    },
+    "ret": {
+      "version": "0.1.15",
+      "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+      "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
+    },
+    "rework": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz",
+      "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=",
+      "requires": {
+        "convert-source-map": "^0.3.3",
+        "css": "^2.0.0"
+      },
+      "dependencies": {
+        "convert-source-map": {
+          "version": "0.3.5",
+          "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz",
+          "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA="
+        }
+      }
+    },
+    "rework-visit": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz",
+      "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo="
+    },
+    "rgb-regex": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz",
+      "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE="
+    },
+    "rgba-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz",
+      "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM="
+    },
+    "rimraf": {
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+      "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+      "requires": {
+        "glob": "^7.1.3"
+      }
+    },
+    "ripemd160": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
+      "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+      "requires": {
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1"
+      }
+    },
+    "rst-selector-parser": {
+      "version": "2.2.3",
+      "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz",
+      "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=",
+      "dev": true,
+      "requires": {
+        "lodash.flattendeep": "^4.4.0",
+        "nearley": "^2.7.10"
+      }
+    },
+    "rsvp": {
+      "version": "4.8.5",
+      "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz",
+      "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA=="
+    },
+    "run-async": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+      "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+      "requires": {
+        "is-promise": "^2.1.0"
+      }
+    },
+    "run-queue": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
+      "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
+      "requires": {
+        "aproba": "^1.1.1"
+      }
+    },
+    "rxjs": {
+      "version": "6.5.2",
+      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz",
+      "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==",
+      "requires": {
+        "tslib": "^1.9.0"
+      }
+    },
+    "safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+    },
+    "safe-regex": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+      "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+      "requires": {
+        "ret": "~0.1.10"
+      }
+    },
+    "safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+    },
+    "sane": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz",
+      "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==",
+      "requires": {
+        "@cnakazawa/watch": "^1.0.3",
+        "anymatch": "^2.0.0",
+        "capture-exit": "^2.0.0",
+        "exec-sh": "^0.3.2",
+        "execa": "^1.0.0",
+        "fb-watchman": "^2.0.0",
+        "micromatch": "^3.1.4",
+        "minimist": "^1.1.1",
+        "walker": "~1.0.5"
+      }
+    },
+    "sass-loader": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.2.0.tgz",
+      "integrity": "sha512-h8yUWaWtsbuIiOCgR9fd9c2lRXZ2uG+h8Dzg/AGNj+Hg/3TO8+BBAW9mEP+mh8ei+qBKqSJ0F1FLlYjNBc61OA==",
+      "requires": {
+        "clone-deep": "^4.0.1",
+        "loader-utils": "^1.0.1",
+        "neo-async": "^2.5.0",
+        "pify": "^4.0.1",
+        "semver": "^5.5.0"
+      },
+      "dependencies": {
+        "clone-deep": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+          "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
+          "requires": {
+            "is-plain-object": "^2.0.4",
+            "kind-of": "^6.0.2",
+            "shallow-clone": "^3.0.0"
+          }
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+        },
+        "pify": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+          "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
+        },
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+        },
+        "shallow-clone": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
+          "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
+          "requires": {
+            "kind-of": "^6.0.2"
+          }
+        }
+      }
+    },
+    "sax": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+      "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
+    },
+    "saxes": {
+      "version": "3.1.11",
+      "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz",
+      "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==",
+      "requires": {
+        "xmlchars": "^2.1.1"
+      }
+    },
+    "scheduler": {
+      "version": "0.15.0",
+      "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz",
+      "integrity": "sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==",
+      "requires": {
+        "loose-envify": "^1.1.0",
+        "object-assign": "^4.1.1"
+      }
+    },
+    "schema-utils": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
+      "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
+      "requires": {
+        "ajv": "^6.1.0",
+        "ajv-errors": "^1.0.0",
+        "ajv-keywords": "^3.1.0"
+      }
+    },
+    "select-hose": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
+      "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo="
+    },
+    "selfsigned": {
+      "version": "1.10.4",
+      "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz",
+      "integrity": "sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw==",
+      "requires": {
+        "node-forge": "0.7.5"
+      }
+    },
+    "semver": {
+      "version": "6.3.0",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+      "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+    },
+    "send": {
+      "version": "0.17.1",
+      "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
+      "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
+      "requires": {
+        "debug": "2.6.9",
+        "depd": "~1.1.2",
+        "destroy": "~1.0.4",
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "etag": "~1.8.1",
+        "fresh": "0.5.2",
+        "http-errors": "~1.7.2",
+        "mime": "1.6.0",
+        "ms": "2.1.1",
+        "on-finished": "~2.3.0",
+        "range-parser": "~1.2.1",
+        "statuses": "~1.5.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "requires": {
+            "ms": "2.0.0"
+          },
+          "dependencies": {
+            "ms": {
+              "version": "2.0.0",
+              "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+              "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+            }
+          }
+        },
+        "mime": {
+          "version": "1.6.0",
+          "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+          "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+        },
+        "ms": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+          "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
+        }
+      }
+    },
+    "serialize-javascript": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.8.0.tgz",
+      "integrity": "sha512-3tHgtF4OzDmeKYj6V9nSyceRS0UJ3C7VqyD2Yj28vC/z2j6jG5FmFGahOKMD9CrglxTm3tETr87jEypaYV8DUg=="
+    },
+    "serve-index": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
+      "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
+      "requires": {
+        "accepts": "~1.3.4",
+        "batch": "0.6.1",
+        "debug": "2.6.9",
+        "escape-html": "~1.0.3",
+        "http-errors": "~1.6.2",
+        "mime-types": "~2.1.17",
+        "parseurl": "~1.3.2"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "http-errors": {
+          "version": "1.6.3",
+          "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
+          "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+          "requires": {
+            "depd": "~1.1.2",
+            "inherits": "2.0.3",
+            "setprototypeof": "1.1.0",
+            "statuses": ">= 1.4.0 < 2"
+          }
+        },
+        "inherits": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+        },
+        "setprototypeof": {
+          "version": "1.1.0",
+          "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
+          "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
+        }
+      }
+    },
+    "serve-static": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
+      "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
+      "requires": {
+        "encodeurl": "~1.0.2",
+        "escape-html": "~1.0.3",
+        "parseurl": "~1.3.3",
+        "send": "0.17.1"
+      }
+    },
+    "set-blocking": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+    },
+    "set-value": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
+      "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+      "requires": {
+        "extend-shallow": "^2.0.1",
+        "is-extendable": "^0.1.1",
+        "is-plain-object": "^2.0.3",
+        "split-string": "^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=",
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "setimmediate": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+      "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
+    },
+    "setprototypeof": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
+      "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
+    },
+    "sha.js": {
+      "version": "2.4.11",
+      "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
+      "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+      "requires": {
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "shallow-clone": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz",
+      "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=",
+      "requires": {
+        "is-extendable": "^0.1.1",
+        "kind-of": "^2.0.1",
+        "lazy-cache": "^0.2.3",
+        "mixin-object": "^2.0.1"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz",
+          "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=",
+          "requires": {
+            "is-buffer": "^1.0.2"
+          }
+        },
+        "lazy-cache": {
+          "version": "0.2.7",
+          "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz",
+          "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U="
+        }
+      }
+    },
+    "shebang-command": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+      "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+      "requires": {
+        "shebang-regex": "^1.0.0"
+      }
+    },
+    "shebang-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
+    },
+    "shell-quote": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz",
+      "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=",
+      "requires": {
+        "array-filter": "~0.0.0",
+        "array-map": "~0.0.0",
+        "array-reduce": "~0.0.0",
+        "jsonify": "~0.0.0"
+      }
+    },
+    "shellwords": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
+      "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww=="
+    },
+    "signal-exit": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+      "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
+    },
+    "simple-swizzle": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+      "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
+      "requires": {
+        "is-arrayish": "^0.3.1"
+      },
+      "dependencies": {
+        "is-arrayish": {
+          "version": "0.3.2",
+          "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+          "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
+        }
+      }
+    },
+    "sisteransi": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.3.tgz",
+      "integrity": "sha512-SbEG75TzH8G7eVXFSN5f9EExILKfly7SUvVY5DhhYLvfhKqhDFY0OzevWa/zwak0RLRfWS5AvfMWpd9gJvr5Yg=="
+    },
+    "slash": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+      "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A=="
+    },
+    "slice-ansi": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
+      "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
+      "requires": {
+        "ansi-styles": "^3.2.0",
+        "astral-regex": "^1.0.0",
+        "is-fullwidth-code-point": "^2.0.0"
+      },
+      "dependencies": {
+        "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="
+        }
+      }
+    },
+    "snapdragon": {
+      "version": "0.8.2",
+      "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+      "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+      "requires": {
+        "base": "^0.11.1",
+        "debug": "^2.2.0",
+        "define-property": "^0.2.5",
+        "extend-shallow": "^2.0.1",
+        "map-cache": "^0.2.2",
+        "source-map": "^0.5.6",
+        "source-map-resolve": "^0.5.0",
+        "use": "^3.1.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "define-property": {
+          "version": "0.2.5",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "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=",
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+        }
+      }
+    },
+    "snapdragon-node": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+      "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+      "requires": {
+        "define-property": "^1.0.0",
+        "isobject": "^3.0.0",
+        "snapdragon-util": "^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=",
+          "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": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "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": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "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": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        },
+        "kind-of": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+          "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
+        }
+      }
+    },
+    "snapdragon-util": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+      "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+      "requires": {
+        "kind-of": "^3.2.0"
+      }
+    },
+    "sockjs": {
+      "version": "0.3.19",
+      "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz",
+      "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==",
+      "requires": {
+        "faye-websocket": "^0.10.0",
+        "uuid": "^3.0.1"
+      },
+      "dependencies": {
+        "faye-websocket": {
+          "version": "0.10.0",
+          "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
+          "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
+          "requires": {
+            "websocket-driver": ">=0.5.1"
+          }
+        }
+      }
+    },
+    "sockjs-client": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz",
+      "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==",
+      "requires": {
+        "debug": "^3.2.5",
+        "eventsource": "^1.0.7",
+        "faye-websocket": "~0.11.1",
+        "inherits": "^2.0.3",
+        "json3": "^3.3.2",
+        "url-parse": "^1.4.3"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.2.6",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+          "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        }
+      }
+    },
+    "source-list-map": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
+      "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw=="
+    },
+    "source-map": {
+      "version": "0.5.7",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+    },
+    "source-map-resolve": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+      "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+      "requires": {
+        "atob": "^2.1.1",
+        "decode-uri-component": "^0.2.0",
+        "resolve-url": "^0.2.1",
+        "source-map-url": "^0.4.0",
+        "urix": "^0.1.0"
+      }
+    },
+    "source-map-support": {
+      "version": "0.5.13",
+      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+      "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
+      "requires": {
+        "buffer-from": "^1.0.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=="
+        }
+      }
+    },
+    "source-map-url": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+      "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="
+    },
+    "spdx-correct": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
+      "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
+      "requires": {
+        "spdx-expression-parse": "^3.0.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "spdx-exceptions": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
+      "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA=="
+    },
+    "spdx-expression-parse": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+      "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+      "requires": {
+        "spdx-exceptions": "^2.1.0",
+        "spdx-license-ids": "^3.0.0"
+      }
+    },
+    "spdx-license-ids": {
+      "version": "3.0.5",
+      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
+      "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q=="
+    },
+    "spdy": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz",
+      "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==",
+      "requires": {
+        "debug": "^4.1.0",
+        "handle-thing": "^2.0.0",
+        "http-deceiver": "^1.2.7",
+        "select-hose": "^2.0.0",
+        "spdy-transport": "^3.0.0"
+      }
+    },
+    "spdy-transport": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
+      "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
+      "requires": {
+        "debug": "^4.1.0",
+        "detect-node": "^2.0.4",
+        "hpack.js": "^2.1.6",
+        "obuf": "^1.1.2",
+        "readable-stream": "^3.0.6",
+        "wbuf": "^1.7.3"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "3.4.0",
+          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz",
+          "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        }
+      }
+    },
+    "split-string": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+      "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+      "requires": {
+        "extend-shallow": "^3.0.0"
+      }
+    },
+    "sprintf-js": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+      "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+    },
+    "sshpk": {
+      "version": "1.16.1",
+      "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
+      "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
+      "requires": {
+        "asn1": "~0.2.3",
+        "assert-plus": "^1.0.0",
+        "bcrypt-pbkdf": "^1.0.0",
+        "dashdash": "^1.12.0",
+        "ecc-jsbn": "~0.1.1",
+        "getpass": "^0.1.1",
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.0.2",
+        "tweetnacl": "~0.14.0"
+      }
+    },
+    "ssri": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz",
+      "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==",
+      "requires": {
+        "figgy-pudding": "^3.5.1"
+      }
+    },
+    "stable": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
+      "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w=="
+    },
+    "stack-utils": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz",
+      "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA=="
+    },
+    "static-extend": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+      "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+      "requires": {
+        "define-property": "^0.2.5",
+        "object-copy": "^0.1.0"
+      },
+      "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=",
+          "requires": {
+            "is-descriptor": "^0.1.0"
+          }
+        }
+      }
+    },
+    "statuses": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+      "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
+    },
+    "stealthy-require": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
+      "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks="
+    },
+    "stream-browserify": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
+      "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
+      "requires": {
+        "inherits": "~2.0.1",
+        "readable-stream": "^2.0.2"
+      }
+    },
+    "stream-each": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
+      "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
+      "requires": {
+        "end-of-stream": "^1.1.0",
+        "stream-shift": "^1.0.0"
+      }
+    },
+    "stream-http": {
+      "version": "2.8.3",
+      "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
+      "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
+      "requires": {
+        "builtin-status-codes": "^3.0.0",
+        "inherits": "^2.0.1",
+        "readable-stream": "^2.3.6",
+        "to-arraybuffer": "^1.0.0",
+        "xtend": "^4.0.0"
+      }
+    },
+    "stream-shift": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
+      "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI="
+    },
+    "string-length": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz",
+      "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=",
+      "requires": {
+        "astral-regex": "^1.0.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"
+          }
+        }
+      }
+    },
+    "string-width": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.1.0.tgz",
+      "integrity": "sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ==",
+      "requires": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^5.2.0"
+      }
+    },
+    "string.prototype.trim": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.0.tgz",
+      "integrity": "sha512-9EIjYD/WdlvLpn987+ctkLf0FfvBefOCuiEr2henD8X+7jfwPnyvTdmW8OJhj5p+M0/96mBdynLWkxUr+rHlpg==",
+      "dev": true,
+      "requires": {
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.13.0",
+        "function-bind": "^1.1.1"
+      }
+    },
+    "string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "requires": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
+    "stringify-object": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
+      "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==",
+      "requires": {
+        "get-own-enumerable-property-symbols": "^3.0.0",
+        "is-obj": "^1.0.1",
+        "is-regexp": "^1.0.0"
+      }
+    },
+    "strip-ansi": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+      "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+      "requires": {
+        "ansi-regex": "^4.1.0"
+      }
+    },
+    "strip-bom": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+      "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM="
+    },
+    "strip-comments": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-1.0.2.tgz",
+      "integrity": "sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw==",
+      "requires": {
+        "babel-extract-comments": "^1.0.0",
+        "babel-plugin-transform-object-rest-spread": "^6.26.0"
+      }
+    },
+    "strip-eof": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+      "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
+    },
+    "strip-json-comments": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz",
+      "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw=="
+    },
+    "style-loader": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.0.0.tgz",
+      "integrity": "sha512-B0dOCFwv7/eY31a5PCieNwMgMhVGFe9w+rh7s/Bx8kfFkrth9zfTZquoYvdw8URgiqxObQKcpW51Ugz1HjfdZw==",
+      "requires": {
+        "loader-utils": "^1.2.3",
+        "schema-utils": "^2.0.1"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.1.0.tgz",
+          "integrity": "sha512-g6SViEZAfGNrToD82ZPUjq52KUPDYc+fN5+g6Euo5mLokl/9Yx14z0Cu4RR1m55HtBXejO0sBt+qw79axN+Fiw==",
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        }
+      }
+    },
+    "styled-components": {
+      "version": "4.3.2",
+      "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-4.3.2.tgz",
+      "integrity": "sha512-NppHzIFavZ3TsIU3R1omtddJ0Bv1+j50AKh3ZWyXHuFvJq1I8qkQ5mZ7uQgD89Y8zJNx2qRo6RqAH1BmoVafHw==",
+      "requires": {
+        "@babel/helper-module-imports": "^7.0.0",
+        "@babel/traverse": "^7.0.0",
+        "@emotion/is-prop-valid": "^0.8.1",
+        "@emotion/unitless": "^0.7.0",
+        "babel-plugin-styled-components": ">= 1",
+        "css-to-react-native": "^2.2.2",
+        "memoize-one": "^5.0.0",
+        "merge-anything": "^2.2.4",
+        "prop-types": "^15.5.4",
+        "react-is": "^16.6.0",
+        "stylis": "^3.5.0",
+        "stylis-rule-sheet": "^0.0.10",
+        "supports-color": "^5.5.0"
+      }
+    },
+    "stylehacks": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz",
+      "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==",
+      "requires": {
+        "browserslist": "^4.0.0",
+        "postcss": "^7.0.0",
+        "postcss-selector-parser": "^3.0.0"
+      },
+      "dependencies": {
+        "postcss-selector-parser": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz",
+          "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=",
+          "requires": {
+            "dot-prop": "^4.1.1",
+            "indexes-of": "^1.0.1",
+            "uniq": "^1.0.1"
+          }
+        }
+      }
+    },
+    "stylis": {
+      "version": "3.5.4",
+      "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz",
+      "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q=="
+    },
+    "stylis-rule-sheet": {
+      "version": "0.0.10",
+      "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz",
+      "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw=="
+    },
+    "supports-color": {
+      "version": "5.5.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+      "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+      "requires": {
+        "has-flag": "^3.0.0"
+      }
+    },
+    "svg-parser": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.2.tgz",
+      "integrity": "sha512-1gtApepKFweigFZj3sGO8KT8LvVZK8io146EzXrpVuWCDAbISz/yMucco3hWTkpZNoPabM+dnMOpy6Swue68Zg=="
+    },
+    "svgo": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.0.tgz",
+      "integrity": "sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ==",
+      "requires": {
+        "chalk": "^2.4.1",
+        "coa": "^2.0.2",
+        "css-select": "^2.0.0",
+        "css-select-base-adapter": "^0.1.1",
+        "css-tree": "1.0.0-alpha.33",
+        "csso": "^3.5.1",
+        "js-yaml": "^3.13.1",
+        "mkdirp": "~0.5.1",
+        "object.values": "^1.1.0",
+        "sax": "~1.2.4",
+        "stable": "^0.1.8",
+        "unquote": "~1.1.1",
+        "util.promisify": "~1.0.0"
+      }
+    },
+    "symbol-tree": {
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
+      "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
+    },
+    "table": {
+      "version": "5.4.6",
+      "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
+      "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
+      "requires": {
+        "ajv": "^6.10.2",
+        "lodash": "^4.17.14",
+        "slice-ansi": "^2.1.0",
+        "string-width": "^3.0.0"
+      },
+      "dependencies": {
+        "emoji-regex": {
+          "version": "7.0.3",
+          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+          "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
+        },
+        "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="
+        },
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          }
+        }
+      }
+    },
+    "tapable": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
+      "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA=="
+    },
+    "terser": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-4.2.0.tgz",
+      "integrity": "sha512-6lPt7lZdZ/13icQJp8XasFOwZjFJkxFFIb/N1fhYEQNoNI3Ilo3KABZ9OocZvZoB39r6SiIk/0+v/bt8nZoSeA==",
+      "requires": {
+        "commander": "^2.20.0",
+        "source-map": "~0.6.1",
+        "source-map-support": "~0.5.12"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        }
+      }
+    },
+    "terser-webpack-plugin": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz",
+      "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==",
+      "requires": {
+        "cacache": "^12.0.2",
+        "find-cache-dir": "^2.1.0",
+        "is-wsl": "^1.1.0",
+        "schema-utils": "^1.0.0",
+        "serialize-javascript": "^1.7.0",
+        "source-map": "^0.6.1",
+        "terser": "^4.1.2",
+        "webpack-sources": "^1.4.0",
+        "worker-farm": "^1.7.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=="
+        }
+      }
+    },
+    "test-exclude": {
+      "version": "5.2.3",
+      "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz",
+      "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==",
+      "requires": {
+        "glob": "^7.1.3",
+        "minimatch": "^3.0.4",
+        "read-pkg-up": "^4.0.0",
+        "require-main-filename": "^2.0.0"
+      }
+    },
+    "text-table": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+      "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ="
+    },
+    "throat": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz",
+      "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo="
+    },
+    "through": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+      "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+    },
+    "through2": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
+      "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
+      "requires": {
+        "readable-stream": "~2.3.6",
+        "xtend": "~4.0.1"
+      }
+    },
+    "thunky": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz",
+      "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow=="
+    },
+    "timers-browserify": {
+      "version": "2.0.11",
+      "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz",
+      "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==",
+      "requires": {
+        "setimmediate": "^1.0.4"
+      }
+    },
+    "timsort": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
+      "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q="
+    },
+    "tiny-invariant": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.0.6.tgz",
+      "integrity": "sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA=="
+    },
+    "tiny-warning": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
+      "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
+    },
+    "tmp": {
+      "version": "0.0.33",
+      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+      "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+      "requires": {
+        "os-tmpdir": "~1.0.2"
+      }
+    },
+    "tmpl": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
+      "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE="
+    },
+    "to-arraybuffer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
+      "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M="
+    },
+    "to-fast-properties": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+      "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
+    },
+    "to-object-path": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+      "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+      "requires": {
+        "kind-of": "^3.0.2"
+      }
+    },
+    "to-regex": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+      "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+      "requires": {
+        "define-property": "^2.0.2",
+        "extend-shallow": "^3.0.2",
+        "regex-not": "^1.0.2",
+        "safe-regex": "^1.1.0"
+      }
+    },
+    "to-regex-range": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+      "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+      "requires": {
+        "is-number": "^3.0.0",
+        "repeat-string": "^1.6.1"
+      }
+    },
+    "toidentifier": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
+      "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
+    },
+    "tough-cookie": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+      "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+      "requires": {
+        "psl": "^1.1.28",
+        "punycode": "^2.1.1"
+      }
+    },
+    "tr46": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+      "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
+      "requires": {
+        "punycode": "^2.1.0"
+      }
+    },
+    "trim-right": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+      "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM="
+    },
+    "ts-pnp": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.2.tgz",
+      "integrity": "sha512-f5Knjh7XCyRIzoC/z1Su1yLLRrPrFCgtUAh/9fCSP6NKbATwpOL1+idQVXQokK9GRFURn/jYPGPfegIctwunoA=="
+    },
+    "tslib": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
+      "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ=="
+    },
+    "tsutils": {
+      "version": "3.17.1",
+      "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz",
+      "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==",
+      "requires": {
+        "tslib": "^1.8.1"
+      }
+    },
+    "tty-browserify": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
+      "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
+    },
+    "tunnel-agent": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+      "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+      "requires": {
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "tweetnacl": {
+      "version": "0.14.5",
+      "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+      "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
+    },
+    "type": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/type/-/type-1.0.3.tgz",
+      "integrity": "sha512-51IMtNfVcee8+9GJvj0spSuFcZHe9vSib6Xtgsny1Km9ugyz2mbS08I3rsUIRYgJohFRFU1160sgRodYz378Hg=="
+    },
+    "type-check": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+      "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+      "requires": {
+        "prelude-ls": "~1.1.2"
+      }
+    },
+    "type-fest": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz",
+      "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw=="
+    },
+    "type-is": {
+      "version": "1.6.18",
+      "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+      "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+      "requires": {
+        "media-typer": "0.3.0",
+        "mime-types": "~2.1.24"
+      }
+    },
+    "typed-styles": {
+      "version": "0.0.5",
+      "resolved": "https://registry.npmjs.org/typed-styles/-/typed-styles-0.0.5.tgz",
+      "integrity": "sha512-ht+rEe5UsdEBAa3gr64+QjUOqjOLJfWLvl5HZR5Ev9uo/OnD3p43wPeFSB1hNFc13GXQF/JU1Bn0YHLUqBRIlw=="
+    },
+    "typedarray": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+      "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+    },
+    "ua-parser-js": {
+      "version": "0.7.20",
+      "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.20.tgz",
+      "integrity": "sha512-8OaIKfzL5cpx8eCMAhhvTlft8GYF8b2eQr6JkCyVdrgjcytyOmPCXrqXFcUnhonRpLlh5yxEZVohm6mzaowUOw=="
+    },
+    "uglify-js": {
+      "version": "3.4.10",
+      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz",
+      "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==",
+      "requires": {
+        "commander": "~2.19.0",
+        "source-map": "~0.6.1"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "2.19.0",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
+          "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg=="
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+        }
+      }
+    },
+    "uncontrollable": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.0.0.tgz",
+      "integrity": "sha512-HFhKHDACiAsTYoV3el/LP4PqcLzqyWrNRHE6nMdr0h8f7qbvTPXIN2S4q+tdfc64PHEXaSFBs/fKVB2+UwSYOA==",
+      "requires": {
+        "@babel/runtime": "^7.4.5",
+        "invariant": "^2.2.4"
+      }
+    },
+    "unicode-canonical-property-names-ecmascript": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
+      "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ=="
+    },
+    "unicode-match-property-ecmascript": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
+      "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
+      "requires": {
+        "unicode-canonical-property-names-ecmascript": "^1.0.4",
+        "unicode-property-aliases-ecmascript": "^1.0.4"
+      }
+    },
+    "unicode-match-property-value-ecmascript": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz",
+      "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g=="
+    },
+    "unicode-property-aliases-ecmascript": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz",
+      "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw=="
+    },
+    "union-value": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
+      "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+      "requires": {
+        "arr-union": "^3.1.0",
+        "get-value": "^2.0.6",
+        "is-extendable": "^0.1.1",
+        "set-value": "^2.0.1"
+      }
+    },
+    "uniq": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
+      "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8="
+    },
+    "uniqs": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz",
+      "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI="
+    },
+    "unique-filename": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
+      "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
+      "requires": {
+        "unique-slug": "^2.0.0"
+      }
+    },
+    "unique-slug": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
+      "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
+      "requires": {
+        "imurmurhash": "^0.1.4"
+      }
+    },
+    "universalify": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+      "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
+    },
+    "unpipe": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+      "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+    },
+    "unquote": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz",
+      "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ="
+    },
+    "unset-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+      "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+      "requires": {
+        "has-value": "^0.3.1",
+        "isobject": "^3.0.0"
+      },
+      "dependencies": {
+        "has-value": {
+          "version": "0.3.1",
+          "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+          "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+          "requires": {
+            "get-value": "^2.0.3",
+            "has-values": "^0.1.4",
+            "isobject": "^2.0.0"
+          },
+          "dependencies": {
+            "isobject": {
+              "version": "2.1.0",
+              "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+              "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+              "requires": {
+                "isarray": "1.0.0"
+              }
+            }
+          }
+        },
+        "has-values": {
+          "version": "0.1.4",
+          "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+          "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E="
+        },
+        "isarray": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
+        }
+      }
+    },
+    "upath": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz",
+      "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q=="
+    },
+    "upper-case": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",
+      "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg="
+    },
+    "uri-js": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+      "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+      "requires": {
+        "punycode": "^2.1.0"
+      }
+    },
+    "urix": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+      "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
+    },
+    "url": {
+      "version": "0.11.0",
+      "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
+      "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=",
+      "requires": {
+        "punycode": "1.3.2",
+        "querystring": "0.2.0"
+      },
+      "dependencies": {
+        "punycode": {
+          "version": "1.3.2",
+          "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+          "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
+        }
+      }
+    },
+    "url-loader": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.1.0.tgz",
+      "integrity": "sha512-kVrp/8VfEm5fUt+fl2E0FQyrpmOYgMEkBsv8+UDP1wFhszECq5JyGF33I7cajlVY90zRZ6MyfgKXngLvHYZX8A==",
+      "requires": {
+        "loader-utils": "^1.2.3",
+        "mime": "^2.4.4",
+        "schema-utils": "^2.0.0"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.1.0.tgz",
+          "integrity": "sha512-g6SViEZAfGNrToD82ZPUjq52KUPDYc+fN5+g6Euo5mLokl/9Yx14z0Cu4RR1m55HtBXejO0sBt+qw79axN+Fiw==",
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        }
+      }
+    },
+    "url-parse": {
+      "version": "1.4.7",
+      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz",
+      "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==",
+      "requires": {
+        "querystringify": "^2.1.1",
+        "requires-port": "^1.0.0"
+      }
+    },
+    "use": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+      "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ=="
+    },
+    "util": {
+      "version": "0.10.3",
+      "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+      "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+      "requires": {
+        "inherits": "2.0.1"
+      },
+      "dependencies": {
+        "inherits": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+          "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
+        }
+      }
+    },
+    "util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+    },
+    "util.promisify": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
+      "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
+      "requires": {
+        "define-properties": "^1.1.2",
+        "object.getownpropertydescriptors": "^2.0.3"
+      }
+    },
+    "utila": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
+      "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw="
+    },
+    "utils-merge": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+      "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
+    },
+    "uuid": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
+      "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ=="
+    },
+    "v8-compile-cache": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz",
+      "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g=="
+    },
+    "validate-npm-package-license": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+      "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+      "requires": {
+        "spdx-correct": "^3.0.0",
+        "spdx-expression-parse": "^3.0.0"
+      }
+    },
+    "value-equal": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.4.0.tgz",
+      "integrity": "sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw=="
+    },
+    "vary": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+      "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+    },
+    "vendors": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.3.tgz",
+      "integrity": "sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw=="
+    },
+    "verror": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+      "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+      "requires": {
+        "assert-plus": "^1.0.0",
+        "core-util-is": "1.0.2",
+        "extsprintf": "^1.2.0"
+      }
+    },
+    "vm-browserify": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz",
+      "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw=="
+    },
+    "w3c-hr-time": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz",
+      "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=",
+      "requires": {
+        "browser-process-hrtime": "^0.1.2"
+      }
+    },
+    "w3c-xmlserializer": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz",
+      "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==",
+      "requires": {
+        "domexception": "^1.0.1",
+        "webidl-conversions": "^4.0.2",
+        "xml-name-validator": "^3.0.0"
+      }
+    },
+    "walker": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
+      "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
+      "requires": {
+        "makeerror": "1.0.x"
+      }
+    },
+    "warning": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",
+      "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
+      "requires": {
+        "loose-envify": "^1.0.0"
+      }
+    },
+    "watchpack": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
+      "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==",
+      "requires": {
+        "chokidar": "^2.0.2",
+        "graceful-fs": "^4.1.2",
+        "neo-async": "^2.5.0"
+      }
+    },
+    "wbuf": {
+      "version": "1.7.3",
+      "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz",
+      "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==",
+      "requires": {
+        "minimalistic-assert": "^1.0.0"
+      }
+    },
+    "webidl-conversions": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+      "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="
+    },
+    "webpack": {
+      "version": "4.39.1",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.39.1.tgz",
+      "integrity": "sha512-/LAb2TJ2z+eVwisldp3dqTEoNhzp/TLCZlmZm3GGGAlnfIWDgOEE758j/9atklNLfRyhKbZTCOIoPqLJXeBLbQ==",
+      "requires": {
+        "@webassemblyjs/ast": "1.8.5",
+        "@webassemblyjs/helper-module-context": "1.8.5",
+        "@webassemblyjs/wasm-edit": "1.8.5",
+        "@webassemblyjs/wasm-parser": "1.8.5",
+        "acorn": "^6.2.1",
+        "ajv": "^6.10.2",
+        "ajv-keywords": "^3.4.1",
+        "chrome-trace-event": "^1.0.2",
+        "enhanced-resolve": "^4.1.0",
+        "eslint-scope": "^4.0.3",
+        "json-parse-better-errors": "^1.0.2",
+        "loader-runner": "^2.4.0",
+        "loader-utils": "^1.2.3",
+        "memory-fs": "^0.4.1",
+        "micromatch": "^3.1.10",
+        "mkdirp": "^0.5.1",
+        "neo-async": "^2.6.1",
+        "node-libs-browser": "^2.2.1",
+        "schema-utils": "^1.0.0",
+        "tapable": "^1.1.3",
+        "terser-webpack-plugin": "^1.4.1",
+        "watchpack": "^1.6.0",
+        "webpack-sources": "^1.4.1"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz",
+          "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA=="
+        }
+      }
+    },
+    "webpack-dev-middleware": {
+      "version": "3.7.0",
+      "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz",
+      "integrity": "sha512-qvDesR1QZRIAZHOE3iQ4CXLZZSQ1lAUsSpnQmlB1PBfoN/xdRjmge3Dok0W4IdaVLJOGJy3sGI4sZHwjRU0PCA==",
+      "requires": {
+        "memory-fs": "^0.4.1",
+        "mime": "^2.4.2",
+        "range-parser": "^1.2.1",
+        "webpack-log": "^2.0.0"
+      }
+    },
+    "webpack-dev-server": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.2.1.tgz",
+      "integrity": "sha512-sjuE4mnmx6JOh9kvSbPYw3u/6uxCLHNWfhWaIPwcXWsvWOPN+nc5baq4i9jui3oOBRXGonK9+OI0jVkaz6/rCw==",
+      "requires": {
+        "ansi-html": "0.0.7",
+        "bonjour": "^3.5.0",
+        "chokidar": "^2.0.0",
+        "compression": "^1.5.2",
+        "connect-history-api-fallback": "^1.3.0",
+        "debug": "^4.1.1",
+        "del": "^3.0.0",
+        "express": "^4.16.2",
+        "html-entities": "^1.2.0",
+        "http-proxy-middleware": "^0.19.1",
+        "import-local": "^2.0.0",
+        "internal-ip": "^4.2.0",
+        "ip": "^1.1.5",
+        "killable": "^1.0.0",
+        "loglevel": "^1.4.1",
+        "opn": "^5.1.0",
+        "portfinder": "^1.0.9",
+        "schema-utils": "^1.0.0",
+        "selfsigned": "^1.9.1",
+        "semver": "^5.6.0",
+        "serve-index": "^1.7.2",
+        "sockjs": "0.3.19",
+        "sockjs-client": "1.3.0",
+        "spdy": "^4.0.0",
+        "strip-ansi": "^3.0.0",
+        "supports-color": "^6.1.0",
+        "url": "^0.11.0",
+        "webpack-dev-middleware": "^3.5.1",
+        "webpack-log": "^2.0.0",
+        "yargs": "12.0.2"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+        },
+        "camelcase": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+          "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
+        },
+        "cliui": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
+          "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+          "requires": {
+            "string-width": "^2.1.1",
+            "strip-ansi": "^4.0.0",
+            "wrap-ansi": "^2.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"
+              }
+            }
+          }
+        },
+        "decamelize": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz",
+          "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==",
+          "requires": {
+            "xregexp": "4.0.0"
+          }
+        },
+        "get-caller-file": {
+          "version": "1.0.3",
+          "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
+          "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w=="
+        },
+        "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="
+        },
+        "require-main-filename": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+          "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE="
+        },
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+        },
+        "string-width": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+          "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+          "requires": {
+            "is-fullwidth-code-point": "^2.0.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"
+              }
+            }
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
+        "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==",
+          "requires": {
+            "has-flag": "^3.0.0"
+          }
+        },
+        "wrap-ansi": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+          "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+          "requires": {
+            "string-width": "^1.0.1",
+            "strip-ansi": "^3.0.1"
+          },
+          "dependencies": {
+            "is-fullwidth-code-point": {
+              "version": "1.0.0",
+              "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+              "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+              "requires": {
+                "number-is-nan": "^1.0.0"
+              }
+            },
+            "string-width": {
+              "version": "1.0.2",
+              "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+              "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+              "requires": {
+                "code-point-at": "^1.0.0",
+                "is-fullwidth-code-point": "^1.0.0",
+                "strip-ansi": "^3.0.0"
+              }
+            }
+          }
+        },
+        "yargs": {
+          "version": "12.0.2",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz",
+          "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==",
+          "requires": {
+            "cliui": "^4.0.0",
+            "decamelize": "^2.0.0",
+            "find-up": "^3.0.0",
+            "get-caller-file": "^1.0.1",
+            "os-locale": "^3.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 || ^4.0.0",
+            "yargs-parser": "^10.1.0"
+          }
+        },
+        "yargs-parser": {
+          "version": "10.1.0",
+          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz",
+          "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==",
+          "requires": {
+            "camelcase": "^4.1.0"
+          }
+        }
+      }
+    },
+    "webpack-log": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz",
+      "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
+      "requires": {
+        "ansi-colors": "^3.0.0",
+        "uuid": "^3.3.2"
+      }
+    },
+    "webpack-manifest-plugin": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-2.0.4.tgz",
+      "integrity": "sha512-nejhOHexXDBKQOj/5v5IZSfCeTO3x1Dt1RZEcGfBSul891X/eLIcIVH31gwxPDdsi2Z8LKKFGpM4w9+oTBOSCg==",
+      "requires": {
+        "fs-extra": "^7.0.0",
+        "lodash": ">=3.5 <5",
+        "tapable": "^1.0.0"
+      }
+    },
+    "webpack-sources": {
+      "version": "1.4.3",
+      "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
+      "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
+      "requires": {
+        "source-list-map": "^2.0.0",
+        "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=="
+        }
+      }
+    },
+    "websocket-driver": {
+      "version": "0.7.3",
+      "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz",
+      "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==",
+      "requires": {
+        "http-parser-js": ">=0.4.0 <0.4.11",
+        "safe-buffer": ">=5.1.0",
+        "websocket-extensions": ">=0.1.1"
+      }
+    },
+    "websocket-extensions": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
+      "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg=="
+    },
+    "whatwg-encoding": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
+      "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
+      "requires": {
+        "iconv-lite": "0.4.24"
+      }
+    },
+    "whatwg-fetch": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz",
+      "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q=="
+    },
+    "whatwg-mimetype": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
+      "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g=="
+    },
+    "whatwg-url": {
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz",
+      "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==",
+      "requires": {
+        "lodash.sortby": "^4.7.0",
+        "tr46": "^1.0.1",
+        "webidl-conversions": "^4.0.2"
+      }
+    },
+    "which": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+      "requires": {
+        "isexe": "^2.0.0"
+      }
+    },
+    "which-module": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+      "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
+    },
+    "wordwrap": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+      "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus="
+    },
+    "workbox-background-sync": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-4.3.1.tgz",
+      "integrity": "sha512-1uFkvU8JXi7L7fCHVBEEnc3asPpiAL33kO495UMcD5+arew9IbKW2rV5lpzhoWcm/qhGB89YfO4PmB/0hQwPRg==",
+      "requires": {
+        "workbox-core": "^4.3.1"
+      }
+    },
+    "workbox-broadcast-update": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-4.3.1.tgz",
+      "integrity": "sha512-MTSfgzIljpKLTBPROo4IpKjESD86pPFlZwlvVG32Kb70hW+aob4Jxpblud8EhNb1/L5m43DUM4q7C+W6eQMMbA==",
+      "requires": {
+        "workbox-core": "^4.3.1"
+      }
+    },
+    "workbox-build": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-4.3.1.tgz",
+      "integrity": "sha512-UHdwrN3FrDvicM3AqJS/J07X0KXj67R8Cg0waq1MKEOqzo89ap6zh6LmaLnRAjpB+bDIz+7OlPye9iii9KBnxw==",
+      "requires": {
+        "@babel/runtime": "^7.3.4",
+        "@hapi/joi": "^15.0.0",
+        "common-tags": "^1.8.0",
+        "fs-extra": "^4.0.2",
+        "glob": "^7.1.3",
+        "lodash.template": "^4.4.0",
+        "pretty-bytes": "^5.1.0",
+        "stringify-object": "^3.3.0",
+        "strip-comments": "^1.0.2",
+        "workbox-background-sync": "^4.3.1",
+        "workbox-broadcast-update": "^4.3.1",
+        "workbox-cacheable-response": "^4.3.1",
+        "workbox-core": "^4.3.1",
+        "workbox-expiration": "^4.3.1",
+        "workbox-google-analytics": "^4.3.1",
+        "workbox-navigation-preload": "^4.3.1",
+        "workbox-precaching": "^4.3.1",
+        "workbox-range-requests": "^4.3.1",
+        "workbox-routing": "^4.3.1",
+        "workbox-strategies": "^4.3.1",
+        "workbox-streams": "^4.3.1",
+        "workbox-sw": "^4.3.1",
+        "workbox-window": "^4.3.1"
+      },
+      "dependencies": {
+        "fs-extra": {
+          "version": "4.0.3",
+          "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
+          "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
+          "requires": {
+            "graceful-fs": "^4.1.2",
+            "jsonfile": "^4.0.0",
+            "universalify": "^0.1.0"
+          }
+        }
+      }
+    },
+    "workbox-cacheable-response": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-4.3.1.tgz",
+      "integrity": "sha512-Rp5qlzm6z8IOvnQNkCdO9qrDgDpoPNguovs0H8C+wswLuPgSzSp9p2afb5maUt9R1uTIwOXrVQMmPfPypv+npw==",
+      "requires": {
+        "workbox-core": "^4.3.1"
+      }
+    },
+    "workbox-core": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.1.tgz",
+      "integrity": "sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg=="
+    },
+    "workbox-expiration": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-4.3.1.tgz",
+      "integrity": "sha512-vsJLhgQsQouv9m0rpbXubT5jw0jMQdjpkum0uT+d9tTwhXcEZks7qLfQ9dGSaufTD2eimxbUOJfWLbNQpIDMPw==",
+      "requires": {
+        "workbox-core": "^4.3.1"
+      }
+    },
+    "workbox-google-analytics": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-4.3.1.tgz",
+      "integrity": "sha512-xzCjAoKuOb55CBSwQrbyWBKqp35yg1vw9ohIlU2wTy06ZrYfJ8rKochb1MSGlnoBfXGWss3UPzxR5QL5guIFdg==",
+      "requires": {
+        "workbox-background-sync": "^4.3.1",
+        "workbox-core": "^4.3.1",
+        "workbox-routing": "^4.3.1",
+        "workbox-strategies": "^4.3.1"
+      }
+    },
+    "workbox-navigation-preload": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-4.3.1.tgz",
+      "integrity": "sha512-K076n3oFHYp16/C+F8CwrRqD25GitA6Rkd6+qAmLmMv1QHPI2jfDwYqrytOfKfYq42bYtW8Pr21ejZX7GvALOw==",
+      "requires": {
+        "workbox-core": "^4.3.1"
+      }
+    },
+    "workbox-precaching": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-4.3.1.tgz",
+      "integrity": "sha512-piSg/2csPoIi/vPpp48t1q5JLYjMkmg5gsXBQkh/QYapCdVwwmKlU9mHdmy52KsDGIjVaqEUMFvEzn2LRaigqQ==",
+      "requires": {
+        "workbox-core": "^4.3.1"
+      }
+    },
+    "workbox-range-requests": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-4.3.1.tgz",
+      "integrity": "sha512-S+HhL9+iTFypJZ/yQSl/x2Bf5pWnbXdd3j57xnb0V60FW1LVn9LRZkPtneODklzYuFZv7qK6riZ5BNyc0R0jZA==",
+      "requires": {
+        "workbox-core": "^4.3.1"
+      }
+    },
+    "workbox-routing": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-4.3.1.tgz",
+      "integrity": "sha512-FkbtrODA4Imsi0p7TW9u9MXuQ5P4pVs1sWHK4dJMMChVROsbEltuE79fBoIk/BCztvOJ7yUpErMKa4z3uQLX+g==",
+      "requires": {
+        "workbox-core": "^4.3.1"
+      }
+    },
+    "workbox-strategies": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-4.3.1.tgz",
+      "integrity": "sha512-F/+E57BmVG8dX6dCCopBlkDvvhg/zj6VDs0PigYwSN23L8hseSRwljrceU2WzTvk/+BSYICsWmRq5qHS2UYzhw==",
+      "requires": {
+        "workbox-core": "^4.3.1"
+      }
+    },
+    "workbox-streams": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-4.3.1.tgz",
+      "integrity": "sha512-4Kisis1f/y0ihf4l3u/+ndMkJkIT4/6UOacU3A4BwZSAC9pQ9vSvJpIi/WFGQRH/uPXvuVjF5c2RfIPQFSS2uA==",
+      "requires": {
+        "workbox-core": "^4.3.1"
+      }
+    },
+    "workbox-sw": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-4.3.1.tgz",
+      "integrity": "sha512-0jXdusCL2uC5gM3yYFT6QMBzKfBr2XTk0g5TPAV4y8IZDyVNDyj1a8uSXy3/XrvkVTmQvLN4O5k3JawGReXr9w=="
+    },
+    "workbox-webpack-plugin": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-4.3.1.tgz",
+      "integrity": "sha512-gJ9jd8Mb8wHLbRz9ZvGN57IAmknOipD3W4XNE/Lk/4lqs5Htw4WOQgakQy/o/4CoXQlMCYldaqUg+EJ35l9MEQ==",
+      "requires": {
+        "@babel/runtime": "^7.0.0",
+        "json-stable-stringify": "^1.0.1",
+        "workbox-build": "^4.3.1"
+      }
+    },
+    "workbox-window": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-4.3.1.tgz",
+      "integrity": "sha512-C5gWKh6I58w3GeSc0wp2Ne+rqVw8qwcmZnQGpjiek8A2wpbxSJb1FdCoQVO+jDJs35bFgo/WETgl1fqgsxN0Hg==",
+      "requires": {
+        "workbox-core": "^4.3.1"
+      }
+    },
+    "worker-farm": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
+      "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
+      "requires": {
+        "errno": "~0.1.7"
+      }
+    },
+    "worker-rpc": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz",
+      "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==",
+      "requires": {
+        "microevent.ts": "~0.1.1"
+      }
+    },
+    "wrap-ansi": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+      "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+      "requires": {
+        "ansi-styles": "^3.2.0",
+        "string-width": "^3.0.0",
+        "strip-ansi": "^5.0.0"
+      },
+      "dependencies": {
+        "emoji-regex": {
+          "version": "7.0.3",
+          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+          "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
+        },
+        "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="
+        },
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          }
+        }
+      }
+    },
+    "wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+    },
+    "write": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
+      "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
+      "requires": {
+        "mkdirp": "^0.5.1"
+      }
+    },
+    "write-file-atomic": {
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz",
+      "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==",
+      "requires": {
+        "graceful-fs": "^4.1.11",
+        "imurmurhash": "^0.1.4",
+        "signal-exit": "^3.0.2"
+      }
+    },
+    "ws": {
+      "version": "5.2.2",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
+      "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==",
+      "requires": {
+        "async-limiter": "~1.0.0"
+      }
+    },
+    "xml-name-validator": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
+      "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw=="
+    },
+    "xmlchars": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.1.1.tgz",
+      "integrity": "sha512-7hew1RPJ1iIuje/Y01bGD/mXokXxegAgVS+e+E0wSi2ILHQkYAH1+JXARwTjZSM4Z4Z+c73aKspEcqj+zPPL/w=="
+    },
+    "xregexp": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz",
+      "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg=="
+    },
+    "xtend": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
+      "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
+    },
+    "y18n": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+      "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w=="
+    },
+    "yallist": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz",
+      "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A=="
+    },
+    "yargs": {
+      "version": "13.3.0",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz",
+      "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==",
+      "requires": {
+        "cliui": "^5.0.0",
+        "find-up": "^3.0.0",
+        "get-caller-file": "^2.0.1",
+        "require-directory": "^2.1.1",
+        "require-main-filename": "^2.0.0",
+        "set-blocking": "^2.0.0",
+        "string-width": "^3.0.0",
+        "which-module": "^2.0.0",
+        "y18n": "^4.0.0",
+        "yargs-parser": "^13.1.1"
+      },
+      "dependencies": {
+        "emoji-regex": {
+          "version": "7.0.3",
+          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+          "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
+        },
+        "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="
+        },
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          }
+        }
+      }
+    },
+    "yargs-parser": {
+      "version": "13.1.1",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz",
+      "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==",
+      "requires": {
+        "camelcase": "^5.0.0",
+        "decamelize": "^1.2.0"
+      }
+    }
+  }
+}
index de7cb26..3d2f681 100644 (file)
@@ -1,23 +1,34 @@
 {
-  "name": "clamp-ui",
-  "version": "0.0.1",
-  "description": "ONAP Clamp Designer UI",
+  "name": "onap-clamp-ui",
+  "version": "4.1.1-SNAPSHOT",
+  "description": "ONAP Clamp Loop Designer UI",
+  "author": "ONAP Clamp Team",
+  "license": "Apache-2.0",
+  "publishConfig": {
+    "registry": "https://nexus3.onap.org/repository/npm.snapshot/"
+  },
   "main": "index.js",
-  "proxy": "http://localhost:8080",
+  "proxy": "https://localhost:8443",
   "scripts": {
-    "start": "react-scripts start",
+    "start": "HTTPS=true react-scripts start",
     "build": "react-scripts build",
-    "test": "react-scripts test --env=jsdom",
-    "eject": "react-scripts eject"
+    "test": "react-scripts test --env=jsdom --watchAll=false",
+    "eject": "react-scripts eject",
+    "publish": "npm run publish"
   },
-  "author": "ONAP Clamp Team",
-  "license": "Apache-2.0",
+  "files": [
+    "src/*.js",
+    "src/*.png",
+    "src/api",
+    "src/components",
+    "src/theme"
+  ],
   "dependencies": {
-    "@json-editor/json-editor": "1.3.5",
-    "react": "16.8.0",
-    "react-dom": "16.8.0",
-    "react-scripts": "3.0.1",
-    "react-bootstrap": "1.0.0-beta.9",
+    "@json-editor/json-editor": "1.4.0-beta.0",
+    "react": "16.9.0",
+    "react-dom": "16.9.0",
+    "react-scripts": "3.1.1",
+    "react-bootstrap": "1.0.0-beta.12",
     "bootstrap-css-only": "4.3.1",
     "styled-components": "4.3.2",
     "react-router-dom": "5.0.1",
index 2b740fe..bab3e7a 100644 (file)
 <head>
 <meta charset="utf-8">
 <meta name="viewport"
-       content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    content="width=device-width, initial-scale=1, shrink-to-fit=no">
 <meta name="theme-color" content="#000000">
-<link rel="manifest" href="%PUBLIC_URL%/manifest.json">
-<link rel="shortcut icon" href="%PUBLIC_URL%/onap.ico">
+<link rel="manifest" href="manifest.json">
+<link rel="shortcut icon" href="onap.ico">
 
 <title>Clamp Designer UI</title>
 </head>
 <body>
-       <noscript>You need to enable JavaScript to run this app.</noscript>
-       <div id="root"></div>
+    <noscript>You need to enable JavaScript to run this app.</noscript>
+    <div id="root"></div>
 </body>
 </html>
index 643b32d..fb595de 100644 (file)
@@ -34,20 +34,40 @@ import LoopStatus from './components/loop_viewer/status/LoopStatus';
 import UserService from './api/UserService';
 import LoopCache from './api/LoopCache';
 
-import { Route, Redirect } from 'react-router-dom'
+import { Route } from 'react-router-dom'
 import OpenLoopModal from './components/dialogs/OpenLoop/OpenLoopModal';
 import OperationalPolicyModal from './components/dialogs/OperationalPolicy/OperationalPolicyModal';
 import ConfigurationPolicyModal from './components/dialogs/ConfigurationPolicy/ConfigurationPolicyModal';
 import LoopProperties from './components/dialogs/LoopProperties';
 import UserInfo from './components/dialogs/UserInfo';
 import LoopService from './api/LoopService';
+import PerformAction from './components/dialogs/PerformActions';
+import RefreshStatus from './components/dialogs/RefreshStatus';
+import DeployLoop from './components/dialogs/DeployLoop';
+
+import { Link } from 'react-router-dom';
+
+const StyledMainDiv = styled.div`
+       background-color: ${props => props.theme.backgroundColor};
+`
 
 const ProjectNameStyled = styled.a`
        vertical-align: middle;
        padding-left: 30px;
-       font-size: 30px;
+       font-size: 36px;
+       font-weight: bold;
+`
 
+const StyledRouterLink = styled(Link)`
+       color: ${props => props.theme.menuFontColor};
+       background-color: ${props => props.theme.backgroundColor};
 `
+
+const StyledLoginInfo = styled.a`
+       color: ${props => props.theme.menuFontColor};
+       background-color: ${props => props.theme.backgroundColor};
+`
+
 const LoopViewDivStyled = styled.div`
        height: 100%;
        overflow: hidden;
@@ -80,14 +100,16 @@ export default class LoopUI extends React.Component {
        state = {
                userName: null,
                loopName: LoopUI.defaultLoopName,
-               loopCache: new LoopCache({}),
+               loopCache: new LoopCache({})
        };
 
        constructor() {
                super();
                this.getUser = this.getUser.bind(this);
+               this.logout = this.logout.bind(this);
                this.updateLoopCache = this.updateLoopCache.bind(this);
                this.loadLoop = this.loadLoop.bind(this);
+               this.closeLoop = this.closeLoop.bind(this);
        }
 
        componentWillMount() {
@@ -99,17 +121,27 @@ export default class LoopUI extends React.Component {
                        this.setState({ userName: user })
                });
        }
+       
+       logout() {
+               UserService.logout().then(user => {
+                       this.setState({ userName: user });
+                       window.location.reload();
+               });
+               
+       }
 
        renderMenuNavBar() {
                return (
-                       <MenuBar loopCache={this.state.loopCache}/>
+                       <MenuBar loopName={this.state.loopName}/>
                );
        }
 
        renderUserLoggedNavBar() {
                return (
                        <Navbar.Text>
-                               Signed in as: <a href="/login">{this.state.userName}</a>
+                       <StyledLoginInfo>Signed in as: </StyledLoginInfo>
+                               <StyledRouterLink to="/userInfo">{this.state.userName}</StyledRouterLink>
+                               <StyledRouterLink to="/logout/"> (logout)</StyledRouterLink>
                        </Navbar.Text>
                );
        }
@@ -125,8 +157,9 @@ export default class LoopUI extends React.Component {
 
        renderNavBar() {
                return (
-                       <Navbar expand="lg">
+                       <Navbar >
                                {this.renderLogoNavBar()}
+                               <Navbar.Toggle aria-controls="responsive-navbar-nav" />
                                {this.renderMenuNavBar()}
                                {this.renderUserLoggedNavBar()}
                        </Navbar>
@@ -155,6 +188,7 @@ export default class LoopUI extends React.Component {
                return this.state.loopCache;
 
        }
+
        renderLoopViewer() {
                return (
                        <LoopViewDivStyled>
@@ -165,11 +199,10 @@ export default class LoopUI extends React.Component {
        }
 
        updateLoopCache(loopJson) {
-               this.setState({ loopCache: new LoopCache(loopJson) });
-               this.setState({ loopName: this.state.loopCache.getLoopName() });
+               this.setState({ loopCache: new LoopCache(loopJson), loopName: this.state.loopCache.getLoopName() });
                console.info(this.state.loopName+" loop loaded successfully");
        }
-       
+
        loadLoop(loopName) {
                LoopService.getLoop(loopName).then(loop => {
                        console.debug("Updating loopCache");
@@ -177,20 +210,33 @@ export default class LoopUI extends React.Component {
                });
        }
 
+       closeLoop() {
+               this.setState({ loopCache: new LoopCache({}), loopName: LoopUI.defaultLoopName });
+               this.props.history.push('/');
+       }
+
        render() {
                return (
-                               <div id="main_div">
+                               <StyledMainDiv id="main_div">
                                <Route path="/operationalPolicyModal"
                                        render={(routeProps) => (<OperationalPolicyModal {...routeProps} loopCache={this.getLoopCache()} loadLoopFunction={this.loadLoop}/>)} />
                                <Route path="/configurationPolicyModal/:componentName" render={(routeProps) => (<ConfigurationPolicyModal {...routeProps} loopCache={this.getLoopCache()} loadLoopFunction={this.loadLoop}/>)} />
                                <Route path="/openLoop" render={(routeProps) => (<OpenLoopModal {...routeProps} loadLoopFunction={this.loadLoop} />)} />
                                <Route path="/loopProperties" render={(routeProps) => (<LoopProperties {...routeProps} loopCache={this.getLoopCache()} loadLoopFunction={this.loadLoop}/>)} />
                                <Route path="/userInfo" render={(routeProps) => (<UserInfo {...routeProps} />)} />
-                               <Route path="/closeLoop" render={(routeProps) => (<Redirect to='/'/>)} />
-                                       <GlobalClampStyle />
+                               <Route path="/closeLoop" render={this.closeLoop} />
+                               <Route path="/submit" render={(routeProps) => (<PerformAction {...routeProps} loopAction="submit" loopCache={this.getLoopCache()} updateLoopFunction={this.updateLoopCache}/>)} />
+                               <Route path="/stop" render={(routeProps) => (<PerformAction {...routeProps} loopAction="stop" loopCache={this.getLoopCache()} updateLoopFunction={this.updateLoopCache}/>)} />
+                               <Route path="/restart" render={(routeProps) => (<PerformAction {...routeProps} loopAction="restart" loopCache={this.getLoopCache()} updateLoopFunction={this.updateLoopCache}/>)} />
+                               <Route path="/delete" render={(routeProps) => (<PerformAction {...routeProps} loopAction="delete" loopCache={this.getLoopCache()} updateLoopFunction={this.updateLoopCache}/>)} />
+                               <Route path="/undeploy" render={(routeProps) => (<PerformAction {...routeProps} loopAction="undeploy" loopCache={this.getLoopCache()} updateLoopFunction={this.updateLoopCache}/>)} />
+                               <Route path="/deploy" render={(routeProps) => (<DeployLoop {...routeProps} loopCache={this.getLoopCache()} updateLoopFunction={this.updateLoopCache}/>)} />
+                               <Route path="/refreshStatus" render={(routeProps) => (<RefreshStatus {...routeProps} loopCache={this.getLoopCache()} updateLoopFunction={this.updateLoopCache}/>)} />
+                               <Route path="/logout" render={this.logout} />
+                               <GlobalClampStyle />
                                        {this.renderNavBar()}
                                        {this.renderLoopViewer()}
-                               </div>
+                               </StyledMainDiv>
                );
        }
 }
index e5b5025..1efea64 100644 (file)
@@ -77,7 +77,7 @@ describe('Verify LoopCache functions', () => {
       expect(loopCache.getDcaeDeploymentProperties()).toStrictEqual(deploymentProp);
     });
 
-    it('getMicroServicesJsonForType', () => {
+    it('getMicroServiceForName', () => {
       const msJson = {
           "name": "TCA_h2NMX_v1_0_ResourceInstanceName1_tca",
           "modelType": "onap.policies.monitoring.cdap.tca.hi.lo.app",
@@ -85,24 +85,19 @@ describe('Verify LoopCache functions', () => {
           "shared": false,
           "jsonRepresentation": {"schema": {}}
       };
-      expect(loopCache.getMicroServicesJsonForType("TCA_h2NMX_v1_0_ResourceInstanceName1_tca")).toStrictEqual(msJson);
-      expect(loopCache.getMicroServicesJsonForType("TCA_h2NMX_v1_0_ResourceInstanceName1_tca_2")).toBeNull();
+      expect(loopCache.getMicroServiceForName("TCA_h2NMX_v1_0_ResourceInstanceName1_tca")).toStrictEqual(msJson);
+      expect(loopCache.getMicroServiceForName("TCA_h2NMX_v1_0_ResourceInstanceName1_tca_2")).toBeNull();
     });
 
-    it('getMicroServiceProperties', () => {
+    it('getMicroServicePropertiesForName', () => {
       const msProp = {"domain": "measurementsForVfScaling"};
-      expect(loopCache.getMicroServiceProperties("TCA_h2NMX_v1_0_ResourceInstanceName1_tca")).toStrictEqual(msProp);
-      expect(loopCache.getMicroServiceProperties("TCA_h2NMX_v1_0_ResourceInstanceName1_tca_2")).toBeNull();
+      expect(loopCache.getMicroServicePropertiesForName("TCA_h2NMX_v1_0_ResourceInstanceName1_tca")).toStrictEqual(msProp);
+      expect(loopCache.getMicroServicePropertiesForName("TCA_h2NMX_v1_0_ResourceInstanceName1_tca_2")).toBeNull();
     });
 
-    it('getMicroServiceJsonRepresentationForType', () => {
+    it('getMicroServiceJsonRepresentationForName', () => {
       const msJsonRepresentation = {"schema": {}};
-      expect(loopCache.getMicroServiceJsonRepresentationForType("TCA_h2NMX_v1_0_ResourceInstanceName1_tca")).toStrictEqual(msJsonRepresentation);
-    });
-
-    it('getMicroServiceJsonRepresentationForType', () => {
-      const msJsonRepresentation = {"schema": {}};
-      expect(loopCache.getMicroServiceJsonRepresentationForType("TCA_h2NMX_v1_0_ResourceInstanceName1_tca")).toStrictEqual(msJsonRepresentation);
+      expect(loopCache.getMicroServiceJsonRepresentationForName("TCA_h2NMX_v1_0_ResourceInstanceName1_tca")).toStrictEqual(msJsonRepresentation);
     });
 
     it('getResourceDetailsVfProperty', () => {
@@ -204,14 +199,8 @@ describe('Verify LoopCache functions', () => {
     });
 
     it('updateMicroServiceProperties', () => {
-      const newMsPolicy = {
-          "name": "TCA_h2NMX_v1_0_ResourceInstanceName1_tca",
-          "modelType": "onap.policies.monitoring.cdap.tca.hi.lo.app",
-          "properties": {"domain": "measurementsForVfScalingNew"},
-          "shared": true,
-          "jsonRepresentation": {"schema": {}}
-      };;
-      loopCache.updateMicroServiceProperties("TCA_h2NMX_v1_0_ResourceInstanceName1_tca", newMsPolicy);
-      expect(loopCache.getMicroServicesJsonForType("TCA_h2NMX_v1_0_ResourceInstanceName1_tca")).toStrictEqual(newMsPolicy);
+      const newMsPolicyProperties = {"domain": "measurementsForVfScalingNew"};
+      loopCache.updateMicroServiceProperties("TCA_h2NMX_v1_0_ResourceInstanceName1_tca", newMsPolicyProperties);
+      expect(loopCache.getMicroServicePropertiesForName("TCA_h2NMX_v1_0_ResourceInstanceName1_tca")).toStrictEqual(newMsPolicyProperties);
     });
  });
diff --git a/ui-react/src/__test__/__snapshots__/OpenLoopModal.test.js.snap b/ui-react/src/__test__/__snapshots__/OpenLoopModal.test.js.snap
new file mode 100644 (file)
index 0000000..cb8b8fd
--- /dev/null
@@ -0,0 +1,3 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Verify OpenLoopModal Test the render method 1`] = `ShallowWrapper {}`;
index 9ce8ff0..6e45ce4 100644 (file)
  * ===================================================================
  *
  */
-const loopActionService = {
-       submit
-};
 
+export default class LoopActionService{
 
-function submit(uiAction) {
-       const cl_name = "";
-       console.log("clActionServices perform action: " + uiAction + " closedloopName="
-               + cl_name);
-       const svcAction = uiAction.toLowerCase();
-       const svcUrl = "/restservices/clds/v2/loop/" + svcAction + "/" + cl_name;
+       static performAction(cl_name, uiAction) {
+               console.log("LoopActionService perform action: " + uiAction + " closedloopName=" + cl_name);
+               const svcAction = uiAction.toLowerCase();
+               return fetch("/restservices/clds/v2/loop/" + svcAction + "/" + cl_name, {
+                               method: 'PUT',
+                               credentials: 'same-origin',
+                       })
+               .then(function (response) {
+                       if (response.ok) {
+                               return response.json();
+                       } else {
+                               return Promise.reject("Perform action failed with code:" + response.status);
+                       }
+               })
+               .then(function (data) {
+                       alert("Action Successful: " + uiAction);
+                       return data;
+               })
+               .catch(function(error) {
+                       console.log("Action Failure: " + uiAction);
+                       return Promise.reject(error);
+               });
+       }
 
-       let options = {
-               method: 'GET'
-       };
-       return sendRequest(svcUrl, svcAction, options);
-}
-
-function sendRequest(svcUrl, svcAction) {
-       fetch(svcUrl, options)
-               .then(
-                       response => {
-                               alertService.alertMessage("Action Successful: " + svcAction, 1)
-                       }).error(error => {
-                               alertService.alertMessage("Action Failure: " + svcAction, 2);
-                               return Promise.reject(error);
-                       });
 
-       return response.json();
-};
+       static refreshStatus(cl_name) {
+               console.log("Refresh the status for closedloopName=" + cl_name);
 
-export default loopActionService;
\ No newline at end of file
+               return fetch("/restservices/clds/v2/loop/getstatus/" + cl_name, {
+                       method: 'GET',
+                       credentials: 'same-origin',
+               })
+               .then(function (response) {
+                       if (response.ok) {
+                               return response.json();
+                       } else {
+                               return Promise.reject("Refresh status failed with code:" + response.status);
+                       }
+               })
+               .then(function (data) {
+                       console.info ("Refresh status Successful");
+                       return data;
+               })
+               .catch(function(error) {
+                       console.info ("Refresh status failed:", error);
+                       return Promise.reject(error);
+               });
+       }
+}
index 3ee5acc..dd8c5b5 100644 (file)
@@ -28,9 +28,9 @@ export default class LoopCache {
                this.loopJsonCache=loopJson;
        }
 
-       updateMicroServiceProperties(type, newMsProperties) {
+       updateMicroServiceProperties(name, newMsProperties) {
                        for (var policy in this.loopJsonCache["microServicePolicies"]) {
-                               if (this.loopJsonCache["microServicePolicies"][policy]["name"] === type) {
+                               if (this.loopJsonCache["microServicePolicies"][policy]["name"] === name) {
                                        this.loopJsonCache["microServicePolicies"][policy]["properties"] = newMsProperties;
                                }
                        }
@@ -51,6 +51,10 @@ export default class LoopCache {
        getOperationalPolicyConfigurationJson() {
                return this.loopJsonCache["operationalPolicies"]["0"]["configurationsJson"];
        }
+       
+       getOperationalPolicyJsonSchema() {
+               return this.loopJsonCache["operationalPolicySchema"];
+       }
 
        getOperationalPolicies() {
                return this.loopJsonCache["operationalPolicies"];
index 031ec63..eece20c 100644 (file)
@@ -104,6 +104,30 @@ export default class LoopService {
                                return "";
                        });
        }
+       
+       static setOperationalPolicyProperties(loopName, jsonData) {
+               return fetch('/restservices/clds/v2/loop/updateOperationalPolicies/' + loopName, {
+                       method: 'POST',
+                       credentials: 'same-origin',
+                       headers: {
+                               "Content-Type": "application/json",
+                       },
+                       body: JSON.stringify(jsonData),
+               })
+                       .then(function (response) {
+                               console.debug("updateOperationalPolicies response received: ", response.status);
+                               if (response.ok) {
+                                       return response.text();
+                               } else {
+                                       console.error("updateOperationalPolicies query failed");
+                                       return "";
+                               }
+                       })
+                       .catch(function (error) {
+                               console.error("updateOperationalPolicies error received", error);
+                               return "";
+                       });
+       }
 
        static updateGlobalProperties(loopName, jsonData) {
                return fetch('/restservices/clds/v2/loop/updateGlobalProperties/' + loopName, {
index be21e69..37ec73d 100644 (file)
@@ -47,6 +47,31 @@ export default class UserService {
                        return UserService.notLoggedUserName;
                });
        }
+       
+       static logout() {
+               return fetch('/restservices/clds/v1/user/logout', {
+                       method: 'POST',
+                       credentials: 'same-origin',
+               })
+               .then(function (response) {
+                       console.debug("logout response received, status code:", response.status);
+                       if (response.ok) {
+                               return response.text();
+                       } else {
+                               console.error("logout response is nok");
+                               return UserService.notLoggedUserName;
+                       }
+               })
+               .then(function (data) {
+                       console.info ("User disconnected:",data)
+                       return data;
+               })
+               .catch(function(error) {
+                       console.warn("logout error received, user set to: ",UserService.notLoggedUserName);
+                       console.error("logout error:",error);
+                       return UserService.notLoggedUserName;
+               });
+       }
 
        static getUserInfo() {
                return fetch('/restservices/clds/v1/clds/cldsInfo', {
index 4fbb783..9863ef7 100644 (file)
@@ -103,7 +103,7 @@ export default class ConfigurationPolicyModal extends React.Component {
 
        render() {
                return (
-                       <ModalStyled size="lg" show={this.state.show} onHide={this.handleClose}>
+                       <ModalStyled size="xl" show={this.state.show} onHide={this.handleClose}>
                                <Modal.Header closeButton>
                                        <Modal.Title>Configuration policies</Modal.Title>
                                </Modal.Header>
diff --git a/ui-react/src/components/dialogs/DeployLoop.js b/ui-react/src/components/dialogs/DeployLoop.js
new file mode 100644 (file)
index 0000000..2ec395d
--- /dev/null
@@ -0,0 +1,128 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights
+ *                             reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END============================================
+ * ===================================================================
+ *
+ */
+import React from 'react';
+import LoopActionService from '../../api/LoopActionService';
+import LoopService from '../../api/LoopService';
+import Button from 'react-bootstrap/Button';
+import Modal from 'react-bootstrap/Modal';
+import Form from 'react-bootstrap/Form';
+import styled from 'styled-components';
+
+const ModalStyled = styled(Modal)`
+       background-color: transparent;
+`
+const FormStyled = styled(Form.Group)`
+       padding: .25rem 1.5rem;
+`
+export default class DeployLoop extends React.Component {
+       state = {
+               loopCache: this.props.loopCache,
+               temporaryPropertiesJson: JSON.parse(JSON.stringify(this.props.loopCache.getGlobalProperties())),
+               show: true
+       };
+       constructor(props, context) {
+               super(props, context);
+
+               this.handleSave = this.handleSave.bind(this);
+               this.handleClose = this.handleClose.bind(this);
+               this.handleChange = this.handleChange.bind(this);
+               this.refreshStatus = this.refreshStatus.bind(this);
+               this.renderDeployParam = this.renderDeployParam.bind(this);
+       }
+       componentWillReceiveProps(newProps) {
+               this.setState({
+                       loopName: newProps.loopCache.getLoopName(),
+                       show: true
+               });
+       }
+       handleClose(){
+               this.props.history.push('/');
+       }
+       handleSave(e) {
+               const loopName = this.props.loopCache.getLoopName();
+               // save the global propserties
+               LoopService.updateGlobalProperties(loopName, this.state.temporaryPropertiesJson).then(resp => {
+                       this.setState({ show: false });
+
+                       console.log("Perform action: deploy");
+                       LoopActionService.performAction(loopName, "deploy").then(pars => {
+                               alert("Action deploy successfully performed");
+                               // refresh status and update loop logs
+                               this.refreshStatus(loopName);
+                       })
+                       .catch(error => {
+                               alert("Action deploy failed");
+                               // refresh status and update loop logs
+                               this.refreshStatus(loopName);
+                       });
+               });
+       }
+
+       refreshStatus(loopName) {
+               LoopActionService.refreshStatus(loopName).then(data => {
+                       this.props.updateLoopFunction(data);
+                       this.props.history.push('/');
+               })
+               .catch(error => {
+                       alert("Refresh status failed");
+                       this.props.history.push('/');
+               });
+       }
+       handleChange(event) {
+               let deploymentParam = this.state.temporaryPropertiesJson["dcaeDeployParameters"];
+               deploymentParam[event.target.name] = event.target.value;
+
+               this.setState({temporaryPropertiesJson:{dcaeDeployParameters: deploymentParam}});
+       }
+       renderDeployParam() {
+               if (typeof (this.state.temporaryPropertiesJson) === "undefined") {
+                        return "";
+               }
+
+               const deployJson = this.state.temporaryPropertiesJson["dcaeDeployParameters"];
+               var indents = [];
+               Object.keys(deployJson).map((item,key) =>
+               indents.push(<FormStyled>
+                               <Form.Label>{item}</Form.Label>
+                               <Form.Control type="text" name={item} onChange={this.handleChange} defaultValue={deployJson[item]}></Form.Control>
+                       </FormStyled>));
+
+                       return indents;
+       }
+
+
+       render() {
+               return (
+                                       <ModalStyled size="lg" show={this.state.show} onHide={this.handleClose} >
+                                               <Modal.Header closeButton>
+                                                       <Modal.Title>Deployment parameters</Modal.Title>
+                                               </Modal.Header>
+                                               {this.renderDeployParam()}
+                                               <Modal.Footer>
+                                                       <Button variant="secondary" type="null" onClick={this.handleClose}>Cancel</Button>
+                                                       <Button variant="primary" type="submit" onClick={this.handleSave}>Deploy</Button>
+                                               </Modal.Footer>
+                                       </ModalStyled>
+               );
+       }
+}
index dac7765..fa82a7e 100644 (file)
@@ -30,7 +30,6 @@ import LoopService from '../../api/LoopService';
 const ModalStyled = styled(Modal)`
        background-color: transparent;
 `
-
 export default class LoopProperties extends React.Component {
 
        state = {
@@ -45,7 +44,7 @@ export default class LoopProperties extends React.Component {
                this.handleClose = this.handleClose.bind(this);
                this.handleSave = this.handleSave.bind(this);
                this.handleChange = this.handleChange.bind(this);
-               
+
                this.renderDcaeParameters = this.renderDcaeParameters.bind(this);
                this.renderAllParameters = this.renderAllParameters.bind(this);
                this.getDcaeParameters = this.getDcaeParameters.bind(this);
@@ -55,7 +54,7 @@ export default class LoopProperties extends React.Component {
                this.setState({
                        loopCache: newProps.loopCache,
                        temporaryPropertiesJson: JSON.parse(JSON.stringify(newProps.loopCache.getGlobalProperties())),
-                       
+
                });
        }
 
@@ -90,7 +89,7 @@ export default class LoopProperties extends React.Component {
                } else {
                        return "";
                }
-               
+
        }
 
        renderDcaeParameters() {
diff --git a/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicy.css b/ui-react/src/components/dialogs/OperationalPolicy/OperationalPolicy.css
deleted file mode 100644 (file)
index 94a91c2..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-.disabled {
-       background-color: #dddd;
-}
-
-label {
-       text-align: right;
-       vertical-align: middle;
-}
-
-.leftPolicyPanel {
-       padding: 0 10px 0 0;
-}
-
-.idError {
-       color: red;
-       padding: 50px 0px;
-       text-align: center;
-       display: none;
-}
-
-.policyPanel {
-       background-color: #f5f5f5;
-       padding: 15px 5px 0 5px;
-}
-
-.form-group.clearfix {
-       display: -webkit-flex;
-       display: flex;
-       align-items: center;
-}
-
-label {
-       margin-bottom: 0px;
-}
-
-.withnote {
-       margin-bottom: 0px;
-}
-
-.note {
-       font-size:10px;
-       margin-left: 250px;
-       font-weight: normal;
-}
-
-#policyTable {
-       cursor: pointer;
-       width: 100%;
-}
-
-#policyTable tr {
-       border-bottom: 1px solid #ddd;
-       border-collapse: collapse;
-       text-align: left;
-       font-size: 12px;
-       font-weight: normal;
-}
-
-#policyTable td {
-       padding: 8px 10px;
-}
-
-#policyTable tr.highlight {
-       background-color: #f5f5f5;
-       font-weight: bold;
-       font-size: 13px;
-}
-
-#policyTableHolder {
-       height: 200px;
-       width: 100%;
-       overflow: auto;
-}
\ No newline at end of file
index 2a812c8..7f349a1 100644 (file)
@@ -24,8 +24,9 @@
 import React from 'react'
 import Button from 'react-bootstrap/Button';
 import Modal from 'react-bootstrap/Modal';
-import './OperationalPolicy.css'
 import styled from 'styled-components';
+import LoopService from '../../../api/LoopService';
+import JSONEditor from '@json-editor/json-editor';
 
 const ModalStyled = styled(Modal)`
        background-color: transparent;
@@ -36,512 +37,92 @@ export default class OperationalPolicyModal extends React.Component {
        state = {
                show: true,
                loopCache: this.props.loopCache,
+               jsonEditor: null,
        };
 
-       allPolicies = [];
-       policyIds = [];
-
        constructor(props, context) {
                super(props, context);
-
                this.handleClose = this.handleClose.bind(this);
-               this.initPolicySelect = this.initPolicySelect.bind(this);
-               this.initPolicySelect();
+               this.handleSave = this.handleSave.bind(this);
+               this.renderJsonEditor = this.renderJsonEditor.bind(this);
+               this.setDefaultJsonEditorOptions();
        }
 
-       handleClose() {
-               this.setState({ show: false });
-               this.props.history.push('/')
-       }
+       handleSave() {
+               var errors = this.state.jsonEditor.validate();
+               var editorData = this.state.jsonEditor.getValue();
 
-       initPolicySelect() {
-               if (this.allPolicies['operational_policy'] === undefined || this.allPolicies['operational_policy'] === null) {
-                       this.allPolicies = this.state.loopCache.getOperationalPolicyConfigurationJson();
+               if (errors.length !== 0) {
+                       console.error("Errors detected during config policy data validation ", errors);
+                       alert(errors);
                }
-               // Provision all policies ID first
-               if (this.policyIds.length === 0 && this.allPolicies['operational_policy'] !== undefined) {
-
-                       for (let i = 0; i < this.allPolicies['operational_policy']['policies'].length; i++) {
-                               this.policyIds.push(this.allPolicies['operational_policy']['policies'][i]['id']);
-                       }
+               else {
+                       console.info("NO validation errors found in config policy data");
+                       this.state.loopCache.updateOperationalPolicyProperties(editorData);
+                       LoopService.setOperationalPolicyProperties(this.state.loopCache.getLoopName(), this.state.loopCache.getOperationalPolicies()).then(resp => {
+                               this.setState({ show: false });
+                               this.props.history.push('/');
+                               this.props.loadLoopFunction(this.state.loopCache.getLoopName());
+                       });
                }
        }
 
-       renderPolicyIdSelect() {
-               return (
-                       <select type="text" id="trigger_policy" name="trigger_policy"
-                               className="form-control">
-                               <option value="">-- choose an option --</option>
-                               {this.policyIds.map(policyId => (<option key={policyId}>{policyId}</option>))}
-                       </select>
-               );
+       handleClose() {
+               this.setState({ show: false });
+               this.props.history.push('/');
        }
 
-       serializeElement(element) {
-               var o = {};
-               element.serializeArray().forEach(function () {
-                       if (o[this.name]) {
-                               if (!o[this.name].push) {
-                                       o[this.name] = [o[this.name]];
-                               }
-                               o[this.name].push(this.value || '');
-                       } else {
-                               o[this.name] = this.value || '';
-                       }
-               });
-               return o;
+       componentDidMount() {
+               this.renderJsonEditor();
        }
 
-       // When we change the name of a policy
-       isDuplicatedId(event) {
-               // update policy id structure
-               var formNum = document.getElementById(event.target).closest('.formId').attr('id').substring(6);
-               var policyId = document.getElementById(event.target).val();
-               if (this.policyIds.includes(policyId)) {
-                       console.log("Duplicated ID, cannot proceed");
-                       return true;
-               } else {
-                       this.duplicated = false;
-                       this.policyIds.splice(this.policyIds.indexOf(document.getElementById("#formId" + formNum + " #id").val()), 1);
-                       this.policyIds.push(document.getElementById(event.target).val());
-                       // Update the tab now
-                       document.getElementById("#go_properties_tab" + formNum).text(document.getElementById(event.target).val());
-               }
+       setDefaultJsonEditorOptions() {
+               JSONEditor.defaults.options.theme = 'bootstrap4';
+
+               JSONEditor.defaults.options.object_layout = 'grid';
+               JSONEditor.defaults.options.disable_properties = true;
+               JSONEditor.defaults.options.disable_edit_json = false;
+               JSONEditor.defaults.options.disable_array_reorder = true;
+               JSONEditor.defaults.options.disable_array_delete_last_row = true;
+               JSONEditor.defaults.options.disable_array_delete_all_rows = false;
+               JSONEditor.defaults.options.array_controls_top=true;
+               JSONEditor.defaults.options.show_errors = 'always';
+               JSONEditor.defaults.options.keep_oneof_values=false;
+               JSONEditor.defaults.options.collapsed=true;
+               //JSONEditor.defaults.options.template = 'default';
        }
+       
+       renderJsonEditor() {
+               console.debug("Rendering OperationalPolicyModal");
+               var schema_json = this.state.loopCache.getOperationalPolicyJsonSchema();
+               
+               if (schema_json == null) {
+                       console.error("NO Operational policy schema found");
+                       return;
+               }
+               var operationalPoliciesData = this.state.loopCache.getOperationalPolicies();
 
-       configureComponents() {
-               console.log("Load properties to op policy");
-               // Set the header
-               document.getElementsByClassName('form-control').forEach(function () {
-                       this.val(this.allPolicies['operational_policy']['controlLoop'][this.id]);
-               });
-               // Set the sub-policies
-               this.allPolicies['operational_policy']['policies'].forEach(function (opPolicyElemIndex, opPolicyElemValue) {
-
-                       /*                          var formNum = add_one_more();
-                                                       forEach(document.getElementsByClassName('policyProperties').find('.form-control'), function(opPolicyPropIndex, opPolicyPropValue) {
-                       
-                                                               $("#formId" + formNum + " .policyProperties").find("#" + opPolicyPropValue.id).val(
-                                                               allPolicies['operational_policy']['policies'][opPolicyElemIndex][opPolicyPropValue.id]);
-                                                       });
-                       
-                                                       // Initial TargetResourceId options
-                                                       initTargetResourceIdOptions(allPolicies['operational_policy']['policies'][opPolicyElemIndex]['target']['type'], formNum);
-                                                       $.each($('.policyTarget').find('.form-control'), function(opPolicyTargetPropIndex, opPolicyTargetPropValue) {
-                       
-                                                               $("#formId" + formNum + " .policyTarget").find("#" + opPolicyTargetPropValue.id).val(
-                                                               allPolicies['operational_policy']['policies'][opPolicyElemIndex]['target'][opPolicyTargetPropValue.id]);
-                                                       });
-                       
-                                                       // update the current tab label
-                                                       $("#go_properties_tab" + formNum).text(
-                                                       allPolicies['operational_policy']['policies'][opPolicyElemIndex]['id']);
-                                                       // Check if there is a guard set for it
-                                                       $.each(allPolicies['guard_policies'], function(guardElemId, guardElemValue) {
-                       
-                                                               if (guardElemValue.recipe === $($("#formId" + formNum + " #recipe")[0]).val()) {
-                                                                       // Found one, set all guard prop
-                                                                       $.each($('.guardProperties').find('.form-control'), function(guardPropElemIndex,
-                                                                                                                                                                                                guardPropElemValue) {
-                       
-                                                                               guardElemValue['id'] = guardElemId;
-                                                                               $("#formId" + formNum + " .guardProperties").find("#" + guardPropElemValue.id).val(
-                                                                               guardElemValue[guardPropElemValue.id]);
-                                                                       });
-                                                                       iniGuardPolicyType(guardElemId, formNum);
-                                                                       // And finally enable the flag
-                                                                       $("#formId" + formNum + " #enableGuardPolicy").prop("checked", true);
-                                                               }
-                                                       });*/
-               });
+               this.setState({
+                               jsonEditor: new JSONEditor(document.getElementById("editor"),
+                                       { schema: schema_json.schema, startval: operationalPoliciesData })
+                       })
        }
 
        render() {
                return (
-                       <ModalStyled size="lg" show={this.state.show} onHide={this.handleClose}>
+                       <ModalStyled size="xl" show={this.state.show} onHide={this.handleClose}>
                                <Modal.Header closeButton>
                                        <Modal.Title>Operational policies</Modal.Title>
                                </Modal.Header>
                                <Modal.Body>
-                                       <div attribute-test="policywindowproperties" id="configure-widgets"
-                                               className="disabled-block-container">
-                                               <div attribute-test="policywindowpropertiesb" className="modal-body row">
-                                                       <div className="panel panel-default col-sm-10 policyPanel">
-                                                               <form id="operationalPolicyHeaderForm" className="form-horizontal">
-                                                                       <div className="form-group clearfix">
-                                                                               <label className="col-sm-2">Parent policy</label>
-                                                                               <div className="col-sm-3" style={{ padding: '0px' }}>
-                                                                                       {this.renderPolicyIdSelect()}
-                                                                               </div>
-
-                                                                               <label htmlFor="timeout" className="col-sm-3"
-                                                                                       style={{ paddingLeft: '5px', paddingRight: '10px' }}>Overall
-                                                                                       Time Limit</label>
-                                                                               <div className="col-sm-2" style={{ paddingLeft: '0px' }}>
-                                                                                       <input type="text" ng-pattern="/^[0-9]*$/" ng-model="number"
-                                                                                               className="form-control" id="timeout" name="timeout" />
-                                                                               </div>
-
-                                                                               <label htmlFor="abatement" className="col-sm-2">Abatement</label>
-                                                                               <div className="col-sm-2" style={{ paddingLeft: '0px' }}>
-                                                                                       <select className="form-control" id="abatement" name="abatement">
-                                                                                               <option value="false">False</option>
-                                                                                               <option value="true">True</option>
-                                                                                       </select>
-                                                                               </div>
-                                                                       </div>
-                                                                       <div className="form-group clearfix row">
-                                                                               <label className="col-sm-4 control-label" htmlFor="clname">ControlLoopName</label>
-                                                                               <div className="col-sm-8">
-                                                                                       <input type="text" className="form-control" name="controlLoopName"
-                                                                                               readOnly="readonly" id="clname" value={this.state.loopCache.getLoopName()} />
-                                                                               </div>
-                                                                       </div>
-                                                               </form>
-                                                               <div className="panel-heading" style={{ backgroundColor: 'white' }}>
-                                                                       <ul id="nav_Tabs" className="nav nav-tabs">
-                                                                               <li>
-                                                                                       <a id="add_one_more" href="#desc_tab">
-                                                                                               <span
-                                                                                                       className="glyphicon glyphicon-plus" aria-hidden="true">
-                                                                                               </span>
-                                                                                       </a>
-                                                                               </li>
-                                                                       </ul>
-                                                               </div>
-                                                               <div className="panel-body">
-                                                                       <div className="tab-content">
-                                                                               <div id="properties_tab" className="tab-pane fade in active"></div>
-                                                                       </div>
-                                                               </div>
-                                                       </div>
-
-                                                       <span id="formSpan" style={{ display: 'none' }}>
-                                                               <form className="policyProperties form-horizontal"
-                                                                       style={{ border: '2px dotted gray' }}
-                                                                       title="Operational Policy Properties">
-                                                                       <div className="form-group clearfix">
-                                                                               <label className="col-sm-4 control-label" htmlFor="id">ID</label>
-                                                                               <div className="col-sm-8">
-                                                                                       <input type="text" className="form-control" name="id" id="id"
-                                                                                               onKeyUp="updateTabLabel($event)" />
-                                                                                       <span >ID must be unique</span>
-                                                                               </div>
-                                                                       </div>
-                                                                       <div className="form-group clearfix">
-                                                                               <label className="col-sm-4 control-label" htmlFor="recipe">Recipe</label>
-                                                                               <div className="col-sm-8">
-                                                                                       <select className="form-control" name="recipe" id="recipe"
-                                                                                               ng-model="recipe" ng-click="updateGuardRecipe($event)">
-                                                                                               <option value="">-- choose an option --</option>
-                                                                                               <option value="Restart">Restart</option>
-                                                                                               <option value="Rebuild">Rebuild</option>
-                                                                                               <option value="Migrate">Migrate</option>
-                                                                                               <option value="Health-Check">Health-Check</option>
-                                                                                               <option value="ModifyConfig">ModifyConfig</option>
-                                                                                               <option value="VF Module Create">VF Module Create</option>
-                                                                                               <option value="VF Module Delete">VF Module Delete</option>
-                                                                                               <option value="Reroute">Reroute</option>
-                                                                                       </select>
-                                                                               </div>
-                                                                       </div>
-                                                                       <div className="form-group clearfix">
-                                                                               <label htmlFor="retry" className="col-sm-4 control-label"> Retry</label>
-                                                                               <div className="col-sm-8">
-                                                                                       <input type="text" maxLength="5" className="form-control" id="retry"
-                                                                                               ng-pattern="/^[0-9]*$/" ng-model="number" name="retry">
-                                                                                       </input>
-                                                                               </div>
-                                                                       </div>
-                                                                       <div className="form-group clearfix">
-                                                                               <label htmlFor="timeout" className="col-sm-4 control-label">
-                                                                                       Timeout</label>
-                                                                               <div className="col-sm-8">
-                                                                                       <input type="text" maxLength="5" className="form-control"
-                                                                                               id="timeout" ng-pattern="/^[0-9]*$/" ng-model="number"
-                                                                                               name="timeout"></input>
-                                                                               </div>
-                                                                       </div>
-
-                                                                       <div className="form-group clearfix">
-                                                                               <label htmlFor="actor" className="col-sm-4 control-label"> Actor</label>
-                                                                               <div className="col-sm-8">
-                                                                                       <select className="form-control" id="actor" name="actor" ng-click="updateGuardActor($event)" ng-model="actor">
-                                                                                               <option value="">-- choose an option --</option>
-                                                                                               <option value="APPC">APPC</option>
-                                                                                               <option value="SO">SO</option>
-                                                                                               <option value="VFC">VFC</option>
-                                                                                               <option value="SDNC">SDNC</option>°
-                                                                                       <option value="SDNR">SDNR</option>°
-                                                                               </select>
-                                                                               </div>
-
-                                                                               <label htmlFor="payload" className="col-sm-4 control-label">
-                                                                                       Payload (YAML)</label>
-                                                                               <div className="col-sm-8">
-                                                                                       <textarea className="form-control" id="payload" name="payload"></textarea>
-                                                                               </div>
-                                                                       </div>
-                                                                       <div className="form-group clearfix">
-                                                                               <label htmlFor="success" className="col-sm-4 control-label">When
-                                                                               Success</label>
-                                                                               <div className="col-sm-8">
-                                                                                       <select className="form-control" id="success" name="success"
-                                                                                               ng-model="null_dump"
-                                                                                               ng-options="policy for policy in policy_ids track by policy">
-                                                                                               <option value="">-- choose an option --</option>
-                                                                                       </select>
-                                                                               </div>
-                                                                       </div>
-                                                                       <div className="form-group clearfix">
-                                                                               <label htmlFor="failure" className="col-sm-4 control-label">When
-                                                                               Failure</label>
-                                                                               <div className="col-sm-8">
-                                                                                       <select className="form-control" id="failure" name="failure"
-                                                                                               ng-model="null_dump"
-                                                                                               ng-options="policy for policy in policy_ids track by policy">
-                                                                                               <option value="">-- choose an option --</option>
-                                                                                       </select>
-
-                                                                               </div>
-                                                                       </div>
-                                                                       <div className="form-group clearfix">
-                                                                               <label htmlFor="failure_timeout" className="col-sm-4 control-label">When
-                                                                               Failure Timeout</label>
-                                                                               <div className="col-sm-8">
-                                                                                       <select className="form-control" id="failure_timeout"
-                                                                                               name="failure_timeout" ng-model="null_dump"
-                                                                                               ng-options="policy for policy in policy_ids track by policy">
-                                                                                               <option value="">-- choose an option --</option>
-                                                                                       </select>
-                                                                               </div>
-                                                                       </div>
-                                                                       <div className="form-group clearfix">
-                                                                               <label htmlFor="failure_retries" className="col-sm-4 control-label">When
-                                                                               Failure Retries</label>
-                                                                               <div className="col-sm-8">
-                                                                                       <select className="form-control" id="failure_retries"
-                                                                                               name="failure_retries" ng-model="null_dump"
-                                                                                               ng-options="policy for policy in policy_ids track by policy">
-                                                                                               <option value="">-- choose an option --</option>
-                                                                                       </select>
-                                                                               </div>
-                                                                       </div>
-                                                                       <div className="form-group clearfix">
-                                                                               <label htmlFor="failure_exception" className="col-sm-4 control-label">When
-                                                                               Failure Exception</label>
-                                                                               <div className="col-sm-8">
-                                                                                       <select className="form-control" id="failure_exception"
-                                                                                               name="failure_exception" ng-model="null_dump"
-                                                                                               ng-options="policy for policy in policy_ids track by policy">
-                                                                                               <option value="">-- choose an option --</option>
-                                                                                       </select>
-                                                                               </div>
-                                                                       </div>
-                                                                       <div className="form-group clearfix">
-                                                                               <label htmlFor="failure_guard" className="col-sm-4 control-label">When
-                                                                               Failure Guard</label>
-                                                                               <div className="col-sm-8">
-                                                                                       <select className="form-control" id="failure_guard"
-                                                                                               name="failure_guard" ng-model="null_dump"
-                                                                                               ng-options="policy for policy in policy_ids track by policy">
-                                                                                               <option value="">-- choose an option --</option>
-                                                                                       </select>
-                                                                               </div>
-                                                                       </div>
-                                                               </form>
-                                                               <form className="policyTarget form-horizontal"
-                                                                       title="Operational Policy Target" style={{ border: '2px dotted gray' }}>
-                                                                       <div className="form-group clearfix">
-                                                                               <label htmlFor="type" className="col-sm-4 control-label"> Target
-                                                                               Type</label>
-                                                                               <div className="col-sm-8">
-                                                                                       <select className="form-control" name="type" id="type"
-                                                                                               ng-click="initTargetResourceId($event)" ng-model="type">
-                                                                                               <option value="">-- choose an option --</option>
-                                                                                               <option value="VFMODULE">VFMODULE</option>
-                                                                                               <option value="VM">VM</option>
-                                                                                               <option value="VNF">VNF</option>
-                                                                                       </select>
-                                                                               </div>
-                                                                       </div>
-                                                                       <div className="form-group clearfix">
-                                                                               <label htmlFor="resourceID" className="col-sm-4 control-label">
-                                                                                       Target ResourceId</label>
-                                                                               <div className="col-sm-8">
-                                                                                       <select className="form-control" name="resourceID" id="resourceID"
-                                                                                               ng-click="changeTargetResourceId($event)"
-                                                                                               ng-model="resourceId">
-                                                                                               <option value="">-- choose an option --</option>
-                                                                                       </select>
-                                                                               </div>
-                                                                       </div>
-                                                                       <div id="metadata">
-                                                                               <div className="form-group clearfix">
-                                                                                       <label htmlFor="modelInvariantId" className="col-sm-4 control-label">
-                                                                                               Model Invariant Id</label>
-                                                                                       <div className="col-sm-8">
-                                                                                               <input className="form-control" name="modelInvariantId"
-                                                                                                       id="modelInvariantId" readOnly />
-                                                                                       </div>
-                                                                               </div>
-                                                                               <div className="form-group clearfix">
-                                                                                       <label htmlFor="modelVersionId" className="col-sm-4 control-label">
-                                                                                               Model Version Id</label>
-                                                                                       <div className="col-sm-8">
-                                                                                               <input className="form-control" name="modelVersionId"
-                                                                                                       id="modelVersionId" readOnly />
-                                                                                       </div>
-                                                                               </div>
-                                                                               <div className="form-group clearfix">
-                                                                                       <label htmlFor="modelName" className="col-sm-4 control-label">
-                                                                                               Model Name</label>
-                                                                                       <div className="col-sm-8">
-                                                                                               <input className="form-control" name="modelName" id="modelName"
-                                                                                                       readOnly />
-                                                                                       </div>
-                                                                               </div>
-                                                                               <div className="form-group clearfix">
-                                                                                       <label htmlFor="modelVersion" className="col-sm-4 control-label">
-                                                                                               Model Version</label>
-                                                                                       <div className="col-sm-8">
-                                                                                               <input className="form-control" name="modelVersion"
-                                                                                                       id="modelVersion" readOnly />
-                                                                                       </div>
-                                                                               </div>
-                                                                               <div className="form-group clearfix">
-                                                                                       <label htmlFor="modelCustomizationId" className="col-sm-4 control-label">
-                                                                                               Model Customization Id</label>
-                                                                                       <div className="col-sm-8">
-                                                                                               <input className="form-control" name="modelCustomizationId"
-                                                                                                       id="modelCustomizationId" readOnly />
-                                                                                       </div>
-                                                                               </div>
-                                                                       </div>
-                                                               </form>
-                                                               <div className="form-group clearfix">
-                                                                       <label htmlFor="enableGuardPolicy" className="col-sm-4 control-label">
-                                                                               Enable Guard Policy</label>
-                                                                       <div className="col-sm-8">
-                                                                               <input type="checkbox" className="form-control"
-                                                                                       name="enableGuardPolicy" id="enableGuardPolicy" />
-                                                                       </div>
-
-                                                                       <div className="col-sm-8">
-                                                                               <label htmlFor="guardPolicyType" className="col-sm-4 control-label">
-                                                                                       Guard Policy Type</label> <select className="form-control"
-                                                                                               name="guardPolicyType" id="guardPolicyType"
-                                                                                               ng-click="changeGuardPolicyType()" ng-model="guardType">
-                                                                                       <option value="GUARD_MIN_MAX">MinMax</option>
-                                                                                       <option value="GUARD_YAML">FrequencyLimiter</option>
-                                                                               </select>
-                                                                       </div>
-                                                               </div>
-                                                               <form className="guardProperties form-horizontal"
-                                                                       title="Guard policy associated" style={{ border: '2px dotted gray' }}>
-
-                                                                       <div className="form-group clearfix withnote">
-                                                                               <label className="col-sm-4 control-label" htmlFor="id">Guard Policy ID</label>
-                                                                               <div className="col-sm-8">
-                                                                                       <input type="text" className="form-control" name="id" id="id" ng-blur="changeGuardId()" ng-model="id" />
-                                                                               </div>
-                                                                       </div>
-                                                                       <div>
-                                                                               <label className="form-group note">Note: Prefix will be added to Guard Policy ID automatically based on Guard Policy Type</label>
-                                                                       </div>
-                                                                       <div className="form-group clearfix">
-                                                                               <label className="col-sm-4 control-label" htmlFor="recipe">Recipe</label>
-                                                                               <div className="col-sm-8">
-                                                                                       <input type="text" className="form-control" name="recipe"
-                                                                                               readOnly="readonly" id="recipe" />
-                                                                               </div>
-                                                                       </div>
-                                                                       <div className="form-group clearfix">
-                                                                               <label className="col-sm-4 control-label" htmlFor="clname">ControlLoopName</label>
-                                                                               <div className="col-sm-8">
-                                                                                       <input type="text" className="form-control" name="clname"
-                                                                                               readOnly="readonly" id="clname" ng-model="clname" />
-                                                                               </div>
-                                                                       </div>
-                                                                       <div className="form-group clearfix">
-                                                                               <label htmlFor="actor" className="col-sm-4 control-label">Actor</label>
-                                                                               <div className="col-sm-8">
-                                                                                       <input type="text" className="form-control" name="actor"
-                                                                                               readOnly="readonly" id="actor" />
-                                                                               </div>
-                                                                       </div>
-                                                                       <div className="form-group clearfix">
-
-                                                                               <label htmlFor="targets" className="col-sm-4 control-label">Guard
-                                                                               targets</label>
-                                                                               <div className="col-sm-8">
-                                                                                       <input className="form-control" name="targets" id="targets" />
-                                                                               </div>
-                                                                       </div>
-
-                                                                       <div className="form-group clearfix" id="minMaxGuardPolicyDiv">
-                                                                               <label htmlFor="min" className="col-sm-4 control-label"> Min
-                                                                               Guard</label>
-                                                                               <div className="col-sm-8">
-                                                                                       <input className="form-control" name="min" id="min" />
-                                                                               </div>
-                                                                               <label htmlFor="max" className="col-sm-4 control-label"> Max
-                                                                               Guard</label>
-                                                                               <div className="col-sm-8">
-                                                                                       <input className="form-control" name="max" id="max" />
-                                                                               </div>
-                                                                       </div>
-                                                                       <div className="form-group clearfix"
-                                                                               id="frequencyLimiterGuardPolicyDiv" style={{ display: 'none' }}>
-                                                                               <label htmlFor="limit" className="col-sm-4 control-label">Limit</label>
-                                                                               <div className="col-sm-8">
-                                                                                       <input className="form-control" name="limit" id="limit" />
-                                                                               </div>
-                                                                               <label htmlFor="timeUnits" className="col-sm-4 control-label">Time Units</label>
-                                                                               <div className="col-sm-8">
-                                                                                       <select className="form-control" name="timeUnits"
-                                                                                               id="timeUnits">
-                                                                                               <option value=""></option>
-                                                                                               <option value="minute">minute</option>
-                                                                                               <option value="hour">hour</option>
-                                                                                               <option value="day">day</option>
-                                                                                               <option value="week">week</option>
-                                                                                               <option value="month">month</option>
-                                                                                               <option value="year">year</option>
-                                                                                       </select>
-                                                                               </div>
-                                                                               <label htmlFor="timeWindow" className="col-sm-4 control-label">Time     Window</label>
-                                                                               <div className="col-sm-8">
-                                                                                       <input className="form-control" name="timeWindow" id="timeWindow" />
-                                                                               </div>
-                                                                       </div>
-                                                                       <div className="form-group clearfix">
-                                                                               <label htmlFor="guardActiveStart" className="col-sm-4 control-label">
-                                                                                       Guard Active Start</label>
-                                                                               <div className="col-sm-8">
-                                                                                       <input className="form-control" name="guardActiveStart"
-                                                                                               id="guardActiveStart" value="00:00:00Z" />
-                                                                               </div>
-                                                                               <label htmlFor="guardActiveEnd" className="col-sm-4 control-label">
-                                                                                       Guard Active End</label>
-                                                                               <div className="col-sm-8">
-                                                                                       <input className="form-control" name="guardActiveEnd"
-                                                                                               id="guardActiveEnd" value="00:00:01Z" />
-                                                                               </div>
-                                                                       </div>
-
-                                                               </form>
-
-                                                       </span>
-                                               </div>
-                                       </div>
+                                       <div id="editor" />
 
                                </Modal.Body>
                                <Modal.Footer>
                                        <Button variant="secondary" onClick={this.handleClose}>
                                                Close
                    </Button>
-                                       <Button variant="primary" onClick={this.handleClose}>
+                                       <Button variant="primary" onClick={this.handleSave}>
                                                Save Changes
                    </Button>
                                </Modal.Footer>
diff --git a/ui-react/src/components/dialogs/PerformActions.js b/ui-react/src/components/dialogs/PerformActions.js
new file mode 100644 (file)
index 0000000..9c34e14
--- /dev/null
@@ -0,0 +1,85 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights
+ *                             reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END============================================
+ * ===================================================================
+ *
+ */
+import React from 'react';
+import LoopActionService from '../../api/LoopActionService';
+import Spinner from 'react-bootstrap/Spinner'
+import styled from 'styled-components';
+
+const StyledSpinnerDiv = styled.div`
+       justify-content: center !important;
+       display: flex !important;
+`;
+
+export default class PerformActions extends React.Component {
+       state = {
+               loopName: this.props.loopCache.getLoopName(),
+               loopAction: this.props.loopAction
+       };
+       constructor(props, context) {
+               super(props, context);
+
+               this.refreshStatus = this.refreshStatus.bind(this);
+       }
+       componentWillReceiveProps(newProps) {
+               this.setState({
+                       loopName: newProps.loopCache.getLoopName(),
+                       loopAction: newProps.loopAction
+               });
+       }
+
+       componentDidMount() {
+               const action = this.state.loopAction;
+               const loopName = this.state.loopName;
+               console.log("Perform action:" + action);
+               LoopActionService.performAction(loopName, action).then(pars => {
+                       alert("Action " + action + " successfully performed");
+                       // refresh status and update loop logs
+                       this.refreshStatus(loopName);
+               })
+               .catch(error => {
+                       alert("Action " + action + " failed");
+                       // refresh status and update loop logs
+                       this.refreshStatus(loopName);
+               });
+
+       }
+
+       refreshStatus(loopName) {
+               LoopActionService.refreshStatus(loopName).then(data => {
+                       this.props.updateLoopFunction(data);
+                       this.props.history.push('/');
+               })
+                       .catch(error => {
+                       this.props.history.push('/');
+               });
+       }
+
+       render() {
+               return (
+                       <StyledSpinnerDiv>
+                               <Spinner animation="border" role="status">
+                               </Spinner>
+                       </StyledSpinnerDiv>
+               );
+       }
+}
diff --git a/ui-react/src/components/dialogs/RefreshStatus.js b/ui-react/src/components/dialogs/RefreshStatus.js
new file mode 100644 (file)
index 0000000..cf08655
--- /dev/null
@@ -0,0 +1,66 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights
+ *                             reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END============================================
+ * ===================================================================
+ *
+ */
+import React from 'react';
+import LoopActionService from '../../api/LoopActionService';
+import Spinner from 'react-bootstrap/Spinner'
+import styled from 'styled-components';
+
+const StyledSpinnerDiv = styled.div`
+       justify-content: center !important;
+       display: flex !important;
+`;
+
+export default class RefreshStatus extends React.Component {
+       state = {
+               loopName: this.props.loopCache.getLoopName()
+       };
+
+       componentWillReceiveProps(newProps) {
+               this.setState({
+                       loopName: newProps.loopCache.getLoopName()
+               });
+       }
+
+       componentDidMount() {
+               console.log("Refresh status for: " + this.state.loopName);
+               // refresh status and update loop logs
+               LoopActionService.refreshStatus(this.state.loopName).then(data => {
+                       alert("Status successfully refreshed")
+                       this.props.updateLoopFunction(data);
+                       this.props.history.push('/');
+               })
+               .catch(error => {
+                       alert("Status refreshing failed");
+                       this.props.history.push('/');
+               });
+       }
+
+       render() {
+               return (
+                       <StyledSpinnerDiv>
+                               <Spinner animation="border" role="status">
+                               </Spinner>
+                       </StyledSpinnerDiv>
+               );
+       }
+}
index b8d68b8..7d81b38 100644 (file)
@@ -39,7 +39,6 @@ export default class UserInfo extends React.Component {
                super(props, context);
 
                this.handleClose = this.handleClose.bind(this);
-               this.initialValues = this.initialValues.bind(this);
                this.renderReadTemplatePermission = this.renderReadTemplatePermission.bind(this);
                this.renderReadModelPermission = this.renderReadModelPermission.bind(this);
                this.renderReadToscaPermission = this.renderReadToscaPermission.bind(this);
@@ -49,23 +48,15 @@ export default class UserInfo extends React.Component {
                this.renderUserName = this.renderUserName.bind(this);
                this.state = {
                        show: true,
-                       userInfo: {permissionReadTemplate: true,
-                                               permissionReadCl: true,
-                                               permissionReadTosca: true,
-                                               permissionUpdateCl: true,
-                                               permissionUpdateTemplate: true,
-                                               permissionUpdateTosca: true,
-                                               userName: 'admin',
-                                               cldsVersion: '1.0.0'
-                                               }
+                       userInfo: {}
                };
-
        }
-       initialValues() {
+       componentWillMount() {
                UserService.getUserInfo().then(userInfo => {
                        this.setState({ userInfo: userInfo })
                });
        }
+
        handleClose() {
                        this.props.history.push('/');
        }
@@ -127,7 +118,7 @@ export default class UserInfo extends React.Component {
        }
        render() {
                return (
-                       <ModalStyled size="lg"  show={this.state.show} onHide={this.handleClose} onEntered={this.initialValues}>
+                       <ModalStyled size="lg"  show={this.state.show} onHide={this.handleClose}>
                                <Modal.Header closeButton>
                                        <Modal.Title>User Info</Modal.Title>
                                </Modal.Header>
index 3ac2f31..1b1e242 100644 (file)
@@ -61,13 +61,14 @@ class LoopViewSvg extends React.Component {
                return this.state.svgContent !== nextState.svgContent;
        }
 
-       componentWillReceiveProps(newProps) {
-               this.setState({
-                       loopCache: newProps.loopCache,
-                       componentModalMapping: LoopComponentConverter.buildMapOfComponents(newProps.loopCache),
-
-               });
-               this.getSvg(newProps.loopCache.getLoopName());
+       componentWillReceiveProps(newProps) {   
+               if (this.state.loopCache !== newProps.loopCache) {
+                       this.setState({
+                               loopCache: newProps.loopCache,
+                               componentModalMapping: LoopComponentConverter.buildMapOfComponents(newProps.loopCache),
+                       });
+                       this.getSvg(newProps.loopCache.getLoopName());
+               }
        }
 
        getSvg(loopName) {
@@ -79,6 +80,8 @@ class LoopViewSvg extends React.Component {
                                        this.setState({ svgContent: LoopViewSvg.emptySvg })
                                }
                        });
+               } else {
+                       this.setState({ svgContent: LoopViewSvg.emptySvg })
                }
        }
 
index 811a48b..b68e237 100644 (file)
  *
  */
 import React from 'react';
+import Nav from 'react-bootstrap/Nav';
 import Navbar from 'react-bootstrap/Navbar';
 import NavDropdown from 'react-bootstrap/NavDropdown';
+import LoopUI from '../../LoopUI';
 import 'bootstrap-css-only/css/bootstrap.min.css';
 import styled from 'styled-components';
-import { Link } from 'react-router-dom'
-
-const StyledNavDropdownItem = styled(NavDropdown.Item)`
-       color: ${props => props.theme.menuFontColor};
-       background-color: ${props => props.theme.menuBackgroundColor};
-       :hover {
-                       background-color: ${props => props.theme.menuHighlightedBackgroundColor};
-                       color:  ${props => props.theme.menuHighlightedFontColor};
-       }
-`;
+import { Link } from 'react-router-dom';
 
 const StyledLink = styled(Link)`
-       color: ${props => props.theme.menuColor};
+       color: ${props => props.theme.menuFontColor};
        background-color: ${props => props.theme.menuBackgroundColor};
        font-weight: normal;
        display: block;
@@ -48,37 +41,73 @@ const StyledLink = styled(Link)`
        white-space: nowrap;
        border: 0;
        :hover {
-                       text-decoration: none;
-                       background-color: ${props => props.theme.loopViewerHeaderBackgroundColor};
-                       color:  ${props => props.theme.loopViewerHeaderFontColor};
+               text-decoration: none;
+               background-color: ${props => props.theme.menuHighlightedBackgroundColor};
+               color:  ${props => props.theme.menuHighlightedFontColor};
+       }
+`;
+const StyledNavLink = styled(Nav.Link)`
+       color: ${props => props.theme.menuFontColor};
+       background-color: ${props => props.theme.menuBackgroundColor};
+       font-weight: normal;
+       padding: .25rem 1.5rem;
+       :hover {
+               background-color: ${props => props.theme.menuHighlightedBackgroundColor};
+               color:  ${props => props.theme.menuHighlightedFontColor};
+       }
+`;
+
+const StyledNavDropdown = styled(NavDropdown)`
+       color: ${props => props.theme.menuFontColor};
+       & .dropdown-toggle {
+       color: ${props => props.theme.menuFontColor};
+       background-color: ${props => props.theme.backgroundColor};
+       font-weight: normal;
+               :hover {
+                               font-weight: bold;
+               }
        }
 `;
 
 export default class MenuBar extends React.Component {
+       state = {
+               loopName: this.props.loopName,
+               disabled: true
+       };
+
+       componentWillReceiveProps(newProps) {
+               if (newProps.loopName !== LoopUI.defaultLoopName) {
+                       this.setState({ disabled: false });
+               } else {
+                       this.setState({ disabled: true });
+               }
+       }
+
        render () {
                return (
-                               <Navbar.Collapse id="basic-navbar-nav" className="justify-content-center">
-                                       <NavDropdown title="Closed Loop" id="basic-nav-dropdown">
-                                               <StyledNavDropdownItem as={StyledLink} to="/openLoop">Open CL</StyledNavDropdownItem>
-                                               <StyledNavDropdownItem as={StyledLink} to="/loopProperties">Properties CL</StyledNavDropdownItem>
-                                               <StyledNavDropdownItem as={StyledLink} to="/closeLoop">Close Model</StyledNavDropdownItem>
-                                       </NavDropdown>
-                                       <NavDropdown title="Manage" id="basic-nav-dropdown">
-                                               <StyledNavDropdownItem as={StyledLink} to="/operationalPolicyModal">Submit</StyledNavDropdownItem>
-                                               <StyledNavDropdownItem as={StyledLink} to="#action/3.2">Stop</StyledNavDropdownItem>
-                                               <StyledNavDropdownItem as={StyledLink} to="#action/3.3">Restart</StyledNavDropdownItem>
-                                               <StyledNavDropdownItem as={StyledLink} to="#action/3.3">Delete</StyledNavDropdownItem>
-                                               <StyledNavDropdownItem as={StyledLink} to="#action/3.3">Deploy</StyledNavDropdownItem>
-                                               <StyledNavDropdownItem as={StyledLink} to="#action/3.3">UnDeploy</StyledNavDropdownItem>
-                                       </NavDropdown>
-                                       <NavDropdown title="View" id="basic-nav-dropdown">
-                                               <StyledNavDropdownItem as={StyledLink} to="#action/3.1">Refresh Status</StyledNavDropdownItem>
-                                       </NavDropdown>
-                                       <NavDropdown title="Help" id="basic-nav-dropdown">
-                                               <StyledNavDropdownItem href="https://wiki.onap.org/" target="_blank">Wiki</StyledNavDropdownItem>
-                                               <StyledNavDropdownItem href="mailto:onap-discuss@lists.onap.org?subject=CLAMP&body=Please send us suggestions or feature enhancements or defect. If possible, please send us the steps to replicate any defect.">Contact Us</StyledNavDropdownItem>
-                                               <StyledNavDropdownItem as={StyledLink} to="/userInfo">User Info</StyledNavDropdownItem>
-                                       </NavDropdown>
+
+                               <Navbar.Collapse>
+                                       <StyledNavDropdown title="Closed Loop">
+                                                       <NavDropdown.Item as={StyledLink} to="/openLoop">Open CL</NavDropdown.Item>
+                                                       <NavDropdown.Item as={StyledLink} to="/loopProperties" disabled={this.state.disabled}>Properties CL</NavDropdown.Item>
+                                                       <NavDropdown.Item as={StyledLink} to="/closeLoop" disabled={this.state.disabled}>Close Model</NavDropdown.Item>
+                                       </StyledNavDropdown>
+                                       <StyledNavDropdown title="Manage">
+                                                       <NavDropdown.Item as={StyledLink} to="/submit" disabled={this.state.disabled}>Submit</NavDropdown.Item>
+                                                       <NavDropdown.Item as={StyledLink} to="/stop" disabled={this.state.disabled}>Stop</NavDropdown.Item>
+                                                       <NavDropdown.Item as={StyledLink} to="/restart" disabled={this.state.disabled}>Restart</NavDropdown.Item>
+                                                       <NavDropdown.Item as={StyledLink} to="/delete" disabled={this.state.disabled}>Delete</NavDropdown.Item>
+                                                       <NavDropdown.Item as={StyledLink} to="/deploy" disabled={this.state.disabled}>Deploy</NavDropdown.Item>
+                                                       <NavDropdown.Item as={StyledLink} to="/undeploy" disabled={this.state.disabled}>UnDeploy</NavDropdown.Item>
+                                       </StyledNavDropdown>
+                                       <StyledNavDropdown title="View">
+                                                       <NavDropdown.Item as={StyledLink} to="/refreshStatus" disabled={this.state.disabled}>Refresh Status</NavDropdown.Item>
+                                       </StyledNavDropdown>
+                                       <StyledNavDropdown title="Help">
+                                                       <StyledNavLink href="https://wiki.onap.org/" target="_blank">Wiki</StyledNavLink>
+                                                       <StyledNavLink href="mailto:onap-discuss@lists.onap.org?subject=CLAMP&body=Please send us suggestions or feature enhancements or defect. If possible, please send us the steps to replicate any defect.">Contact Us</StyledNavLink>
+                                                       <NavDropdown.Item as={StyledLink} to="/userInfo">User Info</NavDropdown.Item>
+                                       </StyledNavDropdown>
                                </Navbar.Collapse>
                );
        }
index 39df364..dd83096 100644 (file)
 import React from 'react';
 import ReactDOM from 'react-dom';
 import OnapClamp from './OnapClamp';
-import { Route, BrowserRouter } from 'react-router-dom'
+import { Route, MemoryRouter } from 'react-router-dom'
 
 
 const routing = (
-       <BrowserRouter forceRefresh={false}>
+       <MemoryRouter forceRefresh={false}>
                <Route path="/" component={OnapClamp}/>
-       </BrowserRouter>
+       </MemoryRouter>
 );
 
-ReactDOM.render(
+export var mainClamp = ReactDOM.render(
        routing,
        document.getElementById('root')
 )
index cbd86b1..a0c338c 100644 (file)
 import { createGlobalStyle } from 'styled-components';
 
 export const GlobalClampStyle = createGlobalStyle`
-  body {
-    padding: 0;
-    margin: 0;
-    font-family: ${props => props.theme.fontFamily};
-    font-size: ${props => props.theme.fontSize};
-    font-weight: normal;
-    color: ${props => props.theme.fontNormal};
-    background-color: ${props => props.theme.backgroundColor};
-  }
+       body {
+               padding: 0;
+               margin: 0;
+               font-family: ${props => props.theme.fontFamily};
+               font-size: ${props => props.theme.fontSize};
+               font-weight: normal;
+       }
 
- span {
-       font-family: ${props => props.theme.fontFamily};
-    font-size: ${props => props.theme.fontSize};
-    font-weight: bold;
-    color: ${props => props.theme.fontNormal};
-    background-color: ${props => props.theme.backgroundColor};
-  }
-  
-  a {
-       font-family: ${props => props.theme.fontFamily};
-    font-size: ${props => props.theme.fontSize};
-    font-weight: bold;
-    color: ${props => props.theme.fontNormal};
-    background-color: ${props => props.theme.backgroundColor};
+       span {
+               font-family: ${props => props.theme.fontFamily};
+               font-size: ${props => props.theme.fontSize};
+               font-weight: bold;
+       }
 
-  }
-  
-  div {
-       font-family: ${props => props.theme.fontFamily};
-    font-size: ${props => props.theme.fontSize};
-       border-radius: 4px;
-       color: ${props => props.theme.fontNormal};
-       background-color: ${props => (props.theme.backgroundColor)};
-       margin-top: 1px;
-  }
+       a {
+               font-family: ${props => props.theme.fontFamily};
+               font-size: ${props => props.theme.fontSize};
+               font-weight: bold;
+       }
 
-  svg {
-       overflow: hidden;
-       width: 100%;
-       height: 100%;
-  }
+       div {
+               font-family: ${props => props.theme.fontFamily};
+               font-size: ${props => props.theme.fontSize};
+               border-radius: 4px;
+               margin-top: 1px;
+       }
+
+       svg {
+               overflow: hidden;
+               width: 100%;
+               height: 100%;
+       }
+
+       label {
+               font-family: ${props => props.theme.fontFamily};
+               font-size: ${props => props.theme.fontSize};
+               font-weight: bold;
+       }
+
+       button {
+               font-family: ${props => props.theme.fontFamily};
+               font-size: ${props => props.theme.fontSize};
+               font-weight: bold;
+       }
 `
 
 export const DefaultClampTheme = {
@@ -77,7 +80,7 @@ export const DefaultClampTheme = {
 
        backgroundColor: '#eeeeee',
        fontFamily: 'Arial, Sans-serif',
-       fontSize: '15px',
+       fontSize: '16px',
 
        loopViewerBackgroundColor: 'white',
        loopViewerFontColor: 'yellow',