diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index db92e7a053f0f228021f2870f632db4250556101..8f54bec82cc5f6db4c85007bffb7dc2818a40293 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -20,13 +20,7 @@ tslint: allow_failure: false dependencies: [] script: - - echo "{}" > package.json - - npm install tslint-angular - - npm install tslint-eslint-rules - - npm install @angular/compiler - - npm install @angular/core - - npm install typescript - - npm install rxjs + - npm install - node_modules/tslint/bin/tslint -p ./tsconfig.json -c ./tslint.json --project unit_tests: diff --git a/THEME-README.md b/THEME-README.md new file mode 100644 index 0000000000000000000000000000000000000000..2e2a7831d4f1dfccbe1cc18449365114515687e8 --- /dev/null +++ b/THEME-README.md @@ -0,0 +1,19 @@ +# How to add a new Theme + +## Preparation + +Create a new directory with the name of the new theme in src/theme. + +## Create new theme + +1. Create a new scss file with the same structure as `_dark-theme.scss` and style it using material palette. + +2. Create a new scss file in your working theme directory named {YourThemeName}.const.ts and copy the structure of `darkTheme.const.ts`. + +## Add new theme to theme manager + +Import the file in `styles.scss` and add the new theme to theme menu in `header.component.html`. + +## Configure your theme + +Start editing the variables and see the magic happen. We recommend to use [material colors](https://material.io/tools/color). diff --git a/authors.md b/authors.md index fab184e4601ae0a23c27e78111b54c72befc0e63..6e1cdd453da5f26d15bbd606ebd4f7770fe163e7 100644 --- a/authors.md +++ b/authors.md @@ -8,3 +8,10 @@ * thomas.lenz@mni.thm.de * lorenz.detterbeck@mni.thm.de * lukas.mauss@mni.thm.de +* louis.peter@mni.thm.de +* mariana.baho@mni.thm.de +* berna.tuelek@mni.thm.de +* thisari.muthuwahandi@mni.thm.de +* sebastian.wittek@mni.thm.de +* anris.ceta@mni.thm.de +* thomas.gross@mni.thm.de diff --git a/docs/comments_diagrams.mdj b/docs/comments_diagrams.mdj new file mode 100644 index 0000000000000000000000000000000000000000..b7295da036cbe8881efaa1b25647af627668003b --- /dev/null +++ b/docs/comments_diagrams.mdj @@ -0,0 +1,14458 @@ +{ + "_type": "Project", + "_id": "AAAAAAFF+h6SjaM2Hec=", + "name": "Untitled", + "ownedElements": [ + { + "_type": "UMLModel", + "_id": "AAAAAAFpe7xMGqH7VRk=", + "_parent": { + "$ref": "AAAAAAFF+h6SjaM2Hec=" + }, + "name": "Model1", + "ownedElements": [ + { + "_type": "UMLUseCaseDiagram", + "_id": "AAAAAAFpe7xMGqH8A8A=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH7VRk=" + }, + "name": "UseCaseDiagram1", + "ownedViews": [ + { + "_type": "UMLActorView", + "_id": "AAAAAAFpe7yoQKIFgzc=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe7yoQKIDgWo=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFpe7yoQKIG1zM=", + "_parent": { + "$ref": "AAAAAAFpe7yoQKIFgzc=" + }, + "model": { + "$ref": "AAAAAAFpe7yoQKIDgWo=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFpe7yoQaIHDrA=", + "_parent": { + "$ref": "AAAAAAFpe7yoQKIG1zM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -752, + "top": -448, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe7yoQaIIREM=", + "_parent": { + "$ref": "AAAAAAFpe7yoQKIG1zM=" + }, + "font": "Arial;13;1", + "left": 37, + "top": 206, + "width": 103, + "height": 13, + "text": "Dozent" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe7yoQaIJyDE=", + "_parent": { + "$ref": "AAAAAAFpe7yoQKIG1zM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -752, + "top": -448, + "width": 80.9072265625, + "height": 13, + "text": "(from Model1)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe7yoQqIKbPg=", + "_parent": { + "$ref": "AAAAAAFpe7yoQKIG1zM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -752, + "top": -448, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 32, + "top": 199, + "width": 113, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAFpe7yoQaIHDrA=" + }, + "nameLabel": { + "$ref": "AAAAAAFpe7yoQaIIREM=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFpe7yoQaIJyDE=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe7yoQqIKbPg=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFpe7yoQqILJ+8=", + "_parent": { + "$ref": "AAAAAAFpe7yoQKIFgzc=" + }, + "model": { + "$ref": "AAAAAAFpe7yoQKIDgWo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -376, + "top": -224, + "width": 10, + "height": 10 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFpe7yoQqIMM1w=", + "_parent": { + "$ref": "AAAAAAFpe7yoQKIFgzc=" + }, + "model": { + "$ref": "AAAAAAFpe7yoQKIDgWo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -376, + "top": -224, + "width": 10, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFpe7yoQqINUN4=", + "_parent": { + "$ref": "AAAAAAFpe7yoQKIFgzc=" + }, + "model": { + "$ref": "AAAAAAFpe7yoQKIDgWo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -376, + "top": -224, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFpe7yoQqIO/BU=", + "_parent": { + "$ref": "AAAAAAFpe7yoQKIFgzc=" + }, + "model": { + "$ref": "AAAAAAFpe7yoQKIDgWo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -376, + "top": -224, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 32, + "top": 72, + "width": 113, + "height": 153, + "nameCompartment": { + "$ref": "AAAAAAFpe7yoQKIG1zM=" + }, + "suppressAttributes": true, + "suppressOperations": true, + "attributeCompartment": { + "$ref": "AAAAAAFpe7yoQqILJ+8=" + }, + "operationCompartment": { + "$ref": "AAAAAAFpe7yoQqIMM1w=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFpe7yoQqINUN4=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFpe7yoQqIO/BU=" + } + }, + { + "_type": "UMLActorView", + "_id": "AAAAAAFpe73eVqIx8wc=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe73eVqIvxOo=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFpe73eVqIyr+c=", + "_parent": { + "$ref": "AAAAAAFpe73eVqIx8wc=" + }, + "model": { + "$ref": "AAAAAAFpe73eVqIvxOo=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFpe73eVqIzF/c=", + "_parent": { + "$ref": "AAAAAAFpe73eVqIyr+c=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -384, + "top": 640, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe73eVqI0T7c=", + "_parent": { + "$ref": "AAAAAAFpe73eVqIyr+c=" + }, + "font": "Arial;13;1", + "left": 37, + "top": 910, + "width": 103, + "height": 13, + "text": "Student" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe73eV6I17eI=", + "_parent": { + "$ref": "AAAAAAFpe73eVqIyr+c=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -384, + "top": 640, + "width": 80.9072265625, + "height": 13, + "text": "(from Model1)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe73eV6I2i6k=", + "_parent": { + "$ref": "AAAAAAFpe73eVqIyr+c=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -384, + "top": 640, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 32, + "top": 903, + "width": 113, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAFpe73eVqIzF/c=" + }, + "nameLabel": { + "$ref": "AAAAAAFpe73eVqI0T7c=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFpe73eV6I17eI=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe73eV6I2i6k=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFpe73eV6I3iJU=", + "_parent": { + "$ref": "AAAAAAFpe73eVqIx8wc=" + }, + "model": { + "$ref": "AAAAAAFpe73eVqIvxOo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -192, + "top": 320, + "width": 10, + "height": 10 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFpe73eV6I4PO4=", + "_parent": { + "$ref": "AAAAAAFpe73eVqIx8wc=" + }, + "model": { + "$ref": "AAAAAAFpe73eVqIvxOo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -192, + "top": 320, + "width": 10, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFpe73eV6I5wnc=", + "_parent": { + "$ref": "AAAAAAFpe73eVqIx8wc=" + }, + "model": { + "$ref": "AAAAAAFpe73eVqIvxOo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -192, + "top": 320, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFpe73eV6I6txY=", + "_parent": { + "$ref": "AAAAAAFpe73eVqIx8wc=" + }, + "model": { + "$ref": "AAAAAAFpe73eVqIvxOo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -192, + "top": 320, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 32, + "top": 768, + "width": 113, + "height": 161, + "nameCompartment": { + "$ref": "AAAAAAFpe73eVqIyr+c=" + }, + "suppressAttributes": true, + "suppressOperations": true, + "attributeCompartment": { + "$ref": "AAAAAAFpe73eV6I3iJU=" + }, + "operationCompartment": { + "$ref": "AAAAAAFpe73eV6I4PO4=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFpe73eV6I5wnc=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFpe73eV6I6txY=" + } + }, + { + "_type": "UMLActorView", + "_id": "AAAAAAFpe74tNKJei7k=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe74tNKJcZCg=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFpe74tNKJfUWY=", + "_parent": { + "$ref": "AAAAAAFpe74tNKJei7k=" + }, + "model": { + "$ref": "AAAAAAFpe74tNKJcZCg=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFpe74tNKJgwrM=", + "_parent": { + "$ref": "AAAAAAFpe74tNKJfUWY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -1280, + "top": 48, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe74tNKJhXmc=", + "_parent": { + "$ref": "AAAAAAFpe74tNKJfUWY=" + }, + "font": "Arial;13;1", + "left": 37, + "top": 574, + "width": 103, + "height": 13, + "text": "Moderator" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe74tNKJi4qg=", + "_parent": { + "$ref": "AAAAAAFpe74tNKJfUWY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -1280, + "top": 48, + "width": 80.9072265625, + "height": 13, + "text": "(from Model1)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe74tNaJjZ3w=", + "_parent": { + "$ref": "AAAAAAFpe74tNKJfUWY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -1280, + "top": 48, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 32, + "top": 567, + "width": 113, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAFpe74tNKJgwrM=" + }, + "nameLabel": { + "$ref": "AAAAAAFpe74tNKJhXmc=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFpe74tNKJi4qg=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe74tNaJjZ3w=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFpe74tNaJkfb8=", + "_parent": { + "$ref": "AAAAAAFpe74tNKJei7k=" + }, + "model": { + "$ref": "AAAAAAFpe74tNKJcZCg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -640, + "top": 24, + "width": 10, + "height": 10 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFpe74tNaJlvXo=", + "_parent": { + "$ref": "AAAAAAFpe74tNKJei7k=" + }, + "model": { + "$ref": "AAAAAAFpe74tNKJcZCg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -640, + "top": 24, + "width": 10, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFpe74tNaJmBsE=", + "_parent": { + "$ref": "AAAAAAFpe74tNKJei7k=" + }, + "model": { + "$ref": "AAAAAAFpe74tNKJcZCg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -640, + "top": 24, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFpe74tNaJn1WM=", + "_parent": { + "$ref": "AAAAAAFpe74tNKJei7k=" + }, + "model": { + "$ref": "AAAAAAFpe74tNKJcZCg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -640, + "top": 24, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 32, + "top": 448, + "width": 113, + "height": 145, + "nameCompartment": { + "$ref": "AAAAAAFpe74tNKJfUWY=" + }, + "suppressAttributes": true, + "suppressOperations": true, + "attributeCompartment": { + "$ref": "AAAAAAFpe74tNaJkfb8=" + }, + "operationCompartment": { + "$ref": "AAAAAAFpe74tNaJlvXo=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFpe74tNaJmBsE=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFpe74tNaJn1WM=" + } + }, + { + "_type": "UMLUseCaseSubjectView", + "_id": "AAAAAAFpe7+De6KTf5g=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe7+De6KR5QE=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFpe7+De6KUjEg=", + "_parent": { + "$ref": "AAAAAAFpe7+De6KTf5g=" + }, + "model": { + "$ref": "AAAAAAFpe7+De6KR5QE=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFpe7+De6KVB1o=", + "_parent": { + "$ref": "AAAAAAFpe7+De6KUjEg=" + }, + "visible": false, + "font": "Arial;13;0", + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe7+De6KWXGI=", + "_parent": { + "$ref": "AAAAAAFpe7+De6KUjEg=" + }, + "font": "Arial;13;1", + "left": 205, + "top": 23, + "width": 870, + "height": 13, + "text": "Arsnova-lite comment service" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe7+De6KX7xc=", + "_parent": { + "$ref": "AAAAAAFpe7+De6KUjEg=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 80.9072265625, + "height": 13, + "text": "(from Model1)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe7+De6KY1Tw=", + "_parent": { + "$ref": "AAAAAAFpe7+De6KUjEg=" + }, + "visible": false, + "font": "Arial;13;0", + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 200, + "top": 16, + "width": 880, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAFpe7+De6KVB1o=" + }, + "nameLabel": { + "$ref": "AAAAAAFpe7+De6KWXGI=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFpe7+De6KX7xc=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe7+De6KY1Tw=" + } + } + ], + "font": "Arial;13;0", + "left": 200, + "top": 16, + "width": 880, + "height": 945, + "nameCompartment": { + "$ref": "AAAAAAFpe7+De6KUjEg=" + } + }, + { + "_type": "UMLUseCaseView", + "_id": "AAAAAAFpe8DNKqKvWtE=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8DNKqKt5Jw=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFpe8DNKqKwmGU=", + "_parent": { + "$ref": "AAAAAAFpe8DNKqKvWtE=" + }, + "model": { + "$ref": "AAAAAAFpe8DNKqKt5Jw=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFpe8DNKqKxqRI=", + "_parent": { + "$ref": "AAAAAAFpe8DNKqKwmGU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 16, + "top": -96, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8DNKqKyUus=", + "_parent": { + "$ref": "AAAAAAFpe8DNKqKwmGU=" + }, + "font": "Arial;13;1", + "left": 246, + "top": 59.5, + "width": 109, + "height": 13, + "text": "exportComments" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8DNKqKz4RA=", + "_parent": { + "$ref": "AAAAAAFpe8DNKqKwmGU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 16, + "top": -96, + "width": 80.9072265625, + "height": 13, + "text": "(from Model1)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8DNKqK0q5g=", + "_parent": { + "$ref": "AAAAAAFpe8DNKqKwmGU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 16, + "top": -96, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 241, + "top": 52.5, + "width": 119, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8DNKqKxqRI=" + }, + "nameLabel": { + "$ref": "AAAAAAFpe8DNKqKyUus=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFpe8DNKqKz4RA=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8DNKqK0q5g=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFpe8DNKqK1tuY=", + "_parent": { + "$ref": "AAAAAAFpe8DNKqKvWtE=" + }, + "model": { + "$ref": "AAAAAAFpe8DNKqKt5Jw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 8, + "top": -48, + "width": 10, + "height": 10 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFpe8DNKqK2N3Y=", + "_parent": { + "$ref": "AAAAAAFpe8DNKqKvWtE=" + }, + "model": { + "$ref": "AAAAAAFpe8DNKqKt5Jw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 8, + "top": -48, + "width": 10, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFpe8DNKqK37XE=", + "_parent": { + "$ref": "AAAAAAFpe8DNKqKvWtE=" + }, + "model": { + "$ref": "AAAAAAFpe8DNKqKt5Jw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 8, + "top": -48, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFpe8DNKqK4A6U=", + "_parent": { + "$ref": "AAAAAAFpe8DNKqKvWtE=" + }, + "model": { + "$ref": "AAAAAAFpe8DNKqKt5Jw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 8, + "top": -48, + "width": 10, + "height": 10 + }, + { + "_type": "UMLExtensionPointCompartmentView", + "_id": "AAAAAAFpe8DNK6K5HuQ=", + "_parent": { + "$ref": "AAAAAAFpe8DNKqKvWtE=" + }, + "model": { + "$ref": "AAAAAAFpe8DNKqKt5Jw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 8, + "top": -48, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 216, + "top": 48, + "width": 169, + "height": 35, + "nameCompartment": { + "$ref": "AAAAAAFpe8DNKqKwmGU=" + }, + "suppressAttributes": true, + "suppressOperations": true, + "attributeCompartment": { + "$ref": "AAAAAAFpe8DNKqK1tuY=" + }, + "operationCompartment": { + "$ref": "AAAAAAFpe8DNKqK2N3Y=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFpe8DNKqK37XE=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFpe8DNKqK4A6U=" + }, + "extensionPointCompartment": { + "$ref": "AAAAAAFpe8DNK6K5HuQ=" + } + }, + { + "_type": "UMLUseCaseView", + "_id": "AAAAAAFpe8GOZaLhADo=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8GOZaLfPXg=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFpe8GOZaLihmc=", + "_parent": { + "$ref": "AAAAAAFpe8GOZaLhADo=" + }, + "model": { + "$ref": "AAAAAAFpe8GOZaLfPXg=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFpe8GOZaLjRdE=", + "_parent": { + "$ref": "AAAAAAFpe8GOZaLihmc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 592, + "top": -144, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8GOZaLklZM=", + "_parent": { + "$ref": "AAAAAAFpe8GOZaLihmc=" + }, + "font": "Arial;13;1", + "left": 843.5, + "top": 62, + "width": 98, + "height": 13, + "text": "Favorite" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8GOZaLlzbc=", + "_parent": { + "$ref": "AAAAAAFpe8GOZaLihmc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 592, + "top": -144, + "width": 80.9072265625, + "height": 13, + "text": "(from Model1)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8GOZaLmwZE=", + "_parent": { + "$ref": "AAAAAAFpe8GOZaLihmc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 592, + "top": -144, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 838.5, + "top": 55, + "width": 108, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8GOZaLjRdE=" + }, + "nameLabel": { + "$ref": "AAAAAAFpe8GOZaLklZM=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFpe8GOZaLlzbc=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8GOZaLmwZE=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFpe8GOZaLnWtk=", + "_parent": { + "$ref": "AAAAAAFpe8GOZaLhADo=" + }, + "model": { + "$ref": "AAAAAAFpe8GOZaLfPXg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 296, + "top": -72, + "width": 10, + "height": 10 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFpe8GOZaLoj50=", + "_parent": { + "$ref": "AAAAAAFpe8GOZaLhADo=" + }, + "model": { + "$ref": "AAAAAAFpe8GOZaLfPXg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 296, + "top": -72, + "width": 10, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFpe8GOZaLpyNw=", + "_parent": { + "$ref": "AAAAAAFpe8GOZaLhADo=" + }, + "model": { + "$ref": "AAAAAAFpe8GOZaLfPXg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 296, + "top": -72, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFpe8GOZaLqItM=", + "_parent": { + "$ref": "AAAAAAFpe8GOZaLhADo=" + }, + "model": { + "$ref": "AAAAAAFpe8GOZaLfPXg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 296, + "top": -72, + "width": 10, + "height": 10 + }, + { + "_type": "UMLExtensionPointCompartmentView", + "_id": "AAAAAAFpe8GOZaLrGDY=", + "_parent": { + "$ref": "AAAAAAFpe8GOZaLhADo=" + }, + "model": { + "$ref": "AAAAAAFpe8GOZaLfPXg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 296, + "top": -72, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 816, + "top": 48, + "width": 153, + "height": 40, + "nameCompartment": { + "$ref": "AAAAAAFpe8GOZaLihmc=" + }, + "suppressAttributes": true, + "suppressOperations": true, + "attributeCompartment": { + "$ref": "AAAAAAFpe8GOZaLnWtk=" + }, + "operationCompartment": { + "$ref": "AAAAAAFpe8GOZaLoj50=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFpe8GOZaLpyNw=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFpe8GOZaLqItM=" + }, + "extensionPointCompartment": { + "$ref": "AAAAAAFpe8GOZaLrGDY=" + } + }, + { + "_type": "UMLUseCaseView", + "_id": "AAAAAAFpe8HchqMQw4g=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8HchqMONmE=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFpe8HchqMRIW0=", + "_parent": { + "$ref": "AAAAAAFpe8HchqMQw4g=" + }, + "model": { + "$ref": "AAAAAAFpe8HchqMONmE=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFpe8HchqMS8CM=", + "_parent": { + "$ref": "AAAAAAFpe8HchqMRIW0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 480, + "top": -128, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8Hch6MTUug=", + "_parent": { + "$ref": "AAAAAAFpe8HchqMRIW0=" + }, + "font": "Arial;13;1", + "left": 886.5, + "top": 142, + "width": 110, + "height": 13, + "text": "rightAnswer" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8Hch6MUd+c=", + "_parent": { + "$ref": "AAAAAAFpe8HchqMRIW0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 480, + "top": -128, + "width": 80.9072265625, + "height": 13, + "text": "(from Model1)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8Hch6MVg/0=", + "_parent": { + "$ref": "AAAAAAFpe8HchqMRIW0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 480, + "top": -128, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 881.5, + "top": 135, + "width": 120, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8HchqMS8CM=" + }, + "nameLabel": { + "$ref": "AAAAAAFpe8Hch6MTUug=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFpe8Hch6MUd+c=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8Hch6MVg/0=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFpe8Hch6MW8lw=", + "_parent": { + "$ref": "AAAAAAFpe8HchqMQw4g=" + }, + "model": { + "$ref": "AAAAAAFpe8HchqMONmE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 240, + "top": -64, + "width": 10, + "height": 10 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFpe8Hch6MXZPY=", + "_parent": { + "$ref": "AAAAAAFpe8HchqMQw4g=" + }, + "model": { + "$ref": "AAAAAAFpe8HchqMONmE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 240, + "top": -64, + "width": 10, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFpe8Hch6MYcOU=", + "_parent": { + "$ref": "AAAAAAFpe8HchqMQw4g=" + }, + "model": { + "$ref": "AAAAAAFpe8HchqMONmE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 240, + "top": -64, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFpe8Hch6MZ758=", + "_parent": { + "$ref": "AAAAAAFpe8HchqMQw4g=" + }, + "model": { + "$ref": "AAAAAAFpe8HchqMONmE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 240, + "top": -64, + "width": 10, + "height": 10 + }, + { + "_type": "UMLExtensionPointCompartmentView", + "_id": "AAAAAAFpe8Hch6MaivY=", + "_parent": { + "$ref": "AAAAAAFpe8HchqMQw4g=" + }, + "model": { + "$ref": "AAAAAAFpe8HchqMONmE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 240, + "top": -64, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 856, + "top": 120, + "width": 171, + "height": 56, + "nameCompartment": { + "$ref": "AAAAAAFpe8HchqMRIW0=" + }, + "suppressAttributes": true, + "suppressOperations": true, + "attributeCompartment": { + "$ref": "AAAAAAFpe8Hch6MW8lw=" + }, + "operationCompartment": { + "$ref": "AAAAAAFpe8Hch6MXZPY=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFpe8Hch6MYcOU=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFpe8Hch6MZ758=" + }, + "extensionPointCompartment": { + "$ref": "AAAAAAFpe8Hch6MaivY=" + } + }, + { + "_type": "UMLUseCaseView", + "_id": "AAAAAAFpe8JRqKNAoiA=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8JRqKM+ipY=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFpe8JRqKNBOFI=", + "_parent": { + "$ref": "AAAAAAFpe8JRqKNAoiA=" + }, + "model": { + "$ref": "AAAAAAFpe8JRqKM+ipY=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFpe8JRqKNCimo=", + "_parent": { + "$ref": "AAAAAAFpe8JRqKNBOFI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -256, + "top": -560, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8JRqaNDowM=", + "_parent": { + "$ref": "AAAAAAFpe8JRqKNBOFI=" + }, + "font": "Arial;13;1", + "left": 413, + "top": 70, + "width": 103, + "height": 13, + "text": "filterComments" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8JRqaNEuEg=", + "_parent": { + "$ref": "AAAAAAFpe8JRqKNBOFI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -256, + "top": -560, + "width": 80.9072265625, + "height": 13, + "text": "(from Model1)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8JRqaNFJHo=", + "_parent": { + "$ref": "AAAAAAFpe8JRqKNBOFI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -256, + "top": -560, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 408, + "top": 63, + "width": 113, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8JRqKNCimo=" + }, + "nameLabel": { + "$ref": "AAAAAAFpe8JRqaNDowM=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFpe8JRqaNEuEg=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8JRqaNFJHo=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFpe8JRqaNGn4g=", + "_parent": { + "$ref": "AAAAAAFpe8JRqKNAoiA=" + }, + "model": { + "$ref": "AAAAAAFpe8JRqKM+ipY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -128, + "top": -280, + "width": 10, + "height": 10 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFpe8JRqaNHW2E=", + "_parent": { + "$ref": "AAAAAAFpe8JRqKNAoiA=" + }, + "model": { + "$ref": "AAAAAAFpe8JRqKM+ipY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -128, + "top": -280, + "width": 10, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFpe8JRqaNI4MA=", + "_parent": { + "$ref": "AAAAAAFpe8JRqKNAoiA=" + }, + "model": { + "$ref": "AAAAAAFpe8JRqKM+ipY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -128, + "top": -280, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFpe8JRqaNJsks=", + "_parent": { + "$ref": "AAAAAAFpe8JRqKNAoiA=" + }, + "model": { + "$ref": "AAAAAAFpe8JRqKM+ipY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -128, + "top": -280, + "width": 10, + "height": 10 + }, + { + "_type": "UMLExtensionPointCompartmentView", + "_id": "AAAAAAFpe8JRqaNKdhA=", + "_parent": { + "$ref": "AAAAAAFpe8JRqKNAoiA=" + }, + "model": { + "$ref": "AAAAAAFpe8JRqKM+ipY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -128, + "top": -280, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 384, + "top": 48, + "width": 161, + "height": 56, + "nameCompartment": { + "$ref": "AAAAAAFpe8JRqKNBOFI=" + }, + "suppressAttributes": true, + "suppressOperations": true, + "attributeCompartment": { + "$ref": "AAAAAAFpe8JRqaNGn4g=" + }, + "operationCompartment": { + "$ref": "AAAAAAFpe8JRqaNHW2E=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFpe8JRqaNI4MA=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFpe8JRqaNJsks=" + }, + "extensionPointCompartment": { + "$ref": "AAAAAAFpe8JRqaNKdhA=" + } + }, + { + "_type": "UMLUseCaseView", + "_id": "AAAAAAFpe8KLnKNwoas=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8KLnKNuXzA=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFpe8KLnKNx428=", + "_parent": { + "$ref": "AAAAAAFpe8KLnKNwoas=" + }, + "model": { + "$ref": "AAAAAAFpe8KLnKNuXzA=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFpe8KLnKNyZHc=", + "_parent": { + "$ref": "AAAAAAFpe8KLnKNx428=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 96, + "top": -240, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8KLnKNzbuM=", + "_parent": { + "$ref": "AAAAAAFpe8KLnKNx428=" + }, + "font": "Arial;13;1", + "left": 592, + "top": 206, + "width": 119, + "height": 13, + "text": "manageModerators" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8KLnKN0fQM=", + "_parent": { + "$ref": "AAAAAAFpe8KLnKNx428=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 96, + "top": -240, + "width": 80.9072265625, + "height": 13, + "text": "(from Model1)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8KLnKN18lU=", + "_parent": { + "$ref": "AAAAAAFpe8KLnKNx428=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 96, + "top": -240, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 587, + "top": 199, + "width": 129.919921875, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8KLnKNyZHc=" + }, + "nameLabel": { + "$ref": "AAAAAAFpe8KLnKNzbuM=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFpe8KLnKN0fQM=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8KLnKN18lU=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFpe8KLnKN20zA=", + "_parent": { + "$ref": "AAAAAAFpe8KLnKNwoas=" + }, + "model": { + "$ref": "AAAAAAFpe8KLnKNuXzA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 48, + "top": -120, + "width": 10, + "height": 10 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFpe8KLnKN3Z5E=", + "_parent": { + "$ref": "AAAAAAFpe8KLnKNwoas=" + }, + "model": { + "$ref": "AAAAAAFpe8KLnKNuXzA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 48, + "top": -120, + "width": 10, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFpe8KLnKN4YAk=", + "_parent": { + "$ref": "AAAAAAFpe8KLnKNwoas=" + }, + "model": { + "$ref": "AAAAAAFpe8KLnKNuXzA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 48, + "top": -120, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFpe8KLnKN5BJA=", + "_parent": { + "$ref": "AAAAAAFpe8KLnKNwoas=" + }, + "model": { + "$ref": "AAAAAAFpe8KLnKNuXzA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 48, + "top": -120, + "width": 10, + "height": 10 + }, + { + "_type": "UMLExtensionPointCompartmentView", + "_id": "AAAAAAFpe8KLnKN6aMg=", + "_parent": { + "$ref": "AAAAAAFpe8KLnKNwoas=" + }, + "model": { + "$ref": "AAAAAAFpe8KLnKNuXzA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 48, + "top": -120, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 560, + "top": 184, + "width": 183, + "height": 56, + "nameCompartment": { + "$ref": "AAAAAAFpe8KLnKNx428=" + }, + "suppressAttributes": true, + "suppressOperations": true, + "attributeCompartment": { + "$ref": "AAAAAAFpe8KLnKN20zA=" + }, + "operationCompartment": { + "$ref": "AAAAAAFpe8KLnKN3Z5E=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFpe8KLnKN4YAk=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFpe8KLnKN5BJA=" + }, + "extensionPointCompartment": { + "$ref": "AAAAAAFpe8KLnKN6aMg=" + } + }, + { + "_type": "UMLUseCaseView", + "_id": "AAAAAAFpe8LrX6OfnoY=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8LrX6Od4VU=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFpe8LrX6OgiV4=", + "_parent": { + "$ref": "AAAAAAFpe8LrX6OfnoY=" + }, + "model": { + "$ref": "AAAAAAFpe8LrX6Od4VU=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFpe8LrX6OhiGg=", + "_parent": { + "$ref": "AAAAAAFpe8LrX6OgiV4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -32, + "top": -688, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8LrX6OiNGI=", + "_parent": { + "$ref": "AAAAAAFpe8LrX6OgiV4=" + }, + "font": "Arial;13;1", + "left": 653.5, + "top": 82, + "width": 106, + "height": 13, + "text": "presentComment" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8LrX6Ojlmw=", + "_parent": { + "$ref": "AAAAAAFpe8LrX6OgiV4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -32, + "top": -688, + "width": 80.9072265625, + "height": 13, + "text": "(from Model1)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8LrX6Ok7Vs=", + "_parent": { + "$ref": "AAAAAAFpe8LrX6OgiV4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -32, + "top": -688, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 648.5, + "top": 75, + "width": 116.9072265625, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8LrX6OhiGg=" + }, + "nameLabel": { + "$ref": "AAAAAAFpe8LrX6OiNGI=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFpe8LrX6Ojlmw=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8LrX6Ok7Vs=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFpe8LrX6OleMk=", + "_parent": { + "$ref": "AAAAAAFpe8LrX6OfnoY=" + }, + "model": { + "$ref": "AAAAAAFpe8LrX6Od4VU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -16, + "top": -344, + "width": 10, + "height": 10 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFpe8LrX6OmCFo=", + "_parent": { + "$ref": "AAAAAAFpe8LrX6OfnoY=" + }, + "model": { + "$ref": "AAAAAAFpe8LrX6Od4VU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -16, + "top": -344, + "width": 10, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFpe8LrX6Onx1c=", + "_parent": { + "$ref": "AAAAAAFpe8LrX6OfnoY=" + }, + "model": { + "$ref": "AAAAAAFpe8LrX6Od4VU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -16, + "top": -344, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFpe8LrX6OoDsM=", + "_parent": { + "$ref": "AAAAAAFpe8LrX6OfnoY=" + }, + "model": { + "$ref": "AAAAAAFpe8LrX6Od4VU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -16, + "top": -344, + "width": 10, + "height": 10 + }, + { + "_type": "UMLExtensionPointCompartmentView", + "_id": "AAAAAAFpe8LrX6OpgCE=", + "_parent": { + "$ref": "AAAAAAFpe8LrX6OfnoY=" + }, + "model": { + "$ref": "AAAAAAFpe8LrX6Od4VU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -16, + "top": -344, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 624, + "top": 64, + "width": 165, + "height": 48, + "nameCompartment": { + "$ref": "AAAAAAFpe8LrX6OgiV4=" + }, + "suppressAttributes": true, + "suppressOperations": true, + "attributeCompartment": { + "$ref": "AAAAAAFpe8LrX6OleMk=" + }, + "operationCompartment": { + "$ref": "AAAAAAFpe8LrX6OmCFo=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFpe8LrX6Onx1c=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFpe8LrX6OoDsM=" + }, + "extensionPointCompartment": { + "$ref": "AAAAAAFpe8LrX6OpgCE=" + } + }, + { + "_type": "UMLUseCaseView", + "_id": "AAAAAAFpe8McIqPOqFA=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8McIqPMS04=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFpe8McIqPPvgI=", + "_parent": { + "$ref": "AAAAAAFpe8McIqPOqFA=" + }, + "model": { + "$ref": "AAAAAAFpe8McIqPMS04=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFpe8McIqPQlNE=", + "_parent": { + "$ref": "AAAAAAFpe8McIqPPvgI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 256, + "top": -480, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8McIqPR/1E=", + "_parent": { + "$ref": "AAAAAAFpe8McIqPPvgI=" + }, + "font": "Arial;13;1", + "left": 855.5, + "top": 227.5, + "width": 79, + "height": 13, + "text": "read" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8McIqPSaII=", + "_parent": { + "$ref": "AAAAAAFpe8McIqPPvgI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 256, + "top": -480, + "width": 80.9072265625, + "height": 13, + "text": "(from Model1)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8McIqPTjHU=", + "_parent": { + "$ref": "AAAAAAFpe8McIqPPvgI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 256, + "top": -480, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 850.5, + "top": 220.5, + "width": 89, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8McIqPQlNE=" + }, + "nameLabel": { + "$ref": "AAAAAAFpe8McIqPR/1E=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFpe8McIqPSaII=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8McIqPTjHU=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFpe8McIqPUVf4=", + "_parent": { + "$ref": "AAAAAAFpe8McIqPOqFA=" + }, + "model": { + "$ref": "AAAAAAFpe8McIqPMS04=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 128, + "top": -240, + "width": 10, + "height": 10 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFpe8McIqPVfJg=", + "_parent": { + "$ref": "AAAAAAFpe8McIqPOqFA=" + }, + "model": { + "$ref": "AAAAAAFpe8McIqPMS04=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 128, + "top": -240, + "width": 10, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFpe8McIqPW4jk=", + "_parent": { + "$ref": "AAAAAAFpe8McIqPOqFA=" + }, + "model": { + "$ref": "AAAAAAFpe8McIqPMS04=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 128, + "top": -240, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFpe8McIqPXDXo=", + "_parent": { + "$ref": "AAAAAAFpe8McIqPOqFA=" + }, + "model": { + "$ref": "AAAAAAFpe8McIqPMS04=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 128, + "top": -240, + "width": 10, + "height": 10 + }, + { + "_type": "UMLExtensionPointCompartmentView", + "_id": "AAAAAAFpe8McIqPY3iI=", + "_parent": { + "$ref": "AAAAAAFpe8McIqPOqFA=" + }, + "model": { + "$ref": "AAAAAAFpe8McIqPMS04=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 128, + "top": -240, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 832, + "top": 216, + "width": 126, + "height": 35, + "nameCompartment": { + "$ref": "AAAAAAFpe8McIqPPvgI=" + }, + "suppressAttributes": true, + "suppressOperations": true, + "attributeCompartment": { + "$ref": "AAAAAAFpe8McIqPUVf4=" + }, + "operationCompartment": { + "$ref": "AAAAAAFpe8McIqPVfJg=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFpe8McIqPW4jk=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFpe8McIqPXDXo=" + }, + "extensionPointCompartment": { + "$ref": "AAAAAAFpe8McIqPY3iI=" + } + }, + { + "_type": "UMLUseCaseView", + "_id": "AAAAAAFpe8O4QaP8JVM=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8O4QaP6YNs=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFpe8O4QaP9SqA=", + "_parent": { + "$ref": "AAAAAAFpe8O4QaP8JVM=" + }, + "model": { + "$ref": "AAAAAAFpe8O4QaP6YNs=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFpe8O4QaP+Mxg=", + "_parent": { + "$ref": "AAAAAAFpe8O4QaP9SqA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 656, + "top": 256, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8O4QaP/ss8=", + "_parent": { + "$ref": "AAAAAAFpe8O4QaP9SqA=" + }, + "font": "Arial;13;1", + "left": 809.5, + "top": 746.5, + "width": 126, + "height": 13, + "text": "createComment" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8O4QaQAyL4=", + "_parent": { + "$ref": "AAAAAAFpe8O4QaP9SqA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 656, + "top": 256, + "width": 80.9072265625, + "height": 13, + "text": "(from Model1)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8O4QaQBuTc=", + "_parent": { + "$ref": "AAAAAAFpe8O4QaP9SqA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 656, + "top": 256, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 804.5, + "top": 739.5, + "width": 136, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8O4QaP+Mxg=" + }, + "nameLabel": { + "$ref": "AAAAAAFpe8O4QaP/ss8=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFpe8O4QaQAyL4=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8O4QaQBuTc=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFpe8O4QaQCh5c=", + "_parent": { + "$ref": "AAAAAAFpe8O4QaP8JVM=" + }, + "model": { + "$ref": "AAAAAAFpe8O4QaP6YNs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 328, + "top": 128, + "width": 10, + "height": 10 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFpe8O4QaQDMrw=", + "_parent": { + "$ref": "AAAAAAFpe8O4QaP8JVM=" + }, + "model": { + "$ref": "AAAAAAFpe8O4QaP6YNs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 328, + "top": 128, + "width": 10, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFpe8O4QqQEN3A=", + "_parent": { + "$ref": "AAAAAAFpe8O4QaP8JVM=" + }, + "model": { + "$ref": "AAAAAAFpe8O4QaP6YNs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 328, + "top": 128, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFpe8O4QqQFIKE=", + "_parent": { + "$ref": "AAAAAAFpe8O4QaP8JVM=" + }, + "model": { + "$ref": "AAAAAAFpe8O4QaP6YNs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 328, + "top": 128, + "width": 10, + "height": 10 + }, + { + "_type": "UMLExtensionPointCompartmentView", + "_id": "AAAAAAFpe8O4QqQGKVU=", + "_parent": { + "$ref": "AAAAAAFpe8O4QaP8JVM=" + }, + "model": { + "$ref": "AAAAAAFpe8O4QaP6YNs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 328, + "top": 128, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 776, + "top": 704, + "width": 193, + "height": 97, + "nameCompartment": { + "$ref": "AAAAAAFpe8O4QaP9SqA=" + }, + "suppressAttributes": true, + "suppressOperations": true, + "attributeCompartment": { + "$ref": "AAAAAAFpe8O4QaQCh5c=" + }, + "operationCompartment": { + "$ref": "AAAAAAFpe8O4QaQDMrw=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFpe8O4QqQEN3A=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFpe8O4QqQFIKE=" + }, + "extensionPointCompartment": { + "$ref": "AAAAAAFpe8O4QqQGKVU=" + } + }, + { + "_type": "UMLUseCaseView", + "_id": "AAAAAAFpe8PfmKQrOsM=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8PfmKQpMNk=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFpe8PfmKQsyNY=", + "_parent": { + "$ref": "AAAAAAFpe8PfmKQrOsM=" + }, + "model": { + "$ref": "AAAAAAFpe8PfmKQpMNk=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFpe8PfmKQtgYg=", + "_parent": { + "$ref": "AAAAAAFpe8PfmKQsyNY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 784, + "top": -400, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8PfmKQuqZw=", + "_parent": { + "$ref": "AAAAAAFpe8PfmKQsyNY=" + }, + "font": "Arial;13;1", + "left": 785.5, + "top": 458.5, + "width": 126, + "height": 13, + "text": "deleteComment" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8PfmKQvqog=", + "_parent": { + "$ref": "AAAAAAFpe8PfmKQsyNY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 784, + "top": -400, + "width": 80.9072265625, + "height": 13, + "text": "(from Model1)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8PfmKQwgxA=", + "_parent": { + "$ref": "AAAAAAFpe8PfmKQsyNY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 784, + "top": -400, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 780.5, + "top": 451.5, + "width": 136, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8PfmKQtgYg=" + }, + "nameLabel": { + "$ref": "AAAAAAFpe8PfmKQuqZw=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFpe8PfmKQvqog=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8PfmKQwgxA=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFpe8PfmKQx0kk=", + "_parent": { + "$ref": "AAAAAAFpe8PfmKQrOsM=" + }, + "model": { + "$ref": "AAAAAAFpe8PfmKQpMNk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 392, + "top": -200, + "width": 10, + "height": 10 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFpe8PfmKQykbg=", + "_parent": { + "$ref": "AAAAAAFpe8PfmKQrOsM=" + }, + "model": { + "$ref": "AAAAAAFpe8PfmKQpMNk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 392, + "top": -200, + "width": 10, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFpe8PfmKQziKE=", + "_parent": { + "$ref": "AAAAAAFpe8PfmKQrOsM=" + }, + "model": { + "$ref": "AAAAAAFpe8PfmKQpMNk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 392, + "top": -200, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFpe8PfmKQ02jc=", + "_parent": { + "$ref": "AAAAAAFpe8PfmKQrOsM=" + }, + "model": { + "$ref": "AAAAAAFpe8PfmKQpMNk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 392, + "top": -200, + "width": 10, + "height": 10 + }, + { + "_type": "UMLExtensionPointCompartmentView", + "_id": "AAAAAAFpe8PfmKQ1BIU=", + "_parent": { + "$ref": "AAAAAAFpe8PfmKQrOsM=" + }, + "model": { + "$ref": "AAAAAAFpe8PfmKQpMNk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 392, + "top": -200, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 752, + "top": 424, + "width": 193, + "height": 81, + "nameCompartment": { + "$ref": "AAAAAAFpe8PfmKQsyNY=" + }, + "suppressAttributes": true, + "suppressOperations": true, + "attributeCompartment": { + "$ref": "AAAAAAFpe8PfmKQx0kk=" + }, + "operationCompartment": { + "$ref": "AAAAAAFpe8PfmKQykbg=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFpe8PfmKQziKE=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFpe8PfmKQ02jc=" + }, + "extensionPointCompartment": { + "$ref": "AAAAAAFpe8PfmKQ1BIU=" + } + }, + { + "_type": "UMLUseCaseView", + "_id": "AAAAAAFpe8P6N6RZDco=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8P6N6RXqcw=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFpe8P6N6RanWY=", + "_parent": { + "$ref": "AAAAAAFpe8P6N6RZDco=" + }, + "model": { + "$ref": "AAAAAAFpe8P6N6RXqcw=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFpe8P6N6Rbkjc=", + "_parent": { + "$ref": "AAAAAAFpe8P6N6RanWY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 256, + "top": -672, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8P6N6RcqDQ=", + "_parent": { + "$ref": "AAAAAAFpe8P6N6RanWY=" + }, + "font": "Arial;13;1", + "left": 767, + "top": 330, + "width": 153, + "height": 13, + "text": "deleteMultipleComments" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8P6N6Rd8QE=", + "_parent": { + "$ref": "AAAAAAFpe8P6N6RanWY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 256, + "top": -672, + "width": 80.9072265625, + "height": 13, + "text": "(from Model1)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8P6N6RehiE=", + "_parent": { + "$ref": "AAAAAAFpe8P6N6RanWY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 256, + "top": -672, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 762, + "top": 323, + "width": 163.8544921875, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8P6N6Rbkjc=" + }, + "nameLabel": { + "$ref": "AAAAAAFpe8P6N6RcqDQ=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFpe8P6N6Rd8QE=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8P6N6RehiE=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFpe8P6N6RfRdY=", + "_parent": { + "$ref": "AAAAAAFpe8P6N6RZDco=" + }, + "model": { + "$ref": "AAAAAAFpe8P6N6RXqcw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 128, + "top": -336, + "width": 10, + "height": 10 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFpe8P6OKRgQfA=", + "_parent": { + "$ref": "AAAAAAFpe8P6N6RZDco=" + }, + "model": { + "$ref": "AAAAAAFpe8P6N6RXqcw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 128, + "top": -336, + "width": 10, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFpe8P6OKRhlHk=", + "_parent": { + "$ref": "AAAAAAFpe8P6N6RZDco=" + }, + "model": { + "$ref": "AAAAAAFpe8P6N6RXqcw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 128, + "top": -336, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFpe8P6OKRil1o=", + "_parent": { + "$ref": "AAAAAAFpe8P6N6RZDco=" + }, + "model": { + "$ref": "AAAAAAFpe8P6N6RXqcw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 128, + "top": -336, + "width": 10, + "height": 10 + }, + { + "_type": "UMLExtensionPointCompartmentView", + "_id": "AAAAAAFpe8P6OKRj1GA=", + "_parent": { + "$ref": "AAAAAAFpe8P6N6RZDco=" + }, + "model": { + "$ref": "AAAAAAFpe8P6N6RXqcw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 128, + "top": -336, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 728, + "top": 296, + "width": 231, + "height": 80, + "nameCompartment": { + "$ref": "AAAAAAFpe8P6N6RanWY=" + }, + "suppressAttributes": true, + "suppressOperations": true, + "attributeCompartment": { + "$ref": "AAAAAAFpe8P6N6RfRdY=" + }, + "operationCompartment": { + "$ref": "AAAAAAFpe8P6OKRgQfA=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFpe8P6OKRhlHk=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFpe8P6OKRil1o=" + }, + "extensionPointCompartment": { + "$ref": "AAAAAAFpe8P6OKRj1GA=" + } + }, + { + "_type": "UMLUseCaseView", + "_id": "AAAAAAFpe8RpaaSI3HU=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8RpZ6SGnoo=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFpe8RpaaSJB3Q=", + "_parent": { + "$ref": "AAAAAAFpe8RpaaSI3HU=" + }, + "model": { + "$ref": "AAAAAAFpe8RpZ6SGnoo=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFpe8RpaaSK8Kc=", + "_parent": { + "$ref": "AAAAAAFpe8RpaaSJB3Q=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -112, + "top": 192, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8RpaaSLXnE=", + "_parent": { + "$ref": "AAAAAAFpe8RpaaSJB3Q=" + }, + "font": "Arial;13;1", + "left": 249, + "top": 459.5, + "width": 86, + "height": 13, + "text": "hideComment" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8RpaaSM9nA=", + "_parent": { + "$ref": "AAAAAAFpe8RpaaSJB3Q=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -112, + "top": 192, + "width": 80.9072265625, + "height": 13, + "text": "(from Model1)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8RpaaSNOAw=", + "_parent": { + "$ref": "AAAAAAFpe8RpaaSJB3Q=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -112, + "top": 192, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 244, + "top": 452.5, + "width": 96.6708984375, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8RpaaSK8Kc=" + }, + "nameLabel": { + "$ref": "AAAAAAFpe8RpaaSLXnE=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFpe8RpaaSM9nA=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8RpaaSNOAw=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFpe8RpaaSOWaE=", + "_parent": { + "$ref": "AAAAAAFpe8RpaaSI3HU=" + }, + "model": { + "$ref": "AAAAAAFpe8RpZ6SGnoo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -56, + "top": 96, + "width": 10, + "height": 10 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFpe8RpaaSPC6U=", + "_parent": { + "$ref": "AAAAAAFpe8RpaaSI3HU=" + }, + "model": { + "$ref": "AAAAAAFpe8RpZ6SGnoo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -56, + "top": 96, + "width": 10, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFpe8RpaqSQSk8=", + "_parent": { + "$ref": "AAAAAAFpe8RpaaSI3HU=" + }, + "model": { + "$ref": "AAAAAAFpe8RpZ6SGnoo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -56, + "top": 96, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFpe8RpaqSRk0M=", + "_parent": { + "$ref": "AAAAAAFpe8RpaaSI3HU=" + }, + "model": { + "$ref": "AAAAAAFpe8RpZ6SGnoo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -56, + "top": 96, + "width": 10, + "height": 10 + }, + { + "_type": "UMLExtensionPointCompartmentView", + "_id": "AAAAAAFpe8RpaqSS51k=", + "_parent": { + "$ref": "AAAAAAFpe8RpaaSI3HU=" + }, + "model": { + "$ref": "AAAAAAFpe8RpZ6SGnoo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -56, + "top": 96, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 224, + "top": 448, + "width": 136, + "height": 35, + "nameCompartment": { + "$ref": "AAAAAAFpe8RpaaSJB3Q=" + }, + "suppressAttributes": true, + "suppressOperations": true, + "attributeCompartment": { + "$ref": "AAAAAAFpe8RpaaSOWaE=" + }, + "operationCompartment": { + "$ref": "AAAAAAFpe8RpaaSPC6U=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFpe8RpaqSQSk8=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFpe8RpaqSRk0M=" + }, + "extensionPointCompartment": { + "$ref": "AAAAAAFpe8RpaqSS51k=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAFpe8TwwqVdQKs=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8TwwqVZYHk=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8TwwqVeqM0=", + "_parent": { + "$ref": "AAAAAAFpe8TwwqVdQKs=" + }, + "model": { + "$ref": "AAAAAAFpe8TwwqVZYHk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 204, + "top": 111, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8TwwqVdQKs=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8TwwqVfkO0=", + "_parent": { + "$ref": "AAAAAAFpe8TwwqVdQKs=" + }, + "model": { + "$ref": "AAAAAAFpe8TwwqVZYHk=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 210, + "top": 125, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8TwwqVdQKs=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8TwwqVgidI=", + "_parent": { + "$ref": "AAAAAAFpe8TwwqVdQKs=" + }, + "model": { + "$ref": "AAAAAAFpe8TwwqVZYHk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 193, + "top": 84, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8TwwqVdQKs=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8TwwqVhBKw=", + "_parent": { + "$ref": "AAAAAAFpe8TwwqVdQKs=" + }, + "model": { + "$ref": "AAAAAAFpe8TwwqVa/uM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 235, + "top": 100, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8TwwqVdQKs=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8TwwqViGNY=", + "_parent": { + "$ref": "AAAAAAFpe8TwwqVdQKs=" + }, + "model": { + "$ref": "AAAAAAFpe8TwwqVa/uM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 238, + "top": 113, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8TwwqVdQKs=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8TwwqVj4Eo=", + "_parent": { + "$ref": "AAAAAAFpe8TwwqVdQKs=" + }, + "model": { + "$ref": "AAAAAAFpe8TwwqVa/uM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 229, + "top": 73, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8TwwqVdQKs=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8TwwqVkN9U=", + "_parent": { + "$ref": "AAAAAAFpe8TwwqVdQKs=" + }, + "model": { + "$ref": "AAAAAAFpe8TwwqVbNNA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 174, + "top": 124, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8TwwqVdQKs=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8TwwqVlpIo=", + "_parent": { + "$ref": "AAAAAAFpe8TwwqVdQKs=" + }, + "model": { + "$ref": "AAAAAAFpe8TwwqVbNNA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 181, + "top": 135, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8TwwqVdQKs=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8TwwqVm15s=", + "_parent": { + "$ref": "AAAAAAFpe8TwwqVdQKs=" + }, + "model": { + "$ref": "AAAAAAFpe8TwwqVbNNA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 160, + "top": 100, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8TwwqVdQKs=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8TwwqVnqig=", + "_parent": { + "$ref": "AAAAAAFpe8TwwqVdQKs=" + }, + "model": { + "$ref": "AAAAAAFpe8TwwqVa/uM=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8TwwqVoqow=", + "_parent": { + "$ref": "AAAAAAFpe8TwwqVdQKs=" + }, + "model": { + "$ref": "AAAAAAFpe8TwwqVbNNA=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe7yoQKIFgzc=" + }, + "tail": { + "$ref": "AAAAAAFpe8DNKqKvWtE=" + }, + "lineStyle": 1, + "points": "254:83;145:126", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe8TwwqVeqM0=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8TwwqVfkO0=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8TwwqVgidI=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAFpe8TwwqVhBKw=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAFpe8TwwqViGNY=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAFpe8TwwqVj4Eo=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAFpe8TwwqVkN9U=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAFpe8TwwqVlpIo=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAFpe8TwwqVm15s=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAFpe8TwwqVnqig=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAFpe8TwwqVoqow=" + } + }, + { + "_type": "UMLUseCaseView", + "_id": "AAAAAAFpe8VAuqWnn9g=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8VAuaWlECU=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFpe8VAuqWoVf8=", + "_parent": { + "$ref": "AAAAAAFpe8VAuqWnn9g=" + }, + "model": { + "$ref": "AAAAAAFpe8VAuaWlECU=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFpe8VAuqWp4l4=", + "_parent": { + "$ref": "AAAAAAFpe8VAuqWoVf8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 112, + "top": -160, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8VAuqWqEXk=", + "_parent": { + "$ref": "AAAAAAFpe8VAuqWoVf8=" + }, + "font": "Arial;13;1", + "left": 642, + "top": 138, + "width": 90, + "height": 13, + "text": "markComment" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8VAuqWrelo=", + "_parent": { + "$ref": "AAAAAAFpe8VAuqWoVf8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 112, + "top": -160, + "width": 80.9072265625, + "height": 13, + "text": "(from Model1)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8VAuqWsXnQ=", + "_parent": { + "$ref": "AAAAAAFpe8VAuqWoVf8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 112, + "top": -160, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 637, + "top": 131, + "width": 101.025390625, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8VAuqWp4l4=" + }, + "nameLabel": { + "$ref": "AAAAAAFpe8VAuqWqEXk=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFpe8VAuqWrelo=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8VAuqWsXnQ=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFpe8VAuqWtgp8=", + "_parent": { + "$ref": "AAAAAAFpe8VAuqWnn9g=" + }, + "model": { + "$ref": "AAAAAAFpe8VAuaWlECU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 56, + "top": -80, + "width": 10, + "height": 10 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFpe8VAuqWux3w=", + "_parent": { + "$ref": "AAAAAAFpe8VAuqWnn9g=" + }, + "model": { + "$ref": "AAAAAAFpe8VAuaWlECU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 56, + "top": -80, + "width": 10, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFpe8VAuqWvFF8=", + "_parent": { + "$ref": "AAAAAAFpe8VAuqWnn9g=" + }, + "model": { + "$ref": "AAAAAAFpe8VAuaWlECU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 56, + "top": -80, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFpe8VAu6WwYKs=", + "_parent": { + "$ref": "AAAAAAFpe8VAuqWnn9g=" + }, + "model": { + "$ref": "AAAAAAFpe8VAuaWlECU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 56, + "top": -80, + "width": 10, + "height": 10 + }, + { + "_type": "UMLExtensionPointCompartmentView", + "_id": "AAAAAAFpe8VAu6WxSjM=", + "_parent": { + "$ref": "AAAAAAFpe8VAuqWnn9g=" + }, + "model": { + "$ref": "AAAAAAFpe8VAuaWlECU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 56, + "top": -80, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 616, + "top": 120, + "width": 142, + "height": 48, + "nameCompartment": { + "$ref": "AAAAAAFpe8VAuqWoVf8=" + }, + "suppressAttributes": true, + "suppressOperations": true, + "attributeCompartment": { + "$ref": "AAAAAAFpe8VAuqWtgp8=" + }, + "operationCompartment": { + "$ref": "AAAAAAFpe8VAuqWux3w=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFpe8VAuqWvFF8=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFpe8VAu6WwYKs=" + }, + "extensionPointCompartment": { + "$ref": "AAAAAAFpe8VAu6WxSjM=" + } + }, + { + "_type": "UMLExtendView", + "_id": "AAAAAAFpe8YGL6YzrdU=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8YGLqYxXt0=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8YGL6Y0x+Y=", + "_parent": { + "$ref": "AAAAAAFpe8YGL6YzrdU=" + }, + "model": { + "$ref": "AAAAAAFpe8YGLqYxXt0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 792, + "top": 198, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8YGL6YzrdU=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8YGL6Y1QpY=", + "_parent": { + "$ref": "AAAAAAFpe8YGL6YzrdU=" + }, + "model": { + "$ref": "AAAAAAFpe8YGLqYxXt0=" + }, + "font": "Arial;13;0", + "left": 760, + "top": 212, + "width": 53.49169921875, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8YGL6YzrdU=" + }, + "edgePosition": 1, + "text": "«extend»" + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8YGL6Y2Jvw=", + "_parent": { + "$ref": "AAAAAAFpe8YGL6YzrdU=" + }, + "model": { + "$ref": "AAAAAAFpe8YGLqYxXt0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 803, + "top": 171, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8YGL6YzrdU=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe8VAuqWnn9g=" + }, + "tail": { + "$ref": "AAAAAAFpe8McIqPOqFA=" + }, + "lineStyle": 1, + "points": "852:215;744:168", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe8YGL6Y0x+Y=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8YGL6Y1QpY=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8YGL6Y2Jvw=" + } + }, + { + "_type": "UMLExtendView", + "_id": "AAAAAAFpe8Yi+aZT4Ww=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8Yi+aZRJmM=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8Yi+aZUsGE=", + "_parent": { + "$ref": "AAAAAAFpe8Yi+aZT4Ww=" + }, + "model": { + "$ref": "AAAAAAFpe8Yi+aZRJmM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 805, + "top": 153, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8Yi+aZT4Ww=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8Yi+aZVp5U=", + "_parent": { + "$ref": "AAAAAAFpe8Yi+aZT4Ww=" + }, + "model": { + "$ref": "AAAAAAFpe8Yi+aZRJmM=" + }, + "font": "Arial;13;0", + "left": 779, + "top": 168, + "width": 53.49169921875, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8Yi+aZT4Ww=" + }, + "edgePosition": 1, + "text": "«extend»" + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8Yi+aZWAEQ=", + "_parent": { + "$ref": "AAAAAAFpe8Yi+aZT4Ww=" + }, + "model": { + "$ref": "AAAAAAFpe8Yi+aZRJmM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 806, + "top": 124, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8Yi+aZT4Ww=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe8VAuqWnn9g=" + }, + "tail": { + "$ref": "AAAAAAFpe8HchqMQw4g=" + }, + "lineStyle": 1, + "points": "855:146;758:144", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe8Yi+aZUsGE=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8Yi+aZVp5U=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8Yi+aZWAEQ=" + } + }, + { + "_type": "UMLExtendView", + "_id": "AAAAAAFpe8Y55qZz89s=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8Y55qZx+44=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8Y55qZ0kVg=", + "_parent": { + "$ref": "AAAAAAFpe8Y55qZz89s=" + }, + "model": { + "$ref": "AAAAAAFpe8Y55qZx+44=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 798, + "top": 111, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8Y55qZz89s=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8Y55qZ1wrc=", + "_parent": { + "$ref": "AAAAAAFpe8Y55qZz89s=" + }, + "model": { + "$ref": "AAAAAAFpe8Y55qZx+44=" + }, + "font": "Arial;13;0", + "left": 777, + "top": 125, + "width": 53.49169921875, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8Y55qZz89s=" + }, + "edgePosition": 1, + "text": "«extend»" + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8Y55qZ2r6s=", + "_parent": { + "$ref": "AAAAAAFpe8Y55qZz89s=" + }, + "model": { + "$ref": "AAAAAAFpe8Y55qZx+44=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 787, + "top": 82, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8Y55qZz89s=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe8VAuqWnn9g=" + }, + "tail": { + "$ref": "AAAAAAFpe8GOZaLhADo=" + }, + "lineStyle": 1, + "points": "835:88;751:119", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe8Y55qZ0kVg=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8Y55qZ1wrc=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8Y55qZ2r6s=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAFpe8ZOYqaVzh8=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8ZOYqaRqtA=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8ZOYqaWzt0=", + "_parent": { + "$ref": "AAAAAAFpe8ZOYqaVzh8=" + }, + "model": { + "$ref": "AAAAAAFpe8ZOYqaRqtA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 380, + "top": 154, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8ZOYqaVzh8=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8ZOYqaXPi4=", + "_parent": { + "$ref": "AAAAAAFpe8ZOYqaVzh8=" + }, + "model": { + "$ref": "AAAAAAFpe8ZOYqaRqtA=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 380, + "top": 169, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8ZOYqaVzh8=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8ZOYqaYspc=", + "_parent": { + "$ref": "AAAAAAFpe8ZOYqaVzh8=" + }, + "model": { + "$ref": "AAAAAAFpe8ZOYqaRqtA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 379, + "top": 125, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8ZOYqaVzh8=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8ZOYqaZXvk=", + "_parent": { + "$ref": "AAAAAAFpe8ZOYqaVzh8=" + }, + "model": { + "$ref": "AAAAAAFpe8ZOYqaSkaU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 589, + "top": 153, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8ZOYqaVzh8=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8ZOYqaafZQ=", + "_parent": { + "$ref": "AAAAAAFpe8ZOYqaVzh8=" + }, + "model": { + "$ref": "AAAAAAFpe8ZOYqaSkaU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 586, + "top": 166, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8ZOYqaVzh8=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8ZOY6abI9k=", + "_parent": { + "$ref": "AAAAAAFpe8ZOYqaVzh8=" + }, + "model": { + "$ref": "AAAAAAFpe8ZOYqaSkaU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 593, + "top": 125, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8ZOYqaVzh8=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8ZOY6acc/4=", + "_parent": { + "$ref": "AAAAAAFpe8ZOYqaVzh8=" + }, + "model": { + "$ref": "AAAAAAFpe8ZOYqaTdP4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 171, + "top": 156, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8ZOYqaVzh8=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8ZOY6admbQ=", + "_parent": { + "$ref": "AAAAAAFpe8ZOYqaVzh8=" + }, + "model": { + "$ref": "AAAAAAFpe8ZOYqaTdP4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 173, + "top": 170, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8ZOYqaVzh8=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8ZOY6ae7l4=", + "_parent": { + "$ref": "AAAAAAFpe8ZOYqaVzh8=" + }, + "model": { + "$ref": "AAAAAAFpe8ZOYqaTdP4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 166, + "top": 129, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8ZOYqaVzh8=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8ZOY6afrFw=", + "_parent": { + "$ref": "AAAAAAFpe8ZOYqaVzh8=" + }, + "model": { + "$ref": "AAAAAAFpe8ZOYqaSkaU=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8ZOY6agd1c=", + "_parent": { + "$ref": "AAAAAAFpe8ZOYqaVzh8=" + }, + "model": { + "$ref": "AAAAAAFpe8ZOYqaTdP4=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe7yoQKIFgzc=" + }, + "tail": { + "$ref": "AAAAAAFpe8VAuqWnn9g=" + }, + "lineStyle": 1, + "points": "615:144;145:148", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe8ZOYqaWzt0=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8ZOYqaXPi4=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8ZOYqaYspc=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAFpe8ZOYqaZXvk=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAFpe8ZOYqaafZQ=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAFpe8ZOY6abI9k=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAFpe8ZOY6acc/4=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAFpe8ZOY6admbQ=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAFpe8ZOY6ae7l4=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAFpe8ZOY6afrFw=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAFpe8ZOY6agd1c=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAFpe8bJNKggwGA=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8bJMqgcG5E=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8bJNKgh/3I=", + "_parent": { + "$ref": "AAAAAAFpe8bJNKggwGA=" + }, + "model": { + "$ref": "AAAAAAFpe8bJMqgcG5E=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 266, + "top": 122, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8bJNKggwGA=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8bJNKgi5o4=", + "_parent": { + "$ref": "AAAAAAFpe8bJNKggwGA=" + }, + "model": { + "$ref": "AAAAAAFpe8bJMqgcG5E=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 269, + "top": 137, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8bJNKggwGA=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8bJNKgj35A=", + "_parent": { + "$ref": "AAAAAAFpe8bJNKggwGA=" + }, + "model": { + "$ref": "AAAAAAFpe8bJMqgcG5E=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 261, + "top": 93, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8bJNKggwGA=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8bJNKgkdGY=", + "_parent": { + "$ref": "AAAAAAFpe8bJNKggwGA=" + }, + "model": { + "$ref": "AAAAAAFpe8bJMqgdurY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 360, + "top": 104, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8bJNKggwGA=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8bJNKglhrg=", + "_parent": { + "$ref": "AAAAAAFpe8bJNKggwGA=" + }, + "model": { + "$ref": "AAAAAAFpe8bJMqgdurY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 360, + "top": 118, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8bJNKggwGA=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8bJNKgmCN8=", + "_parent": { + "$ref": "AAAAAAFpe8bJNKggwGA=" + }, + "model": { + "$ref": "AAAAAAFpe8bJMqgdurY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 359, + "top": 76, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8bJNKggwGA=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8bJNKgnn3A=", + "_parent": { + "$ref": "AAAAAAFpe8bJNKggwGA=" + }, + "model": { + "$ref": "AAAAAAFpe8bJMqge8ag=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 173, + "top": 140, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8bJNKggwGA=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8bJNKgoBDw=", + "_parent": { + "$ref": "AAAAAAFpe8bJNKggwGA=" + }, + "model": { + "$ref": "AAAAAAFpe8bJMqge8ag=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 178, + "top": 153, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8bJNKggwGA=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8bJNKgptAE=", + "_parent": { + "$ref": "AAAAAAFpe8bJNKggwGA=" + }, + "model": { + "$ref": "AAAAAAFpe8bJMqge8ag=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 163, + "top": 114, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8bJNKggwGA=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8bJNKgq7Ac=", + "_parent": { + "$ref": "AAAAAAFpe8bJNKggwGA=" + }, + "model": { + "$ref": "AAAAAAFpe8bJMqgdurY=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8bJNKgrdeM=", + "_parent": { + "$ref": "AAAAAAFpe8bJNKggwGA=" + }, + "model": { + "$ref": "AAAAAAFpe8bJMqge8ag=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe7yoQKIFgzc=" + }, + "tail": { + "$ref": "AAAAAAFpe8JRqKNAoiA=" + }, + "lineStyle": 1, + "points": "383:91;145:137", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe8bJNKgh/3I=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8bJNKgi5o4=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8bJNKgj35A=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAFpe8bJNKgkdGY=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAFpe8bJNKglhrg=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAFpe8bJNKgmCN8=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAFpe8bJNKgnn3A=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAFpe8bJNKgoBDw=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAFpe8bJNKgptAE=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAFpe8bJNKgq7Ac=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAFpe8bJNKgrdeM=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAFpe8b+DKjvaio=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8b+DKjrrYc=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8b+DKjwbJ0=", + "_parent": { + "$ref": "AAAAAAFpe8b+DKjvaio=" + }, + "model": { + "$ref": "AAAAAAFpe8b+DKjrrYc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 385, + "top": 126, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8b+DKjvaio=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8b+DKjxpmk=", + "_parent": { + "$ref": "AAAAAAFpe8b+DKjvaio=" + }, + "model": { + "$ref": "AAAAAAFpe8b+DKjrrYc=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 386, + "top": 141, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8b+DKjvaio=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8b+DKjysIk=", + "_parent": { + "$ref": "AAAAAAFpe8b+DKjvaio=" + }, + "model": { + "$ref": "AAAAAAFpe8b+DKjrrYc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 382, + "top": 97, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8b+DKjvaio=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8b+DKjzx8Y=", + "_parent": { + "$ref": "AAAAAAFpe8b+DKjvaio=" + }, + "model": { + "$ref": "AAAAAAFpe8b+DKjsXws=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 598, + "top": 106, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8b+DKjvaio=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8b+Daj0vqE=", + "_parent": { + "$ref": "AAAAAAFpe8b+DKjvaio=" + }, + "model": { + "$ref": "AAAAAAFpe8b+DKjsXws=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 597, + "top": 119, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8b+DKjvaio=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8b+Daj1Maw=", + "_parent": { + "$ref": "AAAAAAFpe8b+DKjvaio=" + }, + "model": { + "$ref": "AAAAAAFpe8b+DKjsXws=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 600, + "top": 78, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8b+DKjvaio=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8b+Daj2MUI=", + "_parent": { + "$ref": "AAAAAAFpe8b+DKjvaio=" + }, + "model": { + "$ref": "AAAAAAFpe8b+DKjtZ0A=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 172, + "top": 148, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8b+DKjvaio=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8b+Daj3k/8=", + "_parent": { + "$ref": "AAAAAAFpe8b+DKjvaio=" + }, + "model": { + "$ref": "AAAAAAFpe8b+DKjtZ0A=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 175, + "top": 161, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8b+DKjvaio=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8b+Daj4ops=", + "_parent": { + "$ref": "AAAAAAFpe8b+DKjvaio=" + }, + "model": { + "$ref": "AAAAAAFpe8b+DKjtZ0A=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 165, + "top": 121, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8b+DKjvaio=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8b+Daj5uMg=", + "_parent": { + "$ref": "AAAAAAFpe8b+DKjvaio=" + }, + "model": { + "$ref": "AAAAAAFpe8b+DKjsXws=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8b+Daj69YE=", + "_parent": { + "$ref": "AAAAAAFpe8b+DKjvaio=" + }, + "model": { + "$ref": "AAAAAAFpe8b+DKjtZ0A=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe7yoQKIFgzc=" + }, + "tail": { + "$ref": "AAAAAAFpe8LrX6OfnoY=" + }, + "lineStyle": 1, + "points": "623:95;145:142", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe8b+DKjwbJ0=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8b+DKjxpmk=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8b+DKjysIk=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAFpe8b+DKjzx8Y=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAFpe8b+Daj0vqE=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAFpe8b+Daj1Maw=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAFpe8b+Daj2MUI=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAFpe8b+Daj3k/8=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAFpe8b+Daj4ops=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAFpe8b+Daj5uMg=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAFpe8b+Daj69YE=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAFpe8fr16vMtQc=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8fr1avIc20=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8fr16vNFxc=", + "_parent": { + "$ref": "AAAAAAFpe8fr16vMtQc=" + }, + "model": { + "$ref": "AAAAAAFpe8fr1avIc20=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 350, + "top": 185, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8fr16vMtQc=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8fr16vOE4c=", + "_parent": { + "$ref": "AAAAAAFpe8fr16vMtQc=" + }, + "model": { + "$ref": "AAAAAAFpe8fr1avIc20=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 348, + "top": 200, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8fr16vMtQc=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8fr16vPA64=", + "_parent": { + "$ref": "AAAAAAFpe8fr16vMtQc=" + }, + "model": { + "$ref": "AAAAAAFpe8fr1avIc20=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 353, + "top": 156, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8fr16vMtQc=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8fr16vQUoo=", + "_parent": { + "$ref": "AAAAAAFpe8fr16vMtQc=" + }, + "model": { + "$ref": "AAAAAAFpe8fr1avJSV0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 531, + "top": 206, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8fr16vMtQc=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8fr16vRVoE=", + "_parent": { + "$ref": "AAAAAAFpe8fr16vMtQc=" + }, + "model": { + "$ref": "AAAAAAFpe8fr1avJSV0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 527, + "top": 219, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8fr16vMtQc=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8fr16vSYZs=", + "_parent": { + "$ref": "AAAAAAFpe8fr16vMtQc=" + }, + "model": { + "$ref": "AAAAAAFpe8fr1avJSV0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 538, + "top": 180, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8fr16vMtQc=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8fr16vT7GA=", + "_parent": { + "$ref": "AAAAAAFpe8fr16vMtQc=" + }, + "model": { + "$ref": "AAAAAAFpe8fr1avKkKY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 169, + "top": 165, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8fr16vMtQc=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8fr16vUmCQ=", + "_parent": { + "$ref": "AAAAAAFpe8fr16vMtQc=" + }, + "model": { + "$ref": "AAAAAAFpe8fr1avKkKY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 169, + "top": 179, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8fr16vMtQc=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8fr16vV87M=", + "_parent": { + "$ref": "AAAAAAFpe8fr16vMtQc=" + }, + "model": { + "$ref": "AAAAAAFpe8fr1avKkKY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 167, + "top": 138, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8fr16vMtQc=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8fr16vW1gc=", + "_parent": { + "$ref": "AAAAAAFpe8fr16vMtQc=" + }, + "model": { + "$ref": "AAAAAAFpe8fr1avJSV0=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8fr16vX8f4=", + "_parent": { + "$ref": "AAAAAAFpe8fr16vMtQc=" + }, + "model": { + "$ref": "AAAAAAFpe8fr1avKkKY=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe7yoQKIFgzc=" + }, + "tail": { + "$ref": "AAAAAAFpe8KLnKNwoas=" + }, + "lineStyle": 1, + "points": "559:201;145:154", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe8fr16vNFxc=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8fr16vOE4c=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8fr16vPA64=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAFpe8fr16vQUoo=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAFpe8fr16vRVoE=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAFpe8fr16vSYZs=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAFpe8fr16vT7GA=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAFpe8fr16vUmCQ=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAFpe8fr16vV87M=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAFpe8fr16vW1gc=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAFpe8fr16vX8f4=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAFpe8gqPK0AlUI=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8gqPKz8mcA=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8gqPK0B4Gg=", + "_parent": { + "$ref": "AAAAAAFpe8gqPK0AlUI=" + }, + "model": { + "$ref": "AAAAAAFpe8gqPKz8mcA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 220, + "top": 321, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8gqPK0AlUI=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8gqPK0C/Yc=", + "_parent": { + "$ref": "AAAAAAFpe8gqPK0AlUI=" + }, + "model": { + "$ref": "AAAAAAFpe8gqPKz8mcA=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 233, + "top": 313, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8gqPK0AlUI=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8gqPK0DGNE=", + "_parent": { + "$ref": "AAAAAAFpe8gqPK0AlUI=" + }, + "model": { + "$ref": "AAAAAAFpe8gqPKz8mcA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 195, + "top": 338, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8gqPK0AlUI=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8gqPK0EFqg=", + "_parent": { + "$ref": "AAAAAAFpe8gqPK0AlUI=" + }, + "model": { + "$ref": "AAAAAAFpe8gqPKz9N/8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 163, + "top": 232, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8gqPK0AlUI=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8gqPK0Fr7g=", + "_parent": { + "$ref": "AAAAAAFpe8gqPK0AlUI=" + }, + "model": { + "$ref": "AAAAAAFpe8gqPKz9N/8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 176, + "top": 227, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8gqPK0AlUI=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8gqPK0GGRI=", + "_parent": { + "$ref": "AAAAAAFpe8gqPK0AlUI=" + }, + "model": { + "$ref": "AAAAAAFpe8gqPKz9N/8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 138, + "top": 243, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8gqPK0AlUI=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8gqPK0HlvQ=", + "_parent": { + "$ref": "AAAAAAFpe8gqPK0AlUI=" + }, + "model": { + "$ref": "AAAAAAFpe8gqPKz+4UE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 277, + "top": 411, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8gqPK0AlUI=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8gqPK0Iqnc=", + "_parent": { + "$ref": "AAAAAAFpe8gqPK0AlUI=" + }, + "model": { + "$ref": "AAAAAAFpe8gqPKz+4UE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 287, + "top": 401, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8gqPK0AlUI=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8gqPK0JW0Y=", + "_parent": { + "$ref": "AAAAAAFpe8gqPK0AlUI=" + }, + "model": { + "$ref": "AAAAAAFpe8gqPKz+4UE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 256, + "top": 429, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8gqPK0AlUI=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8gqPK0KDLE=", + "_parent": { + "$ref": "AAAAAAFpe8gqPK0AlUI=" + }, + "model": { + "$ref": "AAAAAAFpe8gqPKz9N/8=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8gqPK0Lk+k=", + "_parent": { + "$ref": "AAAAAAFpe8gqPK0AlUI=" + }, + "model": { + "$ref": "AAAAAAFpe8gqPKz+4UE=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe8RpaaSI3HU=" + }, + "tail": { + "$ref": "AAAAAAFpe7yoQKIFgzc=" + }, + "lineStyle": 1, + "points": "137:225;279:447", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe8gqPK0B4Gg=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8gqPK0C/Yc=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8gqPK0DGNE=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAFpe8gqPK0EFqg=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAFpe8gqPK0Fr7g=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAFpe8gqPK0GGRI=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAFpe8gqPK0HlvQ=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAFpe8gqPK0Iqnc=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAFpe8gqPK0JW0Y=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAFpe8gqPK0KDLE=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAFpe8gqPK0Lk+k=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAFpe8g4562OIAg=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8g4562KJq8=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8g4562PNAs=", + "_parent": { + "$ref": "AAAAAAFpe8g4562OIAg=" + }, + "model": { + "$ref": "AAAAAAFpe8g4562KJq8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 181, + "top": 473, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8g4562OIAg=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8g4562QA0I=", + "_parent": { + "$ref": "AAAAAAFpe8g4562OIAg=" + }, + "model": { + "$ref": "AAAAAAFpe8g4562KJq8=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 177, + "top": 459, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8g4562OIAg=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8g4562Rg/o=", + "_parent": { + "$ref": "AAAAAAFpe8g4562OIAg=" + }, + "model": { + "$ref": "AAAAAAFpe8g4562KJq8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 188, + "top": 502, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8g4562OIAg=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8g4562SC4I=", + "_parent": { + "$ref": "AAAAAAFpe8g4562OIAg=" + }, + "model": { + "$ref": "AAAAAAFpe8g4562Lk9I=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 166, + "top": 477, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8g4562OIAg=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8g4562Ttg4=", + "_parent": { + "$ref": "AAAAAAFpe8g4562OIAg=" + }, + "model": { + "$ref": "AAAAAAFpe8g4562Lk9I=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 164, + "top": 464, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8g4562OIAg=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8g4562UzmQ=", + "_parent": { + "$ref": "AAAAAAFpe8g4562OIAg=" + }, + "model": { + "$ref": "AAAAAAFpe8g4562Lk9I=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 169, + "top": 505, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8g4562OIAg=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8g4562Vkck=", + "_parent": { + "$ref": "AAAAAAFpe8g4562OIAg=" + }, + "model": { + "$ref": "AAAAAAFpe8g4562MA5U=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 195, + "top": 469, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8g4562OIAg=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8g4562W7i4=", + "_parent": { + "$ref": "AAAAAAFpe8g4562OIAg=" + }, + "model": { + "$ref": "AAAAAAFpe8g4562MA5U=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 190, + "top": 457, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8g4562OIAg=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8g4562XIrs=", + "_parent": { + "$ref": "AAAAAAFpe8g4562OIAg=" + }, + "model": { + "$ref": "AAAAAAFpe8g4562MA5U=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 207, + "top": 494, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8g4562OIAg=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8g4562Yvsc=", + "_parent": { + "$ref": "AAAAAAFpe8g4562OIAg=" + }, + "model": { + "$ref": "AAAAAAFpe8g4562Lk9I=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8g4562ZTcs=", + "_parent": { + "$ref": "AAAAAAFpe8g4562OIAg=" + }, + "model": { + "$ref": "AAAAAAFpe8g4562MA5U=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe8RpaaSI3HU=" + }, + "tail": { + "$ref": "AAAAAAFpe74tNKJei7k=" + }, + "lineStyle": 1, + "points": "145:505;225:483", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe8g4562PNAs=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8g4562QA0I=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8g4562Rg/o=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAFpe8g4562SC4I=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAFpe8g4562Ttg4=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAFpe8g4562UzmQ=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAFpe8g4562Vkck=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAFpe8g4562W7i4=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAFpe8g4562XIrs=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAFpe8g4562Yvsc=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAFpe8g4562ZTcs=" + } + }, + { + "_type": "UMLIncludeView", + "_id": "AAAAAAFpe8h6z6/lR2k=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8h6z6/jWvo=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8h6z6/mRmA=", + "_parent": { + "$ref": "AAAAAAFpe8h6z6/lR2k=" + }, + "model": { + "$ref": "AAAAAAFpe8h6z6/jWvo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 859, + "top": 392, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8h6z6/lR2k=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8h6z6/nCOY=", + "_parent": { + "$ref": "AAAAAAFpe8h6z6/lR2k=" + }, + "model": { + "$ref": "AAAAAAFpe8h6z6/jWvo=" + }, + "font": "Arial;13;0", + "left": 847, + "top": 391, + "width": 55.65625, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8h6z6/lR2k=" + }, + "edgePosition": 1, + "text": "«include»" + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8h6z6/oSwU=", + "_parent": { + "$ref": "AAAAAAFpe8h6z6/lR2k=" + }, + "model": { + "$ref": "AAAAAAFpe8h6z6/jWvo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 830, + "top": 393, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8h6z6/lR2k=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe8PfmKQrOsM=" + }, + "tail": { + "$ref": "AAAAAAFpe8P6N6RZDco=" + }, + "lineStyle": 1, + "points": "845:376;846:423", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe8h6z6/mRmA=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8h6z6/nCOY=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8h6z6/oSwU=" + } + }, + { + "_type": "UMLUseCaseView", + "_id": "AAAAAAFpe8iv+7CeqrY=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8iv+rCcljc=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFpe8iv+7CfNPk=", + "_parent": { + "$ref": "AAAAAAFpe8iv+7CeqrY=" + }, + "model": { + "$ref": "AAAAAAFpe8iv+rCcljc=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFpe8iv+7Cg1S4=", + "_parent": { + "$ref": "AAAAAAFpe8iv+7CfNPk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 704, + "top": -240, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8iv+7ChFEA=", + "_parent": { + "$ref": "AAAAAAFpe8iv+7CfNPk=" + }, + "font": "Arial;13;1", + "left": 786.5, + "top": 578, + "width": 131, + "height": 13, + "text": "deleteOwnComment" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8iv+7CiWbM=", + "_parent": { + "$ref": "AAAAAAFpe8iv+7CfNPk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 704, + "top": -240, + "width": 80.9072265625, + "height": 13, + "text": "(from Model1)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8iv+7CjKNY=", + "_parent": { + "$ref": "AAAAAAFpe8iv+7CfNPk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 704, + "top": -240, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 781.5, + "top": 571, + "width": 141, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8iv+7Cg1S4=" + }, + "nameLabel": { + "$ref": "AAAAAAFpe8iv+7ChFEA=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFpe8iv+7CiWbM=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8iv+7CjKNY=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFpe8iv+7CkKU0=", + "_parent": { + "$ref": "AAAAAAFpe8iv+7CeqrY=" + }, + "model": { + "$ref": "AAAAAAFpe8iv+rCcljc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 352, + "top": -120, + "width": 10, + "height": 10 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFpe8iv+7Clhhw=", + "_parent": { + "$ref": "AAAAAAFpe8iv+7CeqrY=" + }, + "model": { + "$ref": "AAAAAAFpe8iv+rCcljc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 352, + "top": -120, + "width": 10, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFpe8iv+7CmqCo=", + "_parent": { + "$ref": "AAAAAAFpe8iv+7CeqrY=" + }, + "model": { + "$ref": "AAAAAAFpe8iv+rCcljc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 352, + "top": -120, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFpe8iv+7CnNTc=", + "_parent": { + "$ref": "AAAAAAFpe8iv+7CeqrY=" + }, + "model": { + "$ref": "AAAAAAFpe8iv+rCcljc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 352, + "top": -120, + "width": 10, + "height": 10 + }, + { + "_type": "UMLExtensionPointCompartmentView", + "_id": "AAAAAAFpe8iv+7Co6xE=", + "_parent": { + "$ref": "AAAAAAFpe8iv+7CeqrY=" + }, + "model": { + "$ref": "AAAAAAFpe8iv+rCcljc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 352, + "top": -120, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 752, + "top": 552, + "width": 200, + "height": 64, + "nameCompartment": { + "$ref": "AAAAAAFpe8iv+7CfNPk=" + }, + "suppressAttributes": true, + "suppressOperations": true, + "attributeCompartment": { + "$ref": "AAAAAAFpe8iv+7CkKU0=" + }, + "operationCompartment": { + "$ref": "AAAAAAFpe8iv+7Clhhw=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFpe8iv+7CmqCo=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFpe8iv+7CnNTc=" + }, + "extensionPointCompartment": { + "$ref": "AAAAAAFpe8iv+7Co6xE=" + } + }, + { + "_type": "UMLIncludeView", + "_id": "AAAAAAFpe8jZnLHebAU=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8jZnLHcsxc=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8jZnLHfz+0=", + "_parent": { + "$ref": "AAAAAAFpe8jZnLHebAU=" + }, + "model": { + "$ref": "AAAAAAFpe8jZnLHcsxc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 834, + "top": 521, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8jZnLHebAU=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8jZnLHgpdo=", + "_parent": { + "$ref": "AAAAAAFpe8jZnLHebAU=" + }, + "model": { + "$ref": "AAAAAAFpe8jZnLHcsxc=" + }, + "font": "Arial;13;0", + "left": 792, + "top": 521, + "width": 55.65625, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8jZnLHebAU=" + }, + "edgePosition": 1, + "text": "«include»" + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8jZnLHhNks=", + "_parent": { + "$ref": "AAAAAAFpe8jZnLHebAU=" + }, + "model": { + "$ref": "AAAAAAFpe8jZnLHcsxc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 863, + "top": 522, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8jZnLHebAU=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe8PfmKQrOsM=" + }, + "tail": { + "$ref": "AAAAAAFpe8iv+7CeqrY=" + }, + "lineStyle": 1, + "points": "850:551;849:505", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe8jZnLHfz+0=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8jZnLHgpdo=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8jZnLHhNks=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAFpe8kfKrTVWZo=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8kfKrTRv6c=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8kfKrTW460=", + "_parent": { + "$ref": "AAAAAAFpe8kfKrTVWZo=" + }, + "model": { + "$ref": "AAAAAAFpe8kfKrTRv6c=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 464, + "top": 609, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8kfKrTVWZo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8kfKrTX5Dc=", + "_parent": { + "$ref": "AAAAAAFpe8kfKrTVWZo=" + }, + "model": { + "$ref": "AAAAAAFpe8kfKrTRv6c=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 468, + "top": 595, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8kfKrTVWZo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8kfKrTYkZ8=", + "_parent": { + "$ref": "AAAAAAFpe8kfKrTVWZo=" + }, + "model": { + "$ref": "AAAAAAFpe8kfKrTRv6c=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 455, + "top": 638, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8kfKrTVWZo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8kfKrTZldw=", + "_parent": { + "$ref": "AAAAAAFpe8kfKrTVWZo=" + }, + "model": { + "$ref": "AAAAAAFpe8kfKrTSwTM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 174, + "top": 523, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8kfKrTVWZo=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8kfKrTaNOw=", + "_parent": { + "$ref": "AAAAAAFpe8kfKrTVWZo=" + }, + "model": { + "$ref": "AAAAAAFpe8kfKrTSwTM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 180, + "top": 511, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8kfKrTVWZo=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8kfKrTbYcw=", + "_parent": { + "$ref": "AAAAAAFpe8kfKrTVWZo=" + }, + "model": { + "$ref": "AAAAAAFpe8kfKrTSwTM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 162, + "top": 549, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8kfKrTVWZo=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8kfKrTcGUk=", + "_parent": { + "$ref": "AAAAAAFpe8kfKrTVWZo=" + }, + "model": { + "$ref": "AAAAAAFpe8kfKrTTqKs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 754, + "top": 695, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8kfKrTVWZo=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8kfKrTdDbE=", + "_parent": { + "$ref": "AAAAAAFpe8kfKrTVWZo=" + }, + "model": { + "$ref": "AAAAAAFpe8kfKrTTqKs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 755, + "top": 681, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8kfKrTVWZo=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8kfKrTeF08=", + "_parent": { + "$ref": "AAAAAAFpe8kfKrTVWZo=" + }, + "model": { + "$ref": "AAAAAAFpe8kfKrTTqKs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 750, + "top": 722, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8kfKrTVWZo=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8kfKrTfHlE=", + "_parent": { + "$ref": "AAAAAAFpe8kfKrTVWZo=" + }, + "model": { + "$ref": "AAAAAAFpe8kfKrTSwTM=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8kfKrTgrds=", + "_parent": { + "$ref": "AAAAAAFpe8kfKrTVWZo=" + }, + "model": { + "$ref": "AAAAAAFpe8kfKrTTqKs=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe8O4QaP8JVM=" + }, + "tail": { + "$ref": "AAAAAAFpe74tNKJei7k=" + }, + "lineStyle": 1, + "points": "145:537;775:723", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe8kfKrTW460=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8kfKrTX5Dc=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8kfKrTYkZ8=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAFpe8kfKrTZldw=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAFpe8kfKrTaNOw=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAFpe8kfKrTbYcw=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAFpe8kfKrTcGUk=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAFpe8kfKrTdDbE=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAFpe8kfKrTeF08=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAFpe8kfKrTfHlE=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAFpe8kfKrTgrds=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAFpe8ksjbWB3vw=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8ksjbV9Fno=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8ksjbWCRYE=", + "_parent": { + "$ref": "AAAAAAFpe8ksjbWB3vw=" + }, + "model": { + "$ref": "AAAAAAFpe8ksjbV9Fno=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 458, + "top": 781, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8ksjbWB3vw=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8ksjbWD0kM=", + "_parent": { + "$ref": "AAAAAAFpe8ksjbWB3vw=" + }, + "model": { + "$ref": "AAAAAAFpe8ksjbV9Fno=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 456, + "top": 766, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8ksjbWB3vw=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8ksjbWE/rg=", + "_parent": { + "$ref": "AAAAAAFpe8ksjbWB3vw=" + }, + "model": { + "$ref": "AAAAAAFpe8ksjbV9Fno=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 461, + "top": 810, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8ksjbWB3vw=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8ksjbWFM9M=", + "_parent": { + "$ref": "AAAAAAFpe8ksjbWB3vw=" + }, + "model": { + "$ref": "AAAAAAFpe8ksjbV+v48=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 168, + "top": 816, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8ksjbWB3vw=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8ksjbWGnLw=", + "_parent": { + "$ref": "AAAAAAFpe8ksjbWB3vw=" + }, + "model": { + "$ref": "AAAAAAFpe8ksjbV+v48=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 169, + "top": 803, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8ksjbWB3vw=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8ksjbWH4XM=", + "_parent": { + "$ref": "AAAAAAFpe8ksjbWB3vw=" + }, + "model": { + "$ref": "AAAAAAFpe8ksjbV+v48=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 168, + "top": 844, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8ksjbWB3vw=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8ksjbWInUI=", + "_parent": { + "$ref": "AAAAAAFpe8ksjbWB3vw=" + }, + "model": { + "$ref": "AAAAAAFpe8ksjbV/7io=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 747, + "top": 746, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8ksjbWB3vw=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8ksjbWJdOo=", + "_parent": { + "$ref": "AAAAAAFpe8ksjbWB3vw=" + }, + "model": { + "$ref": "AAAAAAFpe8ksjbV/7io=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 743, + "top": 733, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8ksjbWB3vw=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8ksjbWKX8Y=", + "_parent": { + "$ref": "AAAAAAFpe8ksjbWB3vw=" + }, + "model": { + "$ref": "AAAAAAFpe8ksjbV/7io=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 755, + "top": 773, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8ksjbWB3vw=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8ksjbWLRuU=", + "_parent": { + "$ref": "AAAAAAFpe8ksjbWB3vw=" + }, + "model": { + "$ref": "AAAAAAFpe8ksjbV+v48=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8ksjbWMHX8=", + "_parent": { + "$ref": "AAAAAAFpe8ksjbWB3vw=" + }, + "model": { + "$ref": "AAAAAAFpe8ksjbV/7io=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe8O4QaP8JVM=" + }, + "tail": { + "$ref": "AAAAAAFpe73eVqIx8wc=" + }, + "lineStyle": 1, + "points": "145:841;775:764", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe8ksjbWCRYE=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8ksjbWD0kM=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8ksjbWE/rg=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAFpe8ksjbWFM9M=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAFpe8ksjbWGnLw=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAFpe8ksjbWH4XM=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAFpe8ksjbWInUI=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAFpe8ksjbWJdOo=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAFpe8ksjbWKX8Y=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAFpe8ksjbWLRuU=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAFpe8ksjbWMHX8=" + } + }, + { + "_type": "UMLUseCaseView", + "_id": "AAAAAAFpe8naz7qLlDg=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8naz7qJ1Z8=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFpe8naz7qMfWY=", + "_parent": { + "$ref": "AAAAAAFpe8naz7qLlDg=" + }, + "model": { + "$ref": "AAAAAAFpe8naz7qJ1Z8=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFpe8naz7qNfNY=", + "_parent": { + "$ref": "AAAAAAFpe8naz7qMfWY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 384, + "top": 368, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8naz7qOdj4=", + "_parent": { + "$ref": "AAAAAAFpe8naz7qMfWY=" + }, + "font": "Arial;13;1", + "left": 809.5, + "top": 902.5, + "width": 126, + "height": 13, + "text": "previewComment" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8naz7qPN7g=", + "_parent": { + "$ref": "AAAAAAFpe8naz7qMfWY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 384, + "top": 368, + "width": 80.9072265625, + "height": 13, + "text": "(from Model1)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8naz7qQtrU=", + "_parent": { + "$ref": "AAAAAAFpe8naz7qMfWY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 384, + "top": 368, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 804.5, + "top": 895.5, + "width": 136, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8naz7qNfNY=" + }, + "nameLabel": { + "$ref": "AAAAAAFpe8naz7qOdj4=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFpe8naz7qPN7g=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8naz7qQtrU=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFpe8naz7qRTZo=", + "_parent": { + "$ref": "AAAAAAFpe8naz7qLlDg=" + }, + "model": { + "$ref": "AAAAAAFpe8naz7qJ1Z8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 192, + "top": 184, + "width": 10, + "height": 10 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFpe8naz7qSqE4=", + "_parent": { + "$ref": "AAAAAAFpe8naz7qLlDg=" + }, + "model": { + "$ref": "AAAAAAFpe8naz7qJ1Z8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 192, + "top": 184, + "width": 10, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFpe8naz7qT0fM=", + "_parent": { + "$ref": "AAAAAAFpe8naz7qLlDg=" + }, + "model": { + "$ref": "AAAAAAFpe8naz7qJ1Z8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 192, + "top": 184, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFpe8naz7qUqBE=", + "_parent": { + "$ref": "AAAAAAFpe8naz7qLlDg=" + }, + "model": { + "$ref": "AAAAAAFpe8naz7qJ1Z8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 192, + "top": 184, + "width": 10, + "height": 10 + }, + { + "_type": "UMLExtensionPointCompartmentView", + "_id": "AAAAAAFpe8naz7qVIDw=", + "_parent": { + "$ref": "AAAAAAFpe8naz7qLlDg=" + }, + "model": { + "$ref": "AAAAAAFpe8naz7qJ1Z8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 192, + "top": 184, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 776, + "top": 880, + "width": 193, + "height": 57, + "nameCompartment": { + "$ref": "AAAAAAFpe8naz7qMfWY=" + }, + "suppressAttributes": true, + "suppressOperations": true, + "attributeCompartment": { + "$ref": "AAAAAAFpe8naz7qRTZo=" + }, + "operationCompartment": { + "$ref": "AAAAAAFpe8naz7qSqE4=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFpe8naz7qT0fM=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFpe8naz7qUqBE=" + }, + "extensionPointCompartment": { + "$ref": "AAAAAAFpe8naz7qVIDw=" + } + }, + { + "_type": "UMLExtendView", + "_id": "AAAAAAFpe8oB8LxAw6A=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8oB8Lw+Pyo=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8oB8LxBzI8=", + "_parent": { + "$ref": "AAAAAAFpe8oB8LxAw6A=" + }, + "model": { + "$ref": "AAAAAAFpe8oB8Lw+Pyo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 857, + "top": 833, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8oB8LxAw6A=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8oB8LxCa1g=", + "_parent": { + "$ref": "AAAAAAFpe8oB8LxAw6A=" + }, + "model": { + "$ref": "AAAAAAFpe8oB8Lw+Pyo=" + }, + "font": "Arial;13;0", + "left": 816, + "top": 833, + "width": 53.49169921875, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8oB8LxAw6A=" + }, + "edgePosition": 1, + "text": "«extend»" + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8oB8LxDC9c=", + "_parent": { + "$ref": "AAAAAAFpe8oB8LxAw6A=" + }, + "model": { + "$ref": "AAAAAAFpe8oB8Lw+Pyo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 886, + "top": 834, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8oB8LxAw6A=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe8O4QaP8JVM=" + }, + "tail": { + "$ref": "AAAAAAFpe8naz7qLlDg=" + }, + "lineStyle": 1, + "points": "872:879;872:801", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe8oB8LxBzI8=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8oB8LxCa1g=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8oB8LxDC9c=" + } + }, + { + "_type": "UMLUseCaseView", + "_id": "AAAAAAFpe8ogfr1BhhI=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8ogfr0/XnY=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFpe8ogfr1C5yg=", + "_parent": { + "$ref": "AAAAAAFpe8ogfr1BhhI=" + }, + "model": { + "$ref": "AAAAAAFpe8ogfr0/XnY=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFpe8ogfr1DJew=", + "_parent": { + "$ref": "AAAAAAFpe8ogfr1C5yg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 544, + "top": 256, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8ogfr1ECHc=", + "_parent": { + "$ref": "AAAAAAFpe8ogfr1C5yg=" + }, + "font": "Arial;13;1", + "left": 382, + "top": 858.5, + "width": 109, + "height": 13, + "text": "voteComment" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8ogfr1FlWc=", + "_parent": { + "$ref": "AAAAAAFpe8ogfr1C5yg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 544, + "top": 256, + "width": 80.9072265625, + "height": 13, + "text": "(from Model1)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8ogfr1G5W0=", + "_parent": { + "$ref": "AAAAAAFpe8ogfr1C5yg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 544, + "top": 256, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 377, + "top": 851.5, + "width": 119, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8ogfr1DJew=" + }, + "nameLabel": { + "$ref": "AAAAAAFpe8ogfr1ECHc=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFpe8ogfr1FlWc=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8ogfr1G5W0=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFpe8ogfr1HBbQ=", + "_parent": { + "$ref": "AAAAAAFpe8ogfr1BhhI=" + }, + "model": { + "$ref": "AAAAAAFpe8ogfr0/XnY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 272, + "top": 128, + "width": 10, + "height": 10 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFpe8ogfr1IDrE=", + "_parent": { + "$ref": "AAAAAAFpe8ogfr1BhhI=" + }, + "model": { + "$ref": "AAAAAAFpe8ogfr0/XnY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 272, + "top": 128, + "width": 10, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFpe8ogfr1JjOc=", + "_parent": { + "$ref": "AAAAAAFpe8ogfr1BhhI=" + }, + "model": { + "$ref": "AAAAAAFpe8ogfr0/XnY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 272, + "top": 128, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFpe8ogfr1KNb8=", + "_parent": { + "$ref": "AAAAAAFpe8ogfr1BhhI=" + }, + "model": { + "$ref": "AAAAAAFpe8ogfr0/XnY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 272, + "top": 128, + "width": 10, + "height": 10 + }, + { + "_type": "UMLExtensionPointCompartmentView", + "_id": "AAAAAAFpe8ogfr1L5Ik=", + "_parent": { + "$ref": "AAAAAAFpe8ogfr1BhhI=" + }, + "model": { + "$ref": "AAAAAAFpe8ogfr0/XnY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 272, + "top": 128, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 352, + "top": 840, + "width": 169, + "height": 49, + "nameCompartment": { + "$ref": "AAAAAAFpe8ogfr1C5yg=" + }, + "suppressAttributes": true, + "suppressOperations": true, + "attributeCompartment": { + "$ref": "AAAAAAFpe8ogfr1HBbQ=" + }, + "operationCompartment": { + "$ref": "AAAAAAFpe8ogfr1IDrE=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFpe8ogfr1JjOc=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFpe8ogfr1KNb8=" + }, + "extensionPointCompartment": { + "$ref": "AAAAAAFpe8ogfr1L5Ik=" + } + }, + { + "_type": "UMLUseCaseView", + "_id": "AAAAAAFpe8pwTL/oqHM=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8pwTL/mWkg=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFpe8pwTL/pxBA=", + "_parent": { + "$ref": "AAAAAAFpe8pwTL/oqHM=" + }, + "model": { + "$ref": "AAAAAAFpe8pwTL/mWkg=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFpe8pwTb/qoyE=", + "_parent": { + "$ref": "AAAAAAFpe8pwTL/pxBA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 368, + "top": -32, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8pwTb/rutk=", + "_parent": { + "$ref": "AAAAAAFpe8pwTL/pxBA=" + }, + "font": "Arial;13;1", + "left": 565, + "top": 730.5, + "width": 103, + "height": 13, + "text": "search" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8pwTb/semQ=", + "_parent": { + "$ref": "AAAAAAFpe8pwTL/pxBA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 368, + "top": -32, + "width": 80.9072265625, + "height": 13, + "text": "(from Model1)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe8pwTb/tM5M=", + "_parent": { + "$ref": "AAAAAAFpe8pwTL/pxBA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 368, + "top": -32, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 560, + "top": 723.5, + "width": 113, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8pwTb/qoyE=" + }, + "nameLabel": { + "$ref": "AAAAAAFpe8pwTb/rutk=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFpe8pwTb/semQ=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8pwTb/tM5M=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFpe8pwTb/uw6Y=", + "_parent": { + "$ref": "AAAAAAFpe8pwTL/oqHM=" + }, + "model": { + "$ref": "AAAAAAFpe8pwTL/mWkg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 184, + "top": -16, + "width": 10, + "height": 10 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFpe8pwTb/vZM8=", + "_parent": { + "$ref": "AAAAAAFpe8pwTL/oqHM=" + }, + "model": { + "$ref": "AAAAAAFpe8pwTL/mWkg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 184, + "top": -16, + "width": 10, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFpe8pwTb/wEHo=", + "_parent": { + "$ref": "AAAAAAFpe8pwTL/oqHM=" + }, + "model": { + "$ref": "AAAAAAFpe8pwTL/mWkg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 184, + "top": -16, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFpe8pwTb/xhzc=", + "_parent": { + "$ref": "AAAAAAFpe8pwTL/oqHM=" + }, + "model": { + "$ref": "AAAAAAFpe8pwTL/mWkg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 184, + "top": -16, + "width": 10, + "height": 10 + }, + { + "_type": "UMLExtensionPointCompartmentView", + "_id": "AAAAAAFpe8pwTb/yJQs=", + "_parent": { + "$ref": "AAAAAAFpe8pwTL/oqHM=" + }, + "model": { + "$ref": "AAAAAAFpe8pwTL/mWkg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 184, + "top": -16, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 536, + "top": 704, + "width": 161, + "height": 65, + "nameCompartment": { + "$ref": "AAAAAAFpe8pwTL/pxBA=" + }, + "suppressAttributes": true, + "suppressOperations": true, + "attributeCompartment": { + "$ref": "AAAAAAFpe8pwTb/uw6Y=" + }, + "operationCompartment": { + "$ref": "AAAAAAFpe8pwTb/vZM8=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFpe8pwTb/wEHo=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFpe8pwTb/xhzc=" + }, + "extensionPointCompartment": { + "$ref": "AAAAAAFpe8pwTb/yJQs=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAFpe8tar8MJAaM=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8tarsMFO18=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8tar8MKSkQ=", + "_parent": { + "$ref": "AAAAAAFpe8tar8MJAaM=" + }, + "model": { + "$ref": "AAAAAAFpe8tarsMFO18=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 336, + "top": 773, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8tar8MJAaM=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8tar8MLJBg=", + "_parent": { + "$ref": "AAAAAAFpe8tar8MJAaM=" + }, + "model": { + "$ref": "AAAAAAFpe8tarsMFO18=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 333, + "top": 758, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8tar8MJAaM=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8tar8MMyIs=", + "_parent": { + "$ref": "AAAAAAFpe8tar8MJAaM=" + }, + "model": { + "$ref": "AAAAAAFpe8tarsMFO18=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 343, + "top": 802, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8tar8MJAaM=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8tar8MNAS8=", + "_parent": { + "$ref": "AAAAAAFpe8tar8MJAaM=" + }, + "model": { + "$ref": "AAAAAAFpe8tarsMGPXU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 167, + "top": 809, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8tar8MJAaM=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8tar8MOgYI=", + "_parent": { + "$ref": "AAAAAAFpe8tar8MJAaM=" + }, + "model": { + "$ref": "AAAAAAFpe8tarsMGPXU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 166, + "top": 796, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8tar8MJAaM=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8tar8MPkbs=", + "_parent": { + "$ref": "AAAAAAFpe8tar8MJAaM=" + }, + "model": { + "$ref": "AAAAAAFpe8tarsMGPXU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 168, + "top": 837, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8tar8MJAaM=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8tar8MQtOE=", + "_parent": { + "$ref": "AAAAAAFpe8tar8MJAaM=" + }, + "model": { + "$ref": "AAAAAAFpe8tarsMHI3w=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 506, + "top": 737, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8tar8MJAaM=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8tar8MR2Jc=", + "_parent": { + "$ref": "AAAAAAFpe8tar8MJAaM=" + }, + "model": { + "$ref": "AAAAAAFpe8tarsMHI3w=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 501, + "top": 725, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8tar8MJAaM=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8tar8MSAHA=", + "_parent": { + "$ref": "AAAAAAFpe8tar8MJAaM=" + }, + "model": { + "$ref": "AAAAAAFpe8tarsMHI3w=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 516, + "top": 763, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8tar8MJAaM=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8tar8MTdEs=", + "_parent": { + "$ref": "AAAAAAFpe8tar8MJAaM=" + }, + "model": { + "$ref": "AAAAAAFpe8tarsMGPXU=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8tar8MUGFU=", + "_parent": { + "$ref": "AAAAAAFpe8tar8MJAaM=" + }, + "model": { + "$ref": "AAAAAAFpe8tarsMHI3w=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe8pwTL/oqHM=" + }, + "tail": { + "$ref": "AAAAAAFpe73eVqIx8wc=" + }, + "lineStyle": 1, + "points": "145:836;535:753", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe8tar8MKSkQ=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8tar8MLJBg=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8tar8MMyIs=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAFpe8tar8MNAS8=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAFpe8tar8MOgYI=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAFpe8tar8MPkbs=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAFpe8tar8MQtOE=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAFpe8tar8MR2Jc=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAFpe8tar8MSAHA=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAFpe8tar8MTdEs=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAFpe8tar8MUGFU=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAFpe8tt78PiJz4=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8tt7sPeam0=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8tt78PjcDw=", + "_parent": { + "$ref": "AAAAAAFpe8tt78PiJz4=" + }, + "model": { + "$ref": "AAAAAAFpe8tt7sPeam0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 345, + "top": 603, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8tt78PiJz4=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8tt78PkyaM=", + "_parent": { + "$ref": "AAAAAAFpe8tt78PiJz4=" + }, + "model": { + "$ref": "AAAAAAFpe8tt7sPeam0=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 351, + "top": 589, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8tt78PiJz4=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8tt78Pl3vc=", + "_parent": { + "$ref": "AAAAAAFpe8tt78PiJz4=" + }, + "model": { + "$ref": "AAAAAAFpe8tt7sPeam0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 334, + "top": 630, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8tt78PiJz4=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8tt78Pmlj4=", + "_parent": { + "$ref": "AAAAAAFpe8tt78PiJz4=" + }, + "model": { + "$ref": "AAAAAAFpe8tt7sPfDhY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 174, + "top": 532, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8tt78PiJz4=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8tt78PnduI=", + "_parent": { + "$ref": "AAAAAAFpe8tt78PiJz4=" + }, + "model": { + "$ref": "AAAAAAFpe8tt7sPfDhY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 181, + "top": 521, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8tt78PiJz4=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8tt78Po4QE=", + "_parent": { + "$ref": "AAAAAAFpe8tt78PiJz4=" + }, + "model": { + "$ref": "AAAAAAFpe8tt7sPfDhY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 160, + "top": 556, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8tt78PiJz4=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8tt78Pp0S0=", + "_parent": { + "$ref": "AAAAAAFpe8tt78PiJz4=" + }, + "model": { + "$ref": "AAAAAAFpe8tt7sPgUbQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 516, + "top": 673, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8tt78PiJz4=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8tt78PqlzM=", + "_parent": { + "$ref": "AAAAAAFpe8tt78PiJz4=" + }, + "model": { + "$ref": "AAAAAAFpe8tt7sPgUbQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 519, + "top": 660, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8tt78PiJz4=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8tt78Pre5Q=", + "_parent": { + "$ref": "AAAAAAFpe8tt78PiJz4=" + }, + "model": { + "$ref": "AAAAAAFpe8tt7sPgUbQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 510, + "top": 700, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8tt78PiJz4=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8tt78PsYLY=", + "_parent": { + "$ref": "AAAAAAFpe8tt78PiJz4=" + }, + "model": { + "$ref": "AAAAAAFpe8tt7sPfDhY=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8tt78PtiB0=", + "_parent": { + "$ref": "AAAAAAFpe8tt78PiJz4=" + }, + "model": { + "$ref": "AAAAAAFpe8tt7sPgUbQ=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe8pwTL/oqHM=" + }, + "tail": { + "$ref": "AAAAAAFpe74tNKJei7k=" + }, + "lineStyle": 1, + "points": "145:543;535:703", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe8tt78PjcDw=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8tt78PkyaM=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8tt78Pl3vc=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAFpe8tt78Pmlj4=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAFpe8tt78PnduI=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAFpe8tt78Po4QE=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAFpe8tt78Pp0S0=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAFpe8tt78PqlzM=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAFpe8tt78Pre5Q=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAFpe8tt78PsYLY=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAFpe8tt78PtiB0=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAFpe8t8E8TKTB8=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8t8E8TGI7c=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8t8E8TLNSQ=", + "_parent": { + "$ref": "AAAAAAFpe8t8E8TKTB8=" + }, + "model": { + "$ref": "AAAAAAFpe8t8E8TGI7c=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 376, + "top": 440, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8t8E8TKTB8=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8t8E8TMKZI=", + "_parent": { + "$ref": "AAAAAAFpe8t8E8TKTB8=" + }, + "model": { + "$ref": "AAAAAAFpe8t8E8TGI7c=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 387, + "top": 430, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8t8E8TKTB8=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8t8E8TNAKk=", + "_parent": { + "$ref": "AAAAAAFpe8t8E8TKTB8=" + }, + "model": { + "$ref": "AAAAAAFpe8t8E8TGI7c=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 353, + "top": 461, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8t8E8TKTB8=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8t8E8TO32U=", + "_parent": { + "$ref": "AAAAAAFpe8t8E8TKTB8=" + }, + "model": { + "$ref": "AAAAAAFpe8t8E8THAiU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 173, + "top": 214, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8t8E8TKTB8=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8t8FMTPdDg=", + "_parent": { + "$ref": "AAAAAAFpe8t8E8TKTB8=" + }, + "model": { + "$ref": "AAAAAAFpe8t8E8THAiU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 184, + "top": 207, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8t8E8TKTB8=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8t8FMTQEBw=", + "_parent": { + "$ref": "AAAAAAFpe8t8E8TKTB8=" + }, + "model": { + "$ref": "AAAAAAFpe8t8E8THAiU=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 150, + "top": 229, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8t8E8TKTB8=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8t8FMTRkes=", + "_parent": { + "$ref": "AAAAAAFpe8t8E8TKTB8=" + }, + "model": { + "$ref": "AAAAAAFpe8t8E8TIqpw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 579, + "top": 667, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8t8E8TKTB8=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8t8FMTS7iU=", + "_parent": { + "$ref": "AAAAAAFpe8t8E8TKTB8=" + }, + "model": { + "$ref": "AAAAAAFpe8t8E8TIqpw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 588, + "top": 657, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8t8E8TKTB8=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8t8FMTT2Xw=", + "_parent": { + "$ref": "AAAAAAFpe8t8E8TKTB8=" + }, + "model": { + "$ref": "AAAAAAFpe8t8E8TIqpw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 562, + "top": 689, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8t8E8TKTB8=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8t8FMTUn7s=", + "_parent": { + "$ref": "AAAAAAFpe8t8E8TKTB8=" + }, + "model": { + "$ref": "AAAAAAFpe8t8E8THAiU=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8t8FMTV0w8=", + "_parent": { + "$ref": "AAAAAAFpe8t8E8TKTB8=" + }, + "model": { + "$ref": "AAAAAAFpe8t8E8TIqpw=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe8pwTL/oqHM=" + }, + "tail": { + "$ref": "AAAAAAFpe7yoQKIFgzc=" + }, + "lineStyle": 1, + "points": "145:211;586:703", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe8t8E8TLNSQ=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8t8E8TMKZI=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8t8E8TNAKk=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAFpe8t8E8TO32U=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAFpe8t8FMTPdDg=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAFpe8t8FMTQEBw=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAFpe8t8FMTRkes=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAFpe8t8FMTS7iU=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAFpe8t8FMTT2Xw=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAFpe8t8FMTUn7s=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAFpe8t8FMTV0w8=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAFpe8uLTsXBAdI=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8uLTsW9CsI=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8uLTsXCX0Y=", + "_parent": { + "$ref": "AAAAAAFpe8uLTsXBAdI=" + }, + "model": { + "$ref": "AAAAAAFpe8uLTsW9CsI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 439, + "top": 213, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8uLTsXBAdI=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8uLTsXDfyY=", + "_parent": { + "$ref": "AAAAAAFpe8uLTsXBAdI=" + }, + "model": { + "$ref": "AAAAAAFpe8uLTsW9CsI=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 443, + "top": 198, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8uLTsXBAdI=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8uLTsXErBE=", + "_parent": { + "$ref": "AAAAAAFpe8uLTsXBAdI=" + }, + "model": { + "$ref": "AAAAAAFpe8uLTsW9CsI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 432, + "top": 242, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8uLTsXBAdI=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8uLTsXFYBg=", + "_parent": { + "$ref": "AAAAAAFpe8uLTsXBAdI=" + }, + "model": { + "$ref": "AAAAAAFpe8uLTsW+X4s=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 173, + "top": 147, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8uLTsXBAdI=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8uLTsXGROE=", + "_parent": { + "$ref": "AAAAAAFpe8uLTsXBAdI=" + }, + "model": { + "$ref": "AAAAAAFpe8uLTsW+X4s=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 179, + "top": 135, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8uLTsXBAdI=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8uLTsXHsz4=", + "_parent": { + "$ref": "AAAAAAFpe8uLTsXBAdI=" + }, + "model": { + "$ref": "AAAAAAFpe8uLTsW+X4s=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 163, + "top": 173, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8uLTsXBAdI=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8uLTsXI9Yw=", + "_parent": { + "$ref": "AAAAAAFpe8uLTsXBAdI=" + }, + "model": { + "$ref": "AAAAAAFpe8uLTsW/5/4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 705, + "top": 279, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8uLTsXBAdI=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8uLTsXJtbs=", + "_parent": { + "$ref": "AAAAAAFpe8uLTsXBAdI=" + }, + "model": { + "$ref": "AAAAAAFpe8uLTsW/5/4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 706, + "top": 265, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8uLTsXBAdI=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8uLTsXKfWU=", + "_parent": { + "$ref": "AAAAAAFpe8uLTsXBAdI=" + }, + "model": { + "$ref": "AAAAAAFpe8uLTsW/5/4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 702, + "top": 306, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8uLTsXBAdI=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8uLTsXLScY=", + "_parent": { + "$ref": "AAAAAAFpe8uLTsXBAdI=" + }, + "model": { + "$ref": "AAAAAAFpe8uLTsW+X4s=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8uLTsXMHTE=", + "_parent": { + "$ref": "AAAAAAFpe8uLTsXBAdI=" + }, + "model": { + "$ref": "AAAAAAFpe8uLTsW/5/4=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe8P6N6RZDco=" + }, + "tail": { + "$ref": "AAAAAAFpe7yoQKIFgzc=" + }, + "lineStyle": 1, + "points": "145:162;727:306", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe8uLTsXCX0Y=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8uLTsXDfyY=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8uLTsXErBE=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAFpe8uLTsXFYBg=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAFpe8uLTsXGROE=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAFpe8uLTsXHsz4=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAFpe8uLTsXI9Yw=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAFpe8uLTsXJtbs=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAFpe8uLTsXKfWU=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAFpe8uLTsXLScY=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAFpe8uLTsXMHTE=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAFpe8ulw8bHxHs=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8ulw8bDHbo=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8ulw8bII3A=", + "_parent": { + "$ref": "AAAAAAFpe8ulw8bHxHs=" + }, + "model": { + "$ref": "AAAAAAFpe8ulw8bDHbo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 477, + "top": 345, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8ulw8bHxHs=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8ulw8bJ0HA=", + "_parent": { + "$ref": "AAAAAAFpe8ulw8bHxHs=" + }, + "model": { + "$ref": "AAAAAAFpe8ulw8bDHbo=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 484, + "top": 332, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8ulw8bHxHs=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8ulxMbKLKU=", + "_parent": { + "$ref": "AAAAAAFpe8ulw8bHxHs=" + }, + "model": { + "$ref": "AAAAAAFpe8ulw8bDHbo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 462, + "top": 372, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8ulw8bHxHs=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8ulxMbLvj8=", + "_parent": { + "$ref": "AAAAAAFpe8ulw8bHxHs=" + }, + "model": { + "$ref": "AAAAAAFpe8ulw8bECXs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 174, + "top": 173, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8ulw8bHxHs=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8ulxMbMQXY=", + "_parent": { + "$ref": "AAAAAAFpe8ulw8bHxHs=" + }, + "model": { + "$ref": "AAAAAAFpe8ulw8bECXs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 183, + "top": 163, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8ulw8bHxHs=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8ulxMbNBc0=", + "_parent": { + "$ref": "AAAAAAFpe8ulw8bHxHs=" + }, + "model": { + "$ref": "AAAAAAFpe8ulw8bECXs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 157, + "top": 195, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8ulw8bHxHs=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8ulxMbOB1I=", + "_parent": { + "$ref": "AAAAAAFpe8ulw8bHxHs=" + }, + "model": { + "$ref": "AAAAAAFpe8ulw8bFsgA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 779, + "top": 519, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8ulw8bHxHs=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8ulxMbPIko=", + "_parent": { + "$ref": "AAAAAAFpe8ulw8bHxHs=" + }, + "model": { + "$ref": "AAAAAAFpe8ulw8bFsgA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 784, + "top": 506, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8ulw8bHxHs=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8ulxMbQ0yI=", + "_parent": { + "$ref": "AAAAAAFpe8ulw8bHxHs=" + }, + "model": { + "$ref": "AAAAAAFpe8ulw8bFsgA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 770, + "top": 545, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8ulw8bHxHs=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8ulxMbR6Q0=", + "_parent": { + "$ref": "AAAAAAFpe8ulw8bHxHs=" + }, + "model": { + "$ref": "AAAAAAFpe8ulw8bECXs=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8ulxMbSmew=", + "_parent": { + "$ref": "AAAAAAFpe8ulw8bHxHs=" + }, + "model": { + "$ref": "AAAAAAFpe8ulw8bFsgA=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe8iv+7CeqrY=" + }, + "tail": { + "$ref": "AAAAAAFpe7yoQKIFgzc=" + }, + "lineStyle": 1, + "points": "145:180;795:551", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe8ulw8bII3A=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8ulw8bJ0HA=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8ulxMbKLKU=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAFpe8ulxMbLvj8=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAFpe8ulxMbMQXY=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAFpe8ulxMbNBc0=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAFpe8ulxMbOB1I=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAFpe8ulxMbPIko=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAFpe8ulxMbQ0yI=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAFpe8ulxMbR6Q0=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAFpe8ulxMbSmew=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAFpe8u/kMfcm+o=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8u/kMfYjtY=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8u/kMfdJ8M=", + "_parent": { + "$ref": "AAAAAAFpe8u/kMfcm+o=" + }, + "model": { + "$ref": "AAAAAAFpe8u/kMfYjtY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 453, + "top": 278, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8u/kMfcm+o=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8u/kMfeiZg=", + "_parent": { + "$ref": "AAAAAAFpe8u/kMfcm+o=" + }, + "model": { + "$ref": "AAAAAAFpe8u/kMfYjtY=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 459, + "top": 264, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8u/kMfcm+o=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8u/kMff9dI=", + "_parent": { + "$ref": "AAAAAAFpe8u/kMfcm+o=" + }, + "model": { + "$ref": "AAAAAAFpe8u/kMfYjtY=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 442, + "top": 305, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8u/kMfcm+o=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8u/kMfg6Tc=", + "_parent": { + "$ref": "AAAAAAFpe8u/kMfcm+o=" + }, + "model": { + "$ref": "AAAAAAFpe8u/kMfZtxI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 174, + "top": 162, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8u/kMfcm+o=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8u/kMfhZYc=", + "_parent": { + "$ref": "AAAAAAFpe8u/kMfcm+o=" + }, + "model": { + "$ref": "AAAAAAFpe8u/kMfZtxI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 181, + "top": 150, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8u/kMfcm+o=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8u/kcfi/j8=", + "_parent": { + "$ref": "AAAAAAFpe8u/kMfcm+o=" + }, + "model": { + "$ref": "AAAAAAFpe8u/kMfZtxI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 160, + "top": 185, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8u/kMfcm+o=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8u/kcfjXhM=", + "_parent": { + "$ref": "AAAAAAFpe8u/kMfcm+o=" + }, + "model": { + "$ref": "AAAAAAFpe8u/kMfaSd8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 732, + "top": 394, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8u/kMfcm+o=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8u/kcfk6vk=", + "_parent": { + "$ref": "AAAAAAFpe8u/kMfcm+o=" + }, + "model": { + "$ref": "AAAAAAFpe8u/kMfaSd8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 735, + "top": 381, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8u/kMfcm+o=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8u/kcflCZo=", + "_parent": { + "$ref": "AAAAAAFpe8u/kMfcm+o=" + }, + "model": { + "$ref": "AAAAAAFpe8u/kMfaSd8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 726, + "top": 421, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8u/kMfcm+o=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8u/kcfmqdU=", + "_parent": { + "$ref": "AAAAAAFpe8u/kMfcm+o=" + }, + "model": { + "$ref": "AAAAAAFpe8u/kMfZtxI=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8u/kcfna8Q=", + "_parent": { + "$ref": "AAAAAAFpe8u/kMfcm+o=" + }, + "model": { + "$ref": "AAAAAAFpe8u/kMfaSd8=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe8PfmKQrOsM=" + }, + "tail": { + "$ref": "AAAAAAFpe7yoQKIFgzc=" + }, + "lineStyle": 1, + "points": "145:172;751:424", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe8u/kMfdJ8M=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8u/kMfeiZg=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8u/kMff9dI=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAFpe8u/kMfg6Tc=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAFpe8u/kMfhZYc=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAFpe8u/kcfi/j8=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAFpe8u/kcfjXhM=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAFpe8u/kcfk6vk=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAFpe8u/kcflCZo=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAFpe8u/kcfmqdU=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAFpe8u/kcfna8Q=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAFpe8vN7MkA+Js=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8vN7Mj8nxM=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8vN7MkBzaI=", + "_parent": { + "$ref": "AAAAAAFpe8vN7MkA+Js=" + }, + "model": { + "$ref": "AAAAAAFpe8vN7Mj8nxM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 446, + "top": 472, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8vN7MkA+Js=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8vN7MkCuxg=", + "_parent": { + "$ref": "AAAAAAFpe8vN7MkA+Js=" + }, + "model": { + "$ref": "AAAAAAFpe8vN7Mj8nxM=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 445, + "top": 457, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8vN7MkA+Js=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8vN7MkD96M=", + "_parent": { + "$ref": "AAAAAAFpe8vN7MkA+Js=" + }, + "model": { + "$ref": "AAAAAAFpe8vN7Mj8nxM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 449, + "top": 501, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8vN7MkA+Js=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8vN7MkEBqs=", + "_parent": { + "$ref": "AAAAAAFpe8vN7MkA+Js=" + }, + "model": { + "$ref": "AAAAAAFpe8vN7Mj9xhM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 169, + "top": 493, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8vN7MkA+Js=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8vN7MkFR1U=", + "_parent": { + "$ref": "AAAAAAFpe8vN7MkA+Js=" + }, + "model": { + "$ref": "AAAAAAFpe8vN7Mj9xhM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 171, + "top": 479, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8vN7MkA+Js=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8vN7MkGTZQ=", + "_parent": { + "$ref": "AAAAAAFpe8vN7MkA+Js=" + }, + "model": { + "$ref": "AAAAAAFpe8vN7Mj9xhM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 167, + "top": 520, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8vN7MkA+Js=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8vN7MkHLOM=", + "_parent": { + "$ref": "AAAAAAFpe8vN7MkA+Js=" + }, + "model": { + "$ref": "AAAAAAFpe8vN7Mj+ei4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 723, + "top": 451, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8vN7MkA+Js=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8vN7MkIQ5w=", + "_parent": { + "$ref": "AAAAAAFpe8vN7MkA+Js=" + }, + "model": { + "$ref": "AAAAAAFpe8vN7Mj+ei4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 720, + "top": 438, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8vN7MkA+Js=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8vN7MkJLo8=", + "_parent": { + "$ref": "AAAAAAFpe8vN7MkA+Js=" + }, + "model": { + "$ref": "AAAAAAFpe8vN7Mj+ei4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 730, + "top": 479, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8vN7MkA+Js=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8vN7MkK4Fw=", + "_parent": { + "$ref": "AAAAAAFpe8vN7MkA+Js=" + }, + "model": { + "$ref": "AAAAAAFpe8vN7Mj9xhM=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8vN7ckLL6M=", + "_parent": { + "$ref": "AAAAAAFpe8vN7MkA+Js=" + }, + "model": { + "$ref": "AAAAAAFpe8vN7Mj+ei4=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe8PfmKQrOsM=" + }, + "tail": { + "$ref": "AAAAAAFpe74tNKJei7k=" + }, + "lineStyle": 1, + "points": "145:516;751:471", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe8vN7MkBzaI=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8vN7MkCuxg=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8vN7MkD96M=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAFpe8vN7MkEBqs=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAFpe8vN7MkFR1U=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAFpe8vN7MkGTZQ=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAFpe8vN7MkHLOM=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAFpe8vN7MkIQ5w=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAFpe8vN7MkJLo8=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAFpe8vN7MkK4Fw=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAFpe8vN7ckLL6M=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAFpe8vbCsozdCs=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8vbCsov+gA=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8vbCso06vk=", + "_parent": { + "$ref": "AAAAAAFpe8vbCsozdCs=" + }, + "model": { + "$ref": "AAAAAAFpe8vbCsov+gA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 449, + "top": 529, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8vbCsozdCs=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8vbCso1Kfw=", + "_parent": { + "$ref": "AAAAAAFpe8vbCsozdCs=" + }, + "model": { + "$ref": "AAAAAAFpe8vbCsov+gA=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 450, + "top": 514, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8vbCsozdCs=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8vbCso2+F8=", + "_parent": { + "$ref": "AAAAAAFpe8vbCsozdCs=" + }, + "model": { + "$ref": "AAAAAAFpe8vbCsov+gA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 446, + "top": 558, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8vbCsozdCs=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8vbCso3zAE=", + "_parent": { + "$ref": "AAAAAAFpe8vbCsozdCs=" + }, + "model": { + "$ref": "AAAAAAFpe8vbCsowr9g=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 172, + "top": 506, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8vbCsozdCs=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8vbCso4YYE=", + "_parent": { + "$ref": "AAAAAAFpe8vbCsozdCs=" + }, + "model": { + "$ref": "AAAAAAFpe8vbCsowr9g=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 175, + "top": 493, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8vbCsozdCs=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8vbCso5DV0=", + "_parent": { + "$ref": "AAAAAAFpe8vbCsozdCs=" + }, + "model": { + "$ref": "AAAAAAFpe8vbCsowr9g=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 165, + "top": 533, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8vbCsozdCs=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8vbCso6vtQ=", + "_parent": { + "$ref": "AAAAAAFpe8vbCsozdCs=" + }, + "model": { + "$ref": "AAAAAAFpe8vbCsoxCCs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 726, + "top": 551, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8vbCsozdCs=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8vbCso7PWA=", + "_parent": { + "$ref": "AAAAAAFpe8vbCsozdCs=" + }, + "model": { + "$ref": "AAAAAAFpe8vbCsoxCCs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 725, + "top": 538, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8vbCsozdCs=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8vbCso8YKI=", + "_parent": { + "$ref": "AAAAAAFpe8vbCsozdCs=" + }, + "model": { + "$ref": "AAAAAAFpe8vbCsoxCCs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 728, + "top": 579, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8vbCsozdCs=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8vbCso98nk=", + "_parent": { + "$ref": "AAAAAAFpe8vbCsozdCs=" + }, + "model": { + "$ref": "AAAAAAFpe8vbCsowr9g=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8vbCso+c8A=", + "_parent": { + "$ref": "AAAAAAFpe8vbCsozdCs=" + }, + "model": { + "$ref": "AAAAAAFpe8vbCsoxCCs=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe8iv+7CeqrY=" + }, + "tail": { + "$ref": "AAAAAAFpe74tNKJei7k=" + }, + "lineStyle": 1, + "points": "145:525;751:575", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe8vbCso06vk=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8vbCso1Kfw=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8vbCso2+F8=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAFpe8vbCso3zAE=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAFpe8vbCso4YYE=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAFpe8vbCso5DV0=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAFpe8vbCso6vtQ=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAFpe8vbCso7PWA=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAFpe8vbCso8YKI=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAFpe8vbCso98nk=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAFpe8vbCso+c8A=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAFpe8xCs86ilRo=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe8xCs86e+z0=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8xCs86jY8g=", + "_parent": { + "$ref": "AAAAAAFpe8xCs86ilRo=" + }, + "model": { + "$ref": "AAAAAAFpe8xCs86e+z0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 248, + "top": 834, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8xCs86ilRo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8xCs86kOZc=", + "_parent": { + "$ref": "AAAAAAFpe8xCs86ilRo=" + }, + "model": { + "$ref": "AAAAAAFpe8xCs86e+z0=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 249, + "top": 819, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8xCs86ilRo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8xCs86lhxI=", + "_parent": { + "$ref": "AAAAAAFpe8xCs86ilRo=" + }, + "model": { + "$ref": "AAAAAAFpe8xCs86e+z0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 247, + "top": 863, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe8xCs86ilRo=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8xCs86mvXQ=", + "_parent": { + "$ref": "AAAAAAFpe8xCs86ilRo=" + }, + "model": { + "$ref": "AAAAAAFpe8xCs86fW/M=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 171, + "top": 831, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8xCs86ilRo=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8xCtM6nRyo=", + "_parent": { + "$ref": "AAAAAAFpe8xCs86ilRo=" + }, + "model": { + "$ref": "AAAAAAFpe8xCs86fW/M=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 174, + "top": 817, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8xCs86ilRo=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8xCtM6of/g=", + "_parent": { + "$ref": "AAAAAAFpe8xCs86ilRo=" + }, + "model": { + "$ref": "AAAAAAFpe8xCs86fW/M=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 166, + "top": 858, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8xCs86ilRo=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8xCtM6p1Og=", + "_parent": { + "$ref": "AAAAAAFpe8xCs86ilRo=" + }, + "model": { + "$ref": "AAAAAAFpe8xCs86gwD0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 325, + "top": 837, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe8xCs86ilRo=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8xCtM6qqcE=", + "_parent": { + "$ref": "AAAAAAFpe8xCs86ilRo=" + }, + "model": { + "$ref": "AAAAAAFpe8xCs86gwD0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 323, + "top": 824, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe8xCs86ilRo=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe8xCtM6rgVE=", + "_parent": { + "$ref": "AAAAAAFpe8xCs86ilRo=" + }, + "model": { + "$ref": "AAAAAAFpe8xCs86gwD0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 328, + "top": 865, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe8xCs86ilRo=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8xCtM6s47Q=", + "_parent": { + "$ref": "AAAAAAFpe8xCs86ilRo=" + }, + "model": { + "$ref": "AAAAAAFpe8xCs86fW/M=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe8xCtM6tmSA=", + "_parent": { + "$ref": "AAAAAAFpe8xCs86ilRo=" + }, + "model": { + "$ref": "AAAAAAFpe8xCs86gwD0=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe8ogfr1BhhI=" + }, + "tail": { + "$ref": "AAAAAAFpe73eVqIx8wc=" + }, + "lineStyle": 1, + "points": "145:851;351:860", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe8xCs86jY8g=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe8xCs86kOZc=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe8xCs86lhxI=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAFpe8xCs86mvXQ=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAFpe8xCtM6nRyo=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAFpe8xCtM6of/g=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAFpe8xCtM6p1Og=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAFpe8xCtM6qqcE=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAFpe8xCtM6rgVE=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAFpe8xCtM6s47Q=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAFpe8xCtM6tmSA=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAFpe83rMPT91bk=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpe83rMPT5oxo=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe83rMPT+RHo=", + "_parent": { + "$ref": "AAAAAAFpe83rMPT91bk=" + }, + "model": { + "$ref": "AAAAAAFpe83rMPT5oxo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 445, + "top": 701, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe83rMPT91bk=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe83rMPT/dH0=", + "_parent": { + "$ref": "AAAAAAFpe83rMPT91bk=" + }, + "model": { + "$ref": "AAAAAAFpe83rMPT5oxo=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 440, + "top": 687, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe83rMPT91bk=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe83rMPUAvHs=", + "_parent": { + "$ref": "AAAAAAFpe83rMPT91bk=" + }, + "model": { + "$ref": "AAAAAAFpe83rMPT5oxo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 454, + "top": 730, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe83rMPT91bk=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe83rMPUBNIM=", + "_parent": { + "$ref": "AAAAAAFpe83rMPT91bk=" + }, + "model": { + "$ref": "AAAAAAFpe83rMPT6N0k=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 164, + "top": 799, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe83rMPT91bk=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe83rMPUCVBQ=", + "_parent": { + "$ref": "AAAAAAFpe83rMPT91bk=" + }, + "model": { + "$ref": "AAAAAAFpe83rMPT6N0k=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 162, + "top": 786, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe83rMPT91bk=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe83rMPUDPxQ=", + "_parent": { + "$ref": "AAAAAAFpe83rMPT91bk=" + }, + "model": { + "$ref": "AAAAAAFpe83rMPT6N0k=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 169, + "top": 826, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe83rMPT91bk=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe83rMPUEtyQ=", + "_parent": { + "$ref": "AAAAAAFpe83rMPT91bk=" + }, + "model": { + "$ref": "AAAAAAFpe83rMPT7ojE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 726, + "top": 604, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe83rMPT91bk=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe83rMPUFm6o=", + "_parent": { + "$ref": "AAAAAAFpe83rMPT91bk=" + }, + "model": { + "$ref": "AAAAAAFpe83rMPT7ojE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 720, + "top": 592, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe83rMPT91bk=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe83rMPUGpWY=", + "_parent": { + "$ref": "AAAAAAFpe83rMPT91bk=" + }, + "model": { + "$ref": "AAAAAAFpe83rMPT7ojE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 739, + "top": 628, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe83rMPT91bk=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe83rMPUHxCw=", + "_parent": { + "$ref": "AAAAAAFpe83rMPT91bk=" + }, + "model": { + "$ref": "AAAAAAFpe83rMPT6N0k=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe83rMPUIEPQ=", + "_parent": { + "$ref": "AAAAAAFpe83rMPT91bk=" + }, + "model": { + "$ref": "AAAAAAFpe83rMPT7ojE=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe8iv+7CeqrY=" + }, + "tail": { + "$ref": "AAAAAAFpe73eVqIx8wc=" + }, + "lineStyle": 1, + "points": "145:828;756:616", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe83rMPT+RHo=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe83rMPT/dH0=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe83rMPUAvHs=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAFpe83rMPUBNIM=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAFpe83rMPUCVBQ=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAFpe83rMPUDPxQ=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAFpe83rMPUEtyQ=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAFpe83rMPUFm6o=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAFpe83rMPUGpWY=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAFpe83rMPUHxCw=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAFpe83rMPUIEPQ=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAFpfL3ux8Wdh8o=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH8A8A=" + }, + "model": { + "$ref": "AAAAAAFpfL3uxsWZKZ8=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpfL3ux8WerZc=", + "_parent": { + "$ref": "AAAAAAFpfL3ux8Wdh8o=" + }, + "model": { + "$ref": "AAAAAAFpfL3uxsWZKZ8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 466, + "top": 452, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpfL3ux8Wdh8o=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpfL3ux8WfT7U=", + "_parent": { + "$ref": "AAAAAAFpfL3ux8Wdh8o=" + }, + "model": { + "$ref": "AAAAAAFpfL3uxsWZKZ8=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 457, + "top": 464, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpfL3ux8Wdh8o=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpfL3ux8WgUuo=", + "_parent": { + "$ref": "AAAAAAFpfL3ux8Wdh8o=" + }, + "model": { + "$ref": "AAAAAAFpfL3uxsWZKZ8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 485, + "top": 429, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpfL3ux8Wdh8o=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpfL3ux8WhpFI=", + "_parent": { + "$ref": "AAAAAAFpfL3ux8Wdh8o=" + }, + "model": { + "$ref": "AAAAAAFpfL3uxsWab5g=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 778, + "top": 693, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpfL3ux8Wdh8o=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpfL3ux8WiBa0=", + "_parent": { + "$ref": "AAAAAAFpfL3ux8Wdh8o=" + }, + "model": { + "$ref": "AAAAAAFpfL3uxsWab5g=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 768, + "top": 702, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpfL3ux8Wdh8o=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpfL3ux8Wjmys=", + "_parent": { + "$ref": "AAAAAAFpfL3ux8Wdh8o=" + }, + "model": { + "$ref": "AAAAAAFpfL3uxsWab5g=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 798, + "top": 673, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpfL3ux8Wdh8o=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpfL3ux8WkIj4=", + "_parent": { + "$ref": "AAAAAAFpfL3ux8Wdh8o=" + }, + "model": { + "$ref": "AAAAAAFpfL3uxsWbHks=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 156, + "top": 213, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpfL3ux8Wdh8o=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpfL3uyMWl4WE=", + "_parent": { + "$ref": "AAAAAAFpfL3ux8Wdh8o=" + }, + "model": { + "$ref": "AAAAAAFpfL3uxsWbHks=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 150, + "top": 225, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpfL3ux8Wdh8o=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpfL3uyMWmZ+0=", + "_parent": { + "$ref": "AAAAAAFpfL3ux8Wdh8o=" + }, + "model": { + "$ref": "AAAAAAFpfL3uxsWbHks=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 169, + "top": 189, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpfL3ux8Wdh8o=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpfL3uyMWnMTI=", + "_parent": { + "$ref": "AAAAAAFpfL3ux8Wdh8o=" + }, + "model": { + "$ref": "AAAAAAFpfL3uxsWab5g=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpfL3uyMWo42Y=", + "_parent": { + "$ref": "AAAAAAFpfL3ux8Wdh8o=" + }, + "model": { + "$ref": "AAAAAAFpfL3uxsWbHks=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe7yoQKIFgzc=" + }, + "tail": { + "$ref": "AAAAAAFpe8O4QaP8JVM=" + }, + "lineStyle": 1, + "points": "808:703;145:192", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpfL3ux8WerZc=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpfL3ux8WfT7U=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpfL3ux8WgUuo=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAFpfL3ux8WhpFI=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAFpfL3ux8WiBa0=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAFpfL3ux8Wjmys=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAFpfL3ux8WkIj4=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAFpfL3uyMWl4WE=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAFpfL3uyMWmZ+0=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAFpfL3uyMWnMTI=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAFpfL3uyMWo42Y=" + } + } + ] + }, + { + "_type": "UMLActor", + "_id": "AAAAAAFpe7yoQKIDgWo=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH7VRk=" + }, + "name": "Dozent", + "ownedElements": [ + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe8STtKS0MIQ=", + "_parent": { + "$ref": "AAAAAAFpe7yoQKIDgWo=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8STtKS17oU=", + "_parent": { + "$ref": "AAAAAAFpe8STtKS0MIQ=" + }, + "reference": { + "$ref": "AAAAAAFpe7yoQKIDgWo=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8STtKS2dy4=", + "_parent": { + "$ref": "AAAAAAFpe8STtKS0MIQ=" + }, + "reference": { + "$ref": "AAAAAAFpe8DNKqKt5Jw=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe8gqPKz8mcA=", + "_parent": { + "$ref": "AAAAAAFpe7yoQKIDgWo=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8gqPKz9N/8=", + "_parent": { + "$ref": "AAAAAAFpe8gqPKz8mcA=" + }, + "reference": { + "$ref": "AAAAAAFpe7yoQKIDgWo=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8gqPKz+4UE=", + "_parent": { + "$ref": "AAAAAAFpe8gqPKz8mcA=" + }, + "reference": { + "$ref": "AAAAAAFpe8RpZ6SGnoo=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe8k79rY4Nw4=", + "_parent": { + "$ref": "AAAAAAFpe7yoQKIDgWo=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8k79rY5Gtw=", + "_parent": { + "$ref": "AAAAAAFpe8k79rY4Nw4=" + }, + "reference": { + "$ref": "AAAAAAFpe7yoQKIDgWo=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8k79rY6oOE=", + "_parent": { + "$ref": "AAAAAAFpe8k79rY4Nw4=" + }, + "reference": { + "$ref": "AAAAAAFpe8O4QaP6YNs=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe8t8E8TGI7c=", + "_parent": { + "$ref": "AAAAAAFpe7yoQKIDgWo=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8t8E8THAiU=", + "_parent": { + "$ref": "AAAAAAFpe8t8E8TGI7c=" + }, + "reference": { + "$ref": "AAAAAAFpe7yoQKIDgWo=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8t8E8TIqpw=", + "_parent": { + "$ref": "AAAAAAFpe8t8E8TGI7c=" + }, + "reference": { + "$ref": "AAAAAAFpe8pwTL/mWkg=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe8uLTsW9CsI=", + "_parent": { + "$ref": "AAAAAAFpe7yoQKIDgWo=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8uLTsW+X4s=", + "_parent": { + "$ref": "AAAAAAFpe8uLTsW9CsI=" + }, + "reference": { + "$ref": "AAAAAAFpe7yoQKIDgWo=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8uLTsW/5/4=", + "_parent": { + "$ref": "AAAAAAFpe8uLTsW9CsI=" + }, + "reference": { + "$ref": "AAAAAAFpe8P6N6RXqcw=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe8ulw8bDHbo=", + "_parent": { + "$ref": "AAAAAAFpe7yoQKIDgWo=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8ulw8bECXs=", + "_parent": { + "$ref": "AAAAAAFpe8ulw8bDHbo=" + }, + "reference": { + "$ref": "AAAAAAFpe7yoQKIDgWo=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8ulw8bFsgA=", + "_parent": { + "$ref": "AAAAAAFpe8ulw8bDHbo=" + }, + "reference": { + "$ref": "AAAAAAFpe8iv+rCcljc=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe8u/kMfYjtY=", + "_parent": { + "$ref": "AAAAAAFpe7yoQKIDgWo=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8u/kMfZtxI=", + "_parent": { + "$ref": "AAAAAAFpe8u/kMfYjtY=" + }, + "reference": { + "$ref": "AAAAAAFpe7yoQKIDgWo=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8u/kMfaSd8=", + "_parent": { + "$ref": "AAAAAAFpe8u/kMfYjtY=" + }, + "reference": { + "$ref": "AAAAAAFpe8PfmKQpMNk=" + } + } + } + ] + }, + { + "_type": "UMLActor", + "_id": "AAAAAAFpe73eVqIvxOo=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH7VRk=" + }, + "name": "Student", + "ownedElements": [ + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe8ksjbV9Fno=", + "_parent": { + "$ref": "AAAAAAFpe73eVqIvxOo=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8ksjbV+v48=", + "_parent": { + "$ref": "AAAAAAFpe8ksjbV9Fno=" + }, + "reference": { + "$ref": "AAAAAAFpe73eVqIvxOo=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8ksjbV/7io=", + "_parent": { + "$ref": "AAAAAAFpe8ksjbV9Fno=" + }, + "reference": { + "$ref": "AAAAAAFpe8O4QaP6YNs=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe8tarsMFO18=", + "_parent": { + "$ref": "AAAAAAFpe73eVqIvxOo=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8tarsMGPXU=", + "_parent": { + "$ref": "AAAAAAFpe8tarsMFO18=" + }, + "reference": { + "$ref": "AAAAAAFpe73eVqIvxOo=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8tarsMHI3w=", + "_parent": { + "$ref": "AAAAAAFpe8tarsMFO18=" + }, + "reference": { + "$ref": "AAAAAAFpe8pwTL/mWkg=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe8xCs86e+z0=", + "_parent": { + "$ref": "AAAAAAFpe73eVqIvxOo=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8xCs86fW/M=", + "_parent": { + "$ref": "AAAAAAFpe8xCs86e+z0=" + }, + "reference": { + "$ref": "AAAAAAFpe73eVqIvxOo=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8xCs86gwD0=", + "_parent": { + "$ref": "AAAAAAFpe8xCs86e+z0=" + }, + "reference": { + "$ref": "AAAAAAFpe8ogfr0/XnY=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe83rMPT5oxo=", + "_parent": { + "$ref": "AAAAAAFpe73eVqIvxOo=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe83rMPT6N0k=", + "_parent": { + "$ref": "AAAAAAFpe83rMPT5oxo=" + }, + "reference": { + "$ref": "AAAAAAFpe73eVqIvxOo=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe83rMPT7ojE=", + "_parent": { + "$ref": "AAAAAAFpe83rMPT5oxo=" + }, + "reference": { + "$ref": "AAAAAAFpe8iv+rCcljc=" + } + } + } + ] + }, + { + "_type": "UMLActor", + "_id": "AAAAAAFpe74tNKJcZCg=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH7VRk=" + }, + "name": "Moderator", + "ownedElements": [ + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe8g4562KJq8=", + "_parent": { + "$ref": "AAAAAAFpe74tNKJcZCg=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8g4562Lk9I=", + "_parent": { + "$ref": "AAAAAAFpe8g4562KJq8=" + }, + "reference": { + "$ref": "AAAAAAFpe74tNKJcZCg=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8g4562MA5U=", + "_parent": { + "$ref": "AAAAAAFpe8g4562KJq8=" + }, + "reference": { + "$ref": "AAAAAAFpe8RpZ6SGnoo=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe8kfKrTRv6c=", + "_parent": { + "$ref": "AAAAAAFpe74tNKJcZCg=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8kfKrTSwTM=", + "_parent": { + "$ref": "AAAAAAFpe8kfKrTRv6c=" + }, + "reference": { + "$ref": "AAAAAAFpe74tNKJcZCg=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8kfKrTTqKs=", + "_parent": { + "$ref": "AAAAAAFpe8kfKrTRv6c=" + }, + "reference": { + "$ref": "AAAAAAFpe8O4QaP6YNs=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe8tt7sPeam0=", + "_parent": { + "$ref": "AAAAAAFpe74tNKJcZCg=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8tt7sPfDhY=", + "_parent": { + "$ref": "AAAAAAFpe8tt7sPeam0=" + }, + "reference": { + "$ref": "AAAAAAFpe74tNKJcZCg=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8tt7sPgUbQ=", + "_parent": { + "$ref": "AAAAAAFpe8tt7sPeam0=" + }, + "reference": { + "$ref": "AAAAAAFpe8pwTL/mWkg=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe8vN7Mj8nxM=", + "_parent": { + "$ref": "AAAAAAFpe74tNKJcZCg=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8vN7Mj9xhM=", + "_parent": { + "$ref": "AAAAAAFpe8vN7Mj8nxM=" + }, + "reference": { + "$ref": "AAAAAAFpe74tNKJcZCg=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8vN7Mj+ei4=", + "_parent": { + "$ref": "AAAAAAFpe8vN7Mj8nxM=" + }, + "reference": { + "$ref": "AAAAAAFpe8PfmKQpMNk=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe8vbCsov+gA=", + "_parent": { + "$ref": "AAAAAAFpe74tNKJcZCg=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8vbCsowr9g=", + "_parent": { + "$ref": "AAAAAAFpe8vbCsov+gA=" + }, + "reference": { + "$ref": "AAAAAAFpe74tNKJcZCg=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8vbCsoxCCs=", + "_parent": { + "$ref": "AAAAAAFpe8vbCsov+gA=" + }, + "reference": { + "$ref": "AAAAAAFpe8iv+rCcljc=" + } + } + } + ] + }, + { + "_type": "UMLUseCaseSubject", + "_id": "AAAAAAFpe7+De6KR5QE=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH7VRk=" + }, + "name": "Arsnova-lite comment service" + }, + { + "_type": "UMLUseCase", + "_id": "AAAAAAFpe8DNKqKt5Jw=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH7VRk=" + }, + "name": "exportComments", + "ownedElements": [ + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe8TwwqVZYHk=", + "_parent": { + "$ref": "AAAAAAFpe8DNKqKt5Jw=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8TwwqVa/uM=", + "_parent": { + "$ref": "AAAAAAFpe8TwwqVZYHk=" + }, + "reference": { + "$ref": "AAAAAAFpe8DNKqKt5Jw=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8TwwqVbNNA=", + "_parent": { + "$ref": "AAAAAAFpe8TwwqVZYHk=" + }, + "reference": { + "$ref": "AAAAAAFpe7yoQKIDgWo=" + } + } + } + ] + }, + { + "_type": "UMLUseCase", + "_id": "AAAAAAFpe8GOZaLfPXg=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH7VRk=" + }, + "name": "Favorite", + "ownedElements": [ + { + "_type": "UMLExtend", + "_id": "AAAAAAFpe8Y55qZx+44=", + "_parent": { + "$ref": "AAAAAAFpe8GOZaLfPXg=" + }, + "source": { + "$ref": "AAAAAAFpe8GOZaLfPXg=" + }, + "target": { + "$ref": "AAAAAAFpe8VAuaWlECU=" + } + } + ] + }, + { + "_type": "UMLUseCase", + "_id": "AAAAAAFpe8HchqMONmE=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH7VRk=" + }, + "name": "rightAnswer", + "ownedElements": [ + { + "_type": "UMLExtend", + "_id": "AAAAAAFpe8Yi+aZRJmM=", + "_parent": { + "$ref": "AAAAAAFpe8HchqMONmE=" + }, + "source": { + "$ref": "AAAAAAFpe8HchqMONmE=" + }, + "target": { + "$ref": "AAAAAAFpe8VAuaWlECU=" + } + } + ] + }, + { + "_type": "UMLUseCase", + "_id": "AAAAAAFpe8JRqKM+ipY=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH7VRk=" + }, + "name": "filterComments", + "ownedElements": [ + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe8bJMqgcG5E=", + "_parent": { + "$ref": "AAAAAAFpe8JRqKM+ipY=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8bJMqgdurY=", + "_parent": { + "$ref": "AAAAAAFpe8bJMqgcG5E=" + }, + "reference": { + "$ref": "AAAAAAFpe8JRqKM+ipY=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8bJMqge8ag=", + "_parent": { + "$ref": "AAAAAAFpe8bJMqgcG5E=" + }, + "reference": { + "$ref": "AAAAAAFpe7yoQKIDgWo=" + } + } + } + ] + }, + { + "_type": "UMLUseCase", + "_id": "AAAAAAFpe8KLnKNuXzA=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH7VRk=" + }, + "name": "manageModerators", + "ownedElements": [ + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe8fr1avIc20=", + "_parent": { + "$ref": "AAAAAAFpe8KLnKNuXzA=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8fr1avJSV0=", + "_parent": { + "$ref": "AAAAAAFpe8fr1avIc20=" + }, + "reference": { + "$ref": "AAAAAAFpe8KLnKNuXzA=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8fr1avKkKY=", + "_parent": { + "$ref": "AAAAAAFpe8fr1avIc20=" + }, + "reference": { + "$ref": "AAAAAAFpe7yoQKIDgWo=" + } + } + } + ] + }, + { + "_type": "UMLUseCase", + "_id": "AAAAAAFpe8LrX6Od4VU=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH7VRk=" + }, + "name": "presentComment", + "ownedElements": [ + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe8b+DKjrrYc=", + "_parent": { + "$ref": "AAAAAAFpe8LrX6Od4VU=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8b+DKjsXws=", + "_parent": { + "$ref": "AAAAAAFpe8b+DKjrrYc=" + }, + "reference": { + "$ref": "AAAAAAFpe8LrX6Od4VU=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8b+DKjtZ0A=", + "_parent": { + "$ref": "AAAAAAFpe8b+DKjrrYc=" + }, + "reference": { + "$ref": "AAAAAAFpe7yoQKIDgWo=" + } + } + } + ] + }, + { + "_type": "UMLUseCase", + "_id": "AAAAAAFpe8McIqPMS04=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH7VRk=" + }, + "name": "read", + "ownedElements": [ + { + "_type": "UMLExtend", + "_id": "AAAAAAFpe8YGLqYxXt0=", + "_parent": { + "$ref": "AAAAAAFpe8McIqPMS04=" + }, + "source": { + "$ref": "AAAAAAFpe8McIqPMS04=" + }, + "target": { + "$ref": "AAAAAAFpe8VAuaWlECU=" + } + } + ] + }, + { + "_type": "UMLUseCase", + "_id": "AAAAAAFpe8O4QaP6YNs=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH7VRk=" + }, + "name": "createComment", + "ownedElements": [ + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpfL3uxsWZKZ8=", + "_parent": { + "$ref": "AAAAAAFpe8O4QaP6YNs=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpfL3uxsWab5g=", + "_parent": { + "$ref": "AAAAAAFpfL3uxsWZKZ8=" + }, + "reference": { + "$ref": "AAAAAAFpe8O4QaP6YNs=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpfL3uxsWbHks=", + "_parent": { + "$ref": "AAAAAAFpfL3uxsWZKZ8=" + }, + "reference": { + "$ref": "AAAAAAFpe7yoQKIDgWo=" + } + } + } + ] + }, + { + "_type": "UMLUseCase", + "_id": "AAAAAAFpe8PfmKQpMNk=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH7VRk=" + }, + "name": "deleteComment" + }, + { + "_type": "UMLUseCase", + "_id": "AAAAAAFpe8P6N6RXqcw=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH7VRk=" + }, + "name": "deleteMultipleComments", + "ownedElements": [ + { + "_type": "UMLInclude", + "_id": "AAAAAAFpe8h6z6/jWvo=", + "_parent": { + "$ref": "AAAAAAFpe8P6N6RXqcw=" + }, + "source": { + "$ref": "AAAAAAFpe8P6N6RXqcw=" + }, + "target": { + "$ref": "AAAAAAFpe8PfmKQpMNk=" + } + } + ] + }, + { + "_type": "UMLUseCase", + "_id": "AAAAAAFpe8RpZ6SGnoo=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH7VRk=" + }, + "name": "hideComment" + }, + { + "_type": "UMLUseCase", + "_id": "AAAAAAFpe8VAuaWlECU=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH7VRk=" + }, + "name": "markComment", + "ownedElements": [ + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe8ZOYqaRqtA=", + "_parent": { + "$ref": "AAAAAAFpe8VAuaWlECU=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8ZOYqaSkaU=", + "_parent": { + "$ref": "AAAAAAFpe8ZOYqaRqtA=" + }, + "reference": { + "$ref": "AAAAAAFpe8VAuaWlECU=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe8ZOYqaTdP4=", + "_parent": { + "$ref": "AAAAAAFpe8ZOYqaRqtA=" + }, + "reference": { + "$ref": "AAAAAAFpe7yoQKIDgWo=" + } + } + } + ] + }, + { + "_type": "UMLUseCase", + "_id": "AAAAAAFpe8iv+rCcljc=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH7VRk=" + }, + "name": "deleteOwnComment", + "ownedElements": [ + { + "_type": "UMLInclude", + "_id": "AAAAAAFpe8jZnLHcsxc=", + "_parent": { + "$ref": "AAAAAAFpe8iv+rCcljc=" + }, + "source": { + "$ref": "AAAAAAFpe8iv+rCcljc=" + }, + "target": { + "$ref": "AAAAAAFpe8PfmKQpMNk=" + } + } + ] + }, + { + "_type": "UMLUseCase", + "_id": "AAAAAAFpe8naz7qJ1Z8=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH7VRk=" + }, + "name": "previewComment", + "ownedElements": [ + { + "_type": "UMLExtend", + "_id": "AAAAAAFpe8oB8Lw+Pyo=", + "_parent": { + "$ref": "AAAAAAFpe8naz7qJ1Z8=" + }, + "source": { + "$ref": "AAAAAAFpe8naz7qJ1Z8=" + }, + "target": { + "$ref": "AAAAAAFpe8O4QaP6YNs=" + } + } + ] + }, + { + "_type": "UMLUseCase", + "_id": "AAAAAAFpe8ogfr0/XnY=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH7VRk=" + }, + "name": "voteComment" + }, + { + "_type": "UMLUseCase", + "_id": "AAAAAAFpe8pwTL/mWkg=", + "_parent": { + "$ref": "AAAAAAFpe7xMGqH7VRk=" + }, + "name": "search" + } + ] + }, + { + "_type": "UMLModel", + "_id": "AAAAAAFpe9ROcQmWko8=", + "_parent": { + "$ref": "AAAAAAFF+h6SjaM2Hec=" + }, + "name": "Model3", + "ownedElements": [ + { + "_type": "UMLClass", + "_id": "AAAAAAFpe9SGnAoTs7U=", + "_parent": { + "$ref": "AAAAAAFpe9ROcQmWko8=" + }, + "name": "Comment", + "ownedElements": [ + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe9sc2w4BjJE=", + "_parent": { + "$ref": "AAAAAAFpe9SGnAoTs7U=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe9sc2w4CQ0A=", + "_parent": { + "$ref": "AAAAAAFpe9sc2w4BjJE=" + }, + "reference": { + "$ref": "AAAAAAFpe9SGnAoTs7U=" + }, + "multiplicity": "0..*" + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe9sc2w4DZ4Y=", + "_parent": { + "$ref": "AAAAAAFpe9sc2w4BjJE=" + }, + "reference": { + "$ref": "AAAAAAFpe9bk5QpDsyI=" + }, + "multiplicity": "1" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe+DNtxrKcoA=", + "_parent": { + "$ref": "AAAAAAFpe9SGnAoTs7U=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe+DNtxrLbUo=", + "_parent": { + "$ref": "AAAAAAFpe+DNtxrKcoA=" + }, + "reference": { + "$ref": "AAAAAAFpe9SGnAoTs7U=" + }, + "multiplicity": "0..*" + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe+DNuBrM4Gk=", + "_parent": { + "$ref": "AAAAAAFpe+DNtxrKcoA=" + }, + "reference": { + "$ref": "AAAAAAFpe9SGnAoTs7U=" + }, + "aggregation": "shared", + "multiplicity": "1" + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAFpe/QMDqasmDM=", + "_parent": { + "$ref": "AAAAAAFpe9SGnAoTs7U=" + }, + "name": "body", + "visibility": "private", + "type": "string" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAFpe/UfLKqffMM=", + "_parent": { + "$ref": "AAAAAAFpe9SGnAoTs7U=" + }, + "name": "creationTimeStamp", + "type": "number" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAFpe/Y+qq2kifo=", + "_parent": { + "$ref": "AAAAAAFpe9SGnAoTs7U=" + }, + "name": "score", + "type": "number" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAFpe9bk5QpDsyI=", + "_parent": { + "$ref": "AAAAAAFpe9ROcQmWko8=" + }, + "name": "Room", + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAFpfDKBObNg+fI=", + "_parent": { + "$ref": "AAAAAAFpe9bk5QpDsyI=" + }, + "name": "name", + "type": "string" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAFpfDKvDrUYG18=", + "_parent": { + "$ref": "AAAAAAFpe9bk5QpDsyI=" + }, + "name": "description", + "type": "string" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAFpe9cdEApv9ro=", + "_parent": { + "$ref": "AAAAAAFpe9ROcQmWko8=" + }, + "name": "Dozent", + "ownedElements": [ + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe9vzGw5zklM=", + "_parent": { + "$ref": "AAAAAAFpe9cdEApv9ro=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe9vzGw50AI4=", + "_parent": { + "$ref": "AAAAAAFpe9vzGw5zklM=" + }, + "reference": { + "$ref": "AAAAAAFpe9cdEApv9ro=" + }, + "multiplicity": "1" + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe9vzGw51XIg=", + "_parent": { + "$ref": "AAAAAAFpe9vzGw5zklM=" + }, + "reference": { + "$ref": "AAAAAAFpe9bk5QpDsyI=" + }, + "multiplicity": "1..*" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe9xYQA8D0a4=", + "_parent": { + "$ref": "AAAAAAFpe9cdEApv9ro=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe9xYQA8EkEs=", + "_parent": { + "$ref": "AAAAAAFpe9xYQA8D0a4=" + }, + "reference": { + "$ref": "AAAAAAFpe9cdEApv9ro=" + } + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe9xYQA8FyRc=", + "_parent": { + "$ref": "AAAAAAFpe9xYQA8D0a4=" + }, + "reference": { + "$ref": "AAAAAAFpe9SGnAoTs7U=" + } + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe9yv4hANCP0=", + "_parent": { + "$ref": "AAAAAAFpe9cdEApv9ro=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe9yv4hAOWTg=", + "_parent": { + "$ref": "AAAAAAFpe9yv4hANCP0=" + }, + "reference": { + "$ref": "AAAAAAFpe9cdEApv9ro=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe9yv4hAP6I8=", + "_parent": { + "$ref": "AAAAAAFpe9yv4hANCP0=" + }, + "reference": { + "$ref": "AAAAAAFpe9SGnAoTs7U=" + } + } + }, + { + "_type": "UMLGeneralization", + "_id": "AAAAAAFpe972OxN2368=", + "_parent": { + "$ref": "AAAAAAFpe9cdEApv9ro=" + }, + "source": { + "$ref": "AAAAAAFpe9cdEApv9ro=" + }, + "target": { + "$ref": "AAAAAAFpe9f/bww2l4Q=" + } + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAFpe9f/bww2l4Q=", + "_parent": { + "$ref": "AAAAAAFpe9ROcQmWko8=" + }, + "name": "User", + "ownedElements": [ + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe96SUxHJcGM=", + "_parent": { + "$ref": "AAAAAAFpe9f/bww2l4Q=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe96SUxHKwIM=", + "_parent": { + "$ref": "AAAAAAFpe96SUxHJcGM=" + }, + "reference": { + "$ref": "AAAAAAFpe9f/bww2l4Q=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe96SUxHL0gw=", + "_parent": { + "$ref": "AAAAAAFpe96SUxHJcGM=" + }, + "name": "create", + "reference": { + "$ref": "AAAAAAFpe9SGnAoTs7U=" + } + } + } + ], + "attributes": [ + { + "_type": "UMLAttribute", + "_id": "AAAAAAFpfDON1rq3S/U=", + "_parent": { + "$ref": "AAAAAAFpe9f/bww2l4Q=" + }, + "name": "role", + "type": "UserRole" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAFpfDRQPLz2ulw=", + "_parent": { + "$ref": "AAAAAAFpe9f/bww2l4Q=" + }, + "name": "loginId", + "type": "string" + }, + { + "_type": "UMLAttribute", + "_id": "AAAAAAFpfDSNcb6u3DI=", + "_parent": { + "$ref": "AAAAAAFpe9f/bww2l4Q=" + }, + "name": "isGuest", + "type": "boolean" + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAFpe9hDuAxidWQ=", + "_parent": { + "$ref": "AAAAAAFpe9ROcQmWko8=" + }, + "name": "Moderator", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAFpe987XBT3cus=", + "_parent": { + "$ref": "AAAAAAFpe9hDuAxidWQ=" + }, + "source": { + "$ref": "AAAAAAFpe9hDuAxidWQ=" + }, + "target": { + "$ref": "AAAAAAFpe9f/bww2l4Q=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe+IUoSAbKNM=", + "_parent": { + "$ref": "AAAAAAFpe9hDuAxidWQ=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe+IUoSAcNiE=", + "_parent": { + "$ref": "AAAAAAFpe+IUoSAbKNM=" + }, + "reference": { + "$ref": "AAAAAAFpe9hDuAxidWQ=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe+IUoSAdGwc=", + "_parent": { + "$ref": "AAAAAAFpe+IUoSAbKNM=" + }, + "reference": { + "$ref": "AAAAAAFpe9SGnAoTs7U=" + } + } + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAFpe9hwjgyOcjs=", + "_parent": { + "$ref": "AAAAAAFpe9ROcQmWko8=" + }, + "name": "Student", + "ownedElements": [ + { + "_type": "UMLGeneralization", + "_id": "AAAAAAFpe98dDRRJTJc=", + "_parent": { + "$ref": "AAAAAAFpe9hwjgyOcjs=" + }, + "source": { + "$ref": "AAAAAAFpe9hwjgyOcjs=" + }, + "target": { + "$ref": "AAAAAAFpe9f/bww2l4Q=" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe9+vsRaP3xM=", + "_parent": { + "$ref": "AAAAAAFpe9hwjgyOcjs=" + }, + "name": "vote", + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe9+vshaQ76o=", + "_parent": { + "$ref": "AAAAAAFpe9+vsRaP3xM=" + }, + "reference": { + "$ref": "AAAAAAFpe9hwjgyOcjs=" + }, + "navigable": false, + "multiplicity": "1" + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe9+vshaRqeo=", + "_parent": { + "$ref": "AAAAAAFpe9+vsRaP3xM=" + }, + "reference": { + "$ref": "AAAAAAFpe9iaRQy60yI=" + }, + "multiplicity": "0..1" + } + }, + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe+G60x41kNw=", + "_parent": { + "$ref": "AAAAAAFpe9hwjgyOcjs=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe+G60x42Vwk=", + "_parent": { + "$ref": "AAAAAAFpe+G60x41kNw=" + }, + "reference": { + "$ref": "AAAAAAFpe9hwjgyOcjs=" + }, + "navigable": false + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe+G60x43hhM=", + "_parent": { + "$ref": "AAAAAAFpe+G60x41kNw=" + }, + "reference": { + "$ref": "AAAAAAFpe9SGnAoTs7U=" + } + } + } + ] + }, + { + "_type": "UMLClass", + "_id": "AAAAAAFpe9iaRQy60yI=", + "_parent": { + "$ref": "AAAAAAFpe9ROcQmWko8=" + }, + "name": "Vote", + "ownedElements": [ + { + "_type": "UMLAssociation", + "_id": "AAAAAAFpe+BI7xmqpv0=", + "_parent": { + "$ref": "AAAAAAFpe9iaRQy60yI=" + }, + "end1": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe+BI7xmrGFc=", + "_parent": { + "$ref": "AAAAAAFpe+BI7xmqpv0=" + }, + "reference": { + "$ref": "AAAAAAFpe9iaRQy60yI=" + }, + "multiplicity": "0..*" + }, + "end2": { + "_type": "UMLAssociationEnd", + "_id": "AAAAAAFpe+BI7xmsygg=", + "_parent": { + "$ref": "AAAAAAFpe+BI7xmqpv0=" + }, + "reference": { + "$ref": "AAAAAAFpe9SGnAoTs7U=" + }, + "multiplicity": "1" + } + } + ] + }, + { + "_type": "UMLClassDiagram", + "_id": "AAAAAAFpe9ROcQmXUrc=", + "_parent": { + "$ref": "AAAAAAFpe9ROcQmWko8=" + }, + "name": "ClassDiagram", + "ownedViews": [ + { + "_type": "UMLClassView", + "_id": "AAAAAAFpe9SGnAoVT4E=", + "_parent": { + "$ref": "AAAAAAFpe9ROcQmXUrc=" + }, + "model": { + "$ref": "AAAAAAFpe9SGnAoTs7U=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFpe9SGnAoWtf0=", + "_parent": { + "$ref": "AAAAAAFpe9SGnAoVT4E=" + }, + "model": { + "$ref": "AAAAAAFpe9SGnAoTs7U=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFpe9SGnAoXNF8=", + "_parent": { + "$ref": "AAAAAAFpe9SGnAoWtf0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -1344, + "top": 896, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe9SGnAoYFrM=", + "_parent": { + "$ref": "AAAAAAFpe9SGnAoWtf0=" + }, + "font": "Arial;13;1", + "left": 85, + "top": 503, + "width": 247, + "height": 13, + "text": "Comment" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe9SGnAoZazE=", + "_parent": { + "$ref": "AAAAAAFpe9SGnAoWtf0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -1344, + "top": 896, + "width": 80.9072265625, + "height": 13, + "text": "(from Model3)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe9SGnAoaXLw=", + "_parent": { + "$ref": "AAAAAAFpe9SGnAoWtf0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -1344, + "top": 896, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 80, + "top": 496, + "width": 257, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAFpe9SGnAoXNF8=" + }, + "nameLabel": { + "$ref": "AAAAAAFpe9SGnAoYFrM=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFpe9SGnAoZazE=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe9SGnAoaXLw=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFpe9SGnAobTsM=", + "_parent": { + "$ref": "AAAAAAFpe9SGnAoVT4E=" + }, + "model": { + "$ref": "AAAAAAFpe9SGnAoTs7U=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAFpe/QMLqavOEM=", + "_parent": { + "$ref": "AAAAAAFpe9SGnAobTsM=" + }, + "model": { + "$ref": "AAAAAAFpe/QMDqasmDM=" + }, + "font": "Arial;13;0", + "left": 85, + "top": 526, + "width": 247, + "height": 13, + "text": "body: string", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAFpe/UfgqqiUKA=", + "_parent": { + "$ref": "AAAAAAFpe9SGnAobTsM=" + }, + "model": { + "$ref": "AAAAAAFpe/UfLKqffMM=" + }, + "font": "Arial;13;0", + "left": 85, + "top": 541, + "width": 247, + "height": 13, + "text": "creationTimeStamp: number", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAFpe/Y+8q2nTYk=", + "_parent": { + "$ref": "AAAAAAFpe9SGnAobTsM=" + }, + "model": { + "$ref": "AAAAAAFpe/Y+qq2kifo=" + }, + "font": "Arial;13;0", + "left": 85, + "top": 556, + "width": 247, + "height": 13, + "text": "score: number", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 80, + "top": 521, + "width": 257, + "height": 53 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFpe9SGnAocBBI=", + "_parent": { + "$ref": "AAAAAAFpe9SGnAoVT4E=" + }, + "model": { + "$ref": "AAAAAAFpe9SGnAoTs7U=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 80, + "top": 531, + "width": 51.919921875, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFpe9SGnAodj7Q=", + "_parent": { + "$ref": "AAAAAAFpe9SGnAoVT4E=" + }, + "model": { + "$ref": "AAAAAAFpe9SGnAoTs7U=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -672, + "top": 448, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFpe9SGnAoefUQ=", + "_parent": { + "$ref": "AAAAAAFpe9SGnAoVT4E=" + }, + "model": { + "$ref": "AAAAAAFpe9SGnAoTs7U=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -672, + "top": 448, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 80, + "top": 496, + "width": 257, + "height": 241, + "showVisibility": false, + "nameCompartment": { + "$ref": "AAAAAAFpe9SGnAoWtf0=" + }, + "suppressOperations": true, + "attributeCompartment": { + "$ref": "AAAAAAFpe9SGnAobTsM=" + }, + "operationCompartment": { + "$ref": "AAAAAAFpe9SGnAocBBI=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFpe9SGnAodj7Q=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFpe9SGnAoefUQ=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAFpe9bk5gpFT4k=", + "_parent": { + "$ref": "AAAAAAFpe9ROcQmXUrc=" + }, + "model": { + "$ref": "AAAAAAFpe9bk5QpDsyI=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFpe9bk5gpGcb8=", + "_parent": { + "$ref": "AAAAAAFpe9bk5gpFT4k=" + }, + "model": { + "$ref": "AAAAAAFpe9bk5QpDsyI=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFpe9bk5gpHCZ8=", + "_parent": { + "$ref": "AAAAAAFpe9bk5gpGcb8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -512, + "top": -192, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe9bk5gpIehQ=", + "_parent": { + "$ref": "AAAAAAFpe9bk5gpGcb8=" + }, + "font": "Arial;13;1", + "left": 261, + "top": 247, + "width": 183, + "height": 13, + "text": "Room" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe9bk5gpJhEE=", + "_parent": { + "$ref": "AAAAAAFpe9bk5gpGcb8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -512, + "top": -192, + "width": 80.9072265625, + "height": 13, + "text": "(from Model3)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe9bk5gpKGiA=", + "_parent": { + "$ref": "AAAAAAFpe9bk5gpGcb8=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -512, + "top": -192, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 256, + "top": 240, + "width": 193, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAFpe9bk5gpHCZ8=" + }, + "nameLabel": { + "$ref": "AAAAAAFpe9bk5gpIehQ=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFpe9bk5gpJhEE=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe9bk5gpKGiA=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFpe9bk5gpL+Lg=", + "_parent": { + "$ref": "AAAAAAFpe9bk5gpFT4k=" + }, + "model": { + "$ref": "AAAAAAFpe9bk5QpDsyI=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAFpfDKBkrNj/VA=", + "_parent": { + "$ref": "AAAAAAFpe9bk5gpL+Lg=" + }, + "model": { + "$ref": "AAAAAAFpfDKBObNg+fI=" + }, + "font": "Arial;13;0", + "left": 261, + "top": 270, + "width": 183, + "height": 13, + "text": "name: string", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAFpfDKvZ7UbAJ4=", + "_parent": { + "$ref": "AAAAAAFpe9bk5gpL+Lg=" + }, + "model": { + "$ref": "AAAAAAFpfDKvDrUYG18=" + }, + "font": "Arial;13;0", + "left": 261, + "top": 285, + "width": 183, + "height": 13, + "text": "description: string", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 256, + "top": 265, + "width": 193, + "height": 38 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFpe9bk5gpM3LQ=", + "_parent": { + "$ref": "AAAAAAFpe9bk5gpFT4k=" + }, + "model": { + "$ref": "AAAAAAFpe9bk5QpDsyI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 256, + "top": 275, + "width": 224, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFpe9bk5gpNOWE=", + "_parent": { + "$ref": "AAAAAAFpe9bk5gpFT4k=" + }, + "model": { + "$ref": "AAAAAAFpe9bk5QpDsyI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -256, + "top": -96, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFpe9bk5gpOyJM=", + "_parent": { + "$ref": "AAAAAAFpe9bk5gpFT4k=" + }, + "model": { + "$ref": "AAAAAAFpe9bk5QpDsyI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -256, + "top": -96, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 256, + "top": 240, + "width": 193, + "height": 129, + "showVisibility": false, + "nameCompartment": { + "$ref": "AAAAAAFpe9bk5gpGcb8=" + }, + "suppressOperations": true, + "attributeCompartment": { + "$ref": "AAAAAAFpe9bk5gpL+Lg=" + }, + "operationCompartment": { + "$ref": "AAAAAAFpe9bk5gpM3LQ=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFpe9bk5gpNOWE=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFpe9bk5gpOyJM=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAFpe9dW+QqxoKA=", + "_parent": { + "$ref": "AAAAAAFpe9ROcQmXUrc=" + }, + "model": { + "$ref": "AAAAAAFpe9cdEApv9ro=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFpe9dW+Qqyzlk=", + "_parent": { + "$ref": "AAAAAAFpe9dW+QqxoKA=" + }, + "model": { + "$ref": "AAAAAAFpe9cdEApv9ro=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFpe9dW+QqzO7U=", + "_parent": { + "$ref": "AAAAAAFpe9dW+Qqyzlk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 282, + "top": -387, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe9dW+Qq0A9g=", + "_parent": { + "$ref": "AAAAAAFpe9dW+Qqyzlk=" + }, + "font": "Arial;13;1", + "left": 533, + "top": 247, + "width": 167, + "height": 13, + "text": "Dozent" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe9dW+Qq16Cs=", + "_parent": { + "$ref": "AAAAAAFpe9dW+Qqyzlk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 282, + "top": -387, + "width": 80.9072265625, + "height": 13, + "text": "(from Model3)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe9dW+Qq2mZs=", + "_parent": { + "$ref": "AAAAAAFpe9dW+Qqyzlk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 282, + "top": -387, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 528, + "top": 240, + "width": 177, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAFpe9dW+QqzO7U=" + }, + "nameLabel": { + "$ref": "AAAAAAFpe9dW+Qq0A9g=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFpe9dW+Qq16Cs=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe9dW+Qq2mZs=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFpe9dW+Qq3hF4=", + "_parent": { + "$ref": "AAAAAAFpe9dW+QqxoKA=" + }, + "model": { + "$ref": "AAAAAAFpe9cdEApv9ro=" + }, + "font": "Arial;13;0", + "left": 528, + "top": 265, + "width": 177, + "height": 10 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFpe9dW+Qq4b/g=", + "_parent": { + "$ref": "AAAAAAFpe9dW+QqxoKA=" + }, + "model": { + "$ref": "AAAAAAFpe9cdEApv9ro=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 528, + "top": 275, + "width": 144, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFpe9dW+Qq5ZUo=", + "_parent": { + "$ref": "AAAAAAFpe9dW+QqxoKA=" + }, + "model": { + "$ref": "AAAAAAFpe9cdEApv9ro=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 288, + "top": -224, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFpe9dW+Qq654A=", + "_parent": { + "$ref": "AAAAAAFpe9dW+QqxoKA=" + }, + "model": { + "$ref": "AAAAAAFpe9cdEApv9ro=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 288, + "top": -224, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 528, + "top": 240, + "width": 177, + "height": 129, + "showVisibility": false, + "nameCompartment": { + "$ref": "AAAAAAFpe9dW+Qqyzlk=" + }, + "suppressOperations": true, + "attributeCompartment": { + "$ref": "AAAAAAFpe9dW+Qq3hF4=" + }, + "operationCompartment": { + "$ref": "AAAAAAFpe9dW+Qq4b/g=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFpe9dW+Qq5ZUo=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFpe9dW+Qq654A=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAFpe9f/cAw472Y=", + "_parent": { + "$ref": "AAAAAAFpe9ROcQmXUrc=" + }, + "model": { + "$ref": "AAAAAAFpe9f/bww2l4Q=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFpe9f/cAw51Hk=", + "_parent": { + "$ref": "AAAAAAFpe9f/cAw472Y=" + }, + "model": { + "$ref": "AAAAAAFpe9f/bww2l4Q=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFpe9f/cAw66D8=", + "_parent": { + "$ref": "AAAAAAFpe9f/cAw51Hk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -320, + "top": -960, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe9f/cAw7ZeM=", + "_parent": { + "$ref": "AAAAAAFpe9f/cAw51Hk=" + }, + "font": "Arial;13;1", + "left": 85, + "top": 39, + "width": 1063, + "height": 13, + "text": "User" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe9f/cAw8Gjg=", + "_parent": { + "$ref": "AAAAAAFpe9f/cAw51Hk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -320, + "top": -960, + "width": 80.9072265625, + "height": 13, + "text": "(from Model3)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe9f/cAw93Zs=", + "_parent": { + "$ref": "AAAAAAFpe9f/cAw51Hk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -320, + "top": -960, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 80, + "top": 32, + "width": 1073, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAFpe9f/cAw66D8=" + }, + "nameLabel": { + "$ref": "AAAAAAFpe9f/cAw7ZeM=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFpe9f/cAw8Gjg=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe9f/cAw93Zs=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFpe9f/cAw+ipQ=", + "_parent": { + "$ref": "AAAAAAFpe9f/cAw472Y=" + }, + "model": { + "$ref": "AAAAAAFpe9f/bww2l4Q=" + }, + "subViews": [ + { + "_type": "UMLAttributeView", + "_id": "AAAAAAFpfDOOILq6i4c=", + "_parent": { + "$ref": "AAAAAAFpe9f/cAw+ipQ=" + }, + "model": { + "$ref": "AAAAAAFpfDON1rq3S/U=" + }, + "font": "Arial;13;0", + "left": 85, + "top": 62, + "width": 1063, + "height": 13, + "text": "role: UserRole", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAFpfDRQgrz59kw=", + "_parent": { + "$ref": "AAAAAAFpe9f/cAw+ipQ=" + }, + "model": { + "$ref": "AAAAAAFpfDRQPLz2ulw=" + }, + "font": "Arial;13;0", + "left": 85, + "top": 77, + "width": 1063, + "height": 13, + "text": "loginId: string", + "horizontalAlignment": 0 + }, + { + "_type": "UMLAttributeView", + "_id": "AAAAAAFpfDSNyb6x3wc=", + "_parent": { + "$ref": "AAAAAAFpe9f/cAw+ipQ=" + }, + "model": { + "$ref": "AAAAAAFpfDSNcb6u3DI=" + }, + "font": "Arial;13;0", + "left": 85, + "top": 92, + "width": 1063, + "height": 13, + "text": "isGuest: boolean", + "horizontalAlignment": 0 + } + ], + "font": "Arial;13;0", + "left": 80, + "top": 57, + "width": 1073, + "height": 53 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFpe9f/cAw/jo4=", + "_parent": { + "$ref": "AAAAAAFpe9f/cAw472Y=" + }, + "model": { + "$ref": "AAAAAAFpe9f/bww2l4Q=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 80, + "top": 67, + "width": 51.919921875, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFpe9f/cAxAE4o=", + "_parent": { + "$ref": "AAAAAAFpe9f/cAw472Y=" + }, + "model": { + "$ref": "AAAAAAFpe9f/bww2l4Q=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -160, + "top": -480, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFpe9f/cAxB6Co=", + "_parent": { + "$ref": "AAAAAAFpe9f/cAw472Y=" + }, + "model": { + "$ref": "AAAAAAFpe9f/bww2l4Q=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -160, + "top": -480, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 80, + "top": 32, + "width": 1073, + "height": 145, + "showVisibility": false, + "nameCompartment": { + "$ref": "AAAAAAFpe9f/cAw51Hk=" + }, + "suppressOperations": true, + "attributeCompartment": { + "$ref": "AAAAAAFpe9f/cAw+ipQ=" + }, + "operationCompartment": { + "$ref": "AAAAAAFpe9f/cAw/jo4=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFpe9f/cAxAE4o=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFpe9f/cAxB6Co=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAFpe9hDuAxk9j4=", + "_parent": { + "$ref": "AAAAAAFpe9ROcQmXUrc=" + }, + "model": { + "$ref": "AAAAAAFpe9hDuAxidWQ=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFpe9hDuAxlPzA=", + "_parent": { + "$ref": "AAAAAAFpe9hDuAxk9j4=" + }, + "model": { + "$ref": "AAAAAAFpe9hDuAxidWQ=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFpe9hDuAxmPD4=", + "_parent": { + "$ref": "AAAAAAFpe9hDuAxlPzA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 816, + "top": -768, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe9hDuAxnOII=", + "_parent": { + "$ref": "AAAAAAFpe9hDuAxlPzA=" + }, + "font": "Arial;13;1", + "left": 741, + "top": 247, + "width": 167, + "height": 13, + "text": "Moderator" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe9hDuAxoU3M=", + "_parent": { + "$ref": "AAAAAAFpe9hDuAxlPzA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 816, + "top": -768, + "width": 80.9072265625, + "height": 13, + "text": "(from Model3)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe9hDuAxp2Hw=", + "_parent": { + "$ref": "AAAAAAFpe9hDuAxlPzA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 816, + "top": -768, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 736, + "top": 240, + "width": 177, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAFpe9hDuAxmPD4=" + }, + "nameLabel": { + "$ref": "AAAAAAFpe9hDuAxnOII=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFpe9hDuAxoU3M=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe9hDuAxp2Hw=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFpe9hDuAxqqvA=", + "_parent": { + "$ref": "AAAAAAFpe9hDuAxk9j4=" + }, + "model": { + "$ref": "AAAAAAFpe9hDuAxidWQ=" + }, + "font": "Arial;13;0", + "left": 736, + "top": 265, + "width": 177, + "height": 10 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFpe9hDuAxrTc4=", + "_parent": { + "$ref": "AAAAAAFpe9hDuAxk9j4=" + }, + "model": { + "$ref": "AAAAAAFpe9hDuAxidWQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 736, + "top": 275, + "width": 73.55908203125, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFpe9hDuAxs1/c=", + "_parent": { + "$ref": "AAAAAAFpe9hDuAxk9j4=" + }, + "model": { + "$ref": "AAAAAAFpe9hDuAxidWQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 408, + "top": -384, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFpe9hDuAxt43o=", + "_parent": { + "$ref": "AAAAAAFpe9hDuAxk9j4=" + }, + "model": { + "$ref": "AAAAAAFpe9hDuAxidWQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 408, + "top": -384, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 736, + "top": 240, + "width": 177, + "height": 129, + "showVisibility": false, + "nameCompartment": { + "$ref": "AAAAAAFpe9hDuAxlPzA=" + }, + "suppressOperations": true, + "attributeCompartment": { + "$ref": "AAAAAAFpe9hDuAxqqvA=" + }, + "operationCompartment": { + "$ref": "AAAAAAFpe9hDuAxrTc4=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFpe9hDuAxs1/c=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFpe9hDuAxt43o=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAFpe9hwjgyQIqw=", + "_parent": { + "$ref": "AAAAAAFpe9ROcQmXUrc=" + }, + "model": { + "$ref": "AAAAAAFpe9hwjgyOcjs=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFpe9hwjgyRavQ=", + "_parent": { + "$ref": "AAAAAAFpe9hwjgyQIqw=" + }, + "model": { + "$ref": "AAAAAAFpe9hwjgyOcjs=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFpe9hwjgyS+fs=", + "_parent": { + "$ref": "AAAAAAFpe9hwjgyRavQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 752, + "top": -880, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe9hwjgyTj4Q=", + "_parent": { + "$ref": "AAAAAAFpe9hwjgyRavQ=" + }, + "font": "Arial;13;1", + "left": 949, + "top": 247, + "width": 191, + "height": 13, + "text": "Student" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe9hwjgyUn/4=", + "_parent": { + "$ref": "AAAAAAFpe9hwjgyRavQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 752, + "top": -880, + "width": 80.9072265625, + "height": 13, + "text": "(from Model3)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe9hwjgyVznw=", + "_parent": { + "$ref": "AAAAAAFpe9hwjgyRavQ=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 752, + "top": -880, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 944, + "top": 240, + "width": 201, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAFpe9hwjgyS+fs=" + }, + "nameLabel": { + "$ref": "AAAAAAFpe9hwjgyTj4Q=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFpe9hwjgyUn/4=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe9hwjgyVznw=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFpe9hwjgyW6NI=", + "_parent": { + "$ref": "AAAAAAFpe9hwjgyQIqw=" + }, + "model": { + "$ref": "AAAAAAFpe9hwjgyOcjs=" + }, + "font": "Arial;13;0", + "left": 944, + "top": 265, + "width": 201, + "height": 10 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFpe9hwjgyXuv0=", + "_parent": { + "$ref": "AAAAAAFpe9hwjgyQIqw=" + }, + "model": { + "$ref": "AAAAAAFpe9hwjgyOcjs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 944, + "top": 275, + "width": 58.3818359375, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFpe9hwjgyY4NM=", + "_parent": { + "$ref": "AAAAAAFpe9hwjgyQIqw=" + }, + "model": { + "$ref": "AAAAAAFpe9hwjgyOcjs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 376, + "top": -440, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFpe9hwjgyZ9DI=", + "_parent": { + "$ref": "AAAAAAFpe9hwjgyQIqw=" + }, + "model": { + "$ref": "AAAAAAFpe9hwjgyOcjs=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 376, + "top": -440, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 944, + "top": 240, + "width": 201, + "height": 129, + "showVisibility": false, + "nameCompartment": { + "$ref": "AAAAAAFpe9hwjgyRavQ=" + }, + "suppressOperations": true, + "attributeCompartment": { + "$ref": "AAAAAAFpe9hwjgyW6NI=" + }, + "operationCompartment": { + "$ref": "AAAAAAFpe9hwjgyXuv0=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFpe9hwjgyY4NM=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFpe9hwjgyZ9DI=" + } + }, + { + "_type": "UMLClassView", + "_id": "AAAAAAFpe9iaRQy84Rg=", + "_parent": { + "$ref": "AAAAAAFpe9ROcQmXUrc=" + }, + "model": { + "$ref": "AAAAAAFpe9iaRQy60yI=" + }, + "subViews": [ + { + "_type": "UMLNameCompartmentView", + "_id": "AAAAAAFpe9iaRQy9kHw=", + "_parent": { + "$ref": "AAAAAAFpe9iaRQy84Rg=" + }, + "model": { + "$ref": "AAAAAAFpe9iaRQy60yI=" + }, + "subViews": [ + { + "_type": "LabelView", + "_id": "AAAAAAFpe9iaRQy+Ynk=", + "_parent": { + "$ref": "AAAAAAFpe9iaRQy9kHw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 608, + "top": 448, + "height": 13 + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe9iaRQy/GtA=", + "_parent": { + "$ref": "AAAAAAFpe9iaRQy9kHw=" + }, + "font": "Arial;13;1", + "left": 565, + "top": 847, + "width": 119, + "height": 13, + "text": "Vote" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe9iaRQzArR8=", + "_parent": { + "$ref": "AAAAAAFpe9iaRQy9kHw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 608, + "top": 448, + "width": 80.9072265625, + "height": 13, + "text": "(from Model3)" + }, + { + "_type": "LabelView", + "_id": "AAAAAAFpe9iaRQzBe5Q=", + "_parent": { + "$ref": "AAAAAAFpe9iaRQy9kHw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 608, + "top": 448, + "height": 13, + "horizontalAlignment": 1 + } + ], + "font": "Arial;13;0", + "left": 560, + "top": 840, + "width": 129, + "height": 25, + "stereotypeLabel": { + "$ref": "AAAAAAFpe9iaRQy+Ynk=" + }, + "nameLabel": { + "$ref": "AAAAAAFpe9iaRQy/GtA=" + }, + "namespaceLabel": { + "$ref": "AAAAAAFpe9iaRQzArR8=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe9iaRQzBe5Q=" + } + }, + { + "_type": "UMLAttributeCompartmentView", + "_id": "AAAAAAFpe9iaRQzCXNc=", + "_parent": { + "$ref": "AAAAAAFpe9iaRQy84Rg=" + }, + "model": { + "$ref": "AAAAAAFpe9iaRQy60yI=" + }, + "font": "Arial;13;0", + "left": 560, + "top": 865, + "width": 129, + "height": 10 + }, + { + "_type": "UMLOperationCompartmentView", + "_id": "AAAAAAFpe9iaRQzDKBY=", + "_parent": { + "$ref": "AAAAAAFpe9iaRQy84Rg=" + }, + "model": { + "$ref": "AAAAAAFpe9iaRQy60yI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 560, + "top": 875, + "width": 51.919921875, + "height": 10 + }, + { + "_type": "UMLReceptionCompartmentView", + "_id": "AAAAAAFpe9iaRQzEm+s=", + "_parent": { + "$ref": "AAAAAAFpe9iaRQy84Rg=" + }, + "model": { + "$ref": "AAAAAAFpe9iaRQy60yI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 304, + "top": 224, + "width": 10, + "height": 10 + }, + { + "_type": "UMLTemplateParameterCompartmentView", + "_id": "AAAAAAFpe9iaRQzFsHE=", + "_parent": { + "$ref": "AAAAAAFpe9iaRQy84Rg=" + }, + "model": { + "$ref": "AAAAAAFpe9iaRQy60yI=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 304, + "top": 224, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "containerChangeable": true, + "left": 560, + "top": 840, + "width": 129, + "height": 121, + "showVisibility": false, + "nameCompartment": { + "$ref": "AAAAAAFpe9iaRQy9kHw=" + }, + "suppressOperations": true, + "attributeCompartment": { + "$ref": "AAAAAAFpe9iaRQzCXNc=" + }, + "operationCompartment": { + "$ref": "AAAAAAFpe9iaRQzDKBY=" + }, + "receptionCompartment": { + "$ref": "AAAAAAFpe9iaRQzEm+s=" + }, + "templateParameterCompartment": { + "$ref": "AAAAAAFpe9iaRQzFsHE=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAFpe9sc2w4FKHQ=", + "_parent": { + "$ref": "AAAAAAFpe9ROcQmXUrc=" + }, + "model": { + "$ref": "AAAAAAFpe9sc2w4BjJE=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe9sc2w4GGyQ=", + "_parent": { + "$ref": "AAAAAAFpe9sc2w4FKHQ=" + }, + "model": { + "$ref": "AAAAAAFpe9sc2w4BjJE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 296, + "top": 411, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe9sc2w4FKHQ=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe9sc2w4HW2I=", + "_parent": { + "$ref": "AAAAAAFpe9sc2w4FKHQ=" + }, + "model": { + "$ref": "AAAAAAFpe9sc2w4BjJE=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 296, + "top": 396, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe9sc2w4FKHQ=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe9sc2w4Iu14=", + "_parent": { + "$ref": "AAAAAAFpe9sc2w4FKHQ=" + }, + "model": { + "$ref": "AAAAAAFpe9sc2w4BjJE=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 296, + "top": 441, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe9sc2w4FKHQ=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe9sc2w4Jdlg=", + "_parent": { + "$ref": "AAAAAAFpe9sc2w4FKHQ=" + }, + "model": { + "$ref": "AAAAAAFpe9sc2w4CQ0A=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 265, + "top": 459, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe9sc2w4FKHQ=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe9sc2w4KCaw=", + "_parent": { + "$ref": "AAAAAAFpe9sc2w4FKHQ=" + }, + "model": { + "$ref": "AAAAAAFpe9sc2w4CQ0A=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 254, + "top": 451, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe9sc2w4FKHQ=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe9sc2w4L3Ak=", + "_parent": { + "$ref": "AAAAAAFpe9sc2w4FKHQ=" + }, + "model": { + "$ref": "AAAAAAFpe9sc2w4CQ0A=" + }, + "font": "Arial;13;0", + "left": 280, + "top": 474, + "width": 19.5126953125, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe9sc2w4FKHQ=" + }, + "edgePosition": 2, + "text": "0..*" + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe9sc2w4M9xE=", + "_parent": { + "$ref": "AAAAAAFpe9sc2w4FKHQ=" + }, + "model": { + "$ref": "AAAAAAFpe9sc2w4DZ4Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 298, + "top": 380, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe9sc2w4FKHQ=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe9sc2w4NLtA=", + "_parent": { + "$ref": "AAAAAAFpe9sc2w4FKHQ=" + }, + "model": { + "$ref": "AAAAAAFpe9sc2w4DZ4Y=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 285, + "top": 377, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe9sc2w4FKHQ=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe9sc2w4OCCY=", + "_parent": { + "$ref": "AAAAAAFpe9sc2w4FKHQ=" + }, + "model": { + "$ref": "AAAAAAFpe9sc2w4DZ4Y=" + }, + "font": "Arial;13;0", + "left": 327, + "top": 387, + "width": 7.22998046875, + "height": 13, + "alpha": 0.7266415087845026, + "distance": 25.298221281347036, + "hostEdge": { + "$ref": "AAAAAAFpe9sc2w4FKHQ=" + }, + "text": "1" + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe9sc2w4PZBo=", + "_parent": { + "$ref": "AAAAAAFpe9sc2w4FKHQ=" + }, + "model": { + "$ref": "AAAAAAFpe9sc2w4CQ0A=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe9sc2w4Q/LA=", + "_parent": { + "$ref": "AAAAAAFpe9sc2w4FKHQ=" + }, + "model": { + "$ref": "AAAAAAFpe9sc2w4DZ4Y=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe9bk5gpFT4k=" + }, + "tail": { + "$ref": "AAAAAAFpe9SGnAoVT4E=" + }, + "lineStyle": 1, + "points": "269:495;272:488;272:432;320:432;320:376;323:369", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe9sc2w4GGyQ=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe9sc2w4HW2I=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe9sc2w4Iu14=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAFpe9sc2w4Jdlg=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAFpe9sc2w4KCaw=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAFpe9sc2w4L3Ak=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAFpe9sc2w4M9xE=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAFpe9sc2w4NLtA=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAFpe9sc2w4OCCY=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAFpe9sc2w4PZBo=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAFpe9sc2w4Q/LA=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAFpe9vzHA533mc=", + "_parent": { + "$ref": "AAAAAAFpe9ROcQmXUrc=" + }, + "model": { + "$ref": "AAAAAAFpe9vzGw5zklM=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe9vzHA54HKw=", + "_parent": { + "$ref": "AAAAAAFpe9vzHA533mc=" + }, + "model": { + "$ref": "AAAAAAFpe9vzGw5zklM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 487, + "top": 313, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe9vzHA533mc=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe9vzHA55M2Q=", + "_parent": { + "$ref": "AAAAAAFpe9vzHA533mc=" + }, + "model": { + "$ref": "AAAAAAFpe9vzGw5zklM=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 487, + "top": 328, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe9vzHA533mc=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe9vzHA56iUI=", + "_parent": { + "$ref": "AAAAAAFpe9vzHA533mc=" + }, + "model": { + "$ref": "AAAAAAFpe9vzGw5zklM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 488, + "top": 283, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe9vzHA533mc=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe9vzHA573qE=", + "_parent": { + "$ref": "AAAAAAFpe9vzHA533mc=" + }, + "model": { + "$ref": "AAAAAAFpe9vzGw50AI4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 501, + "top": 312, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe9vzHA533mc=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe9vzHA589wc=", + "_parent": { + "$ref": "AAAAAAFpe9vzHA533mc=" + }, + "model": { + "$ref": "AAAAAAFpe9vzGw50AI4=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 498, + "top": 326, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe9vzHA533mc=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe9vzHA59UPs=", + "_parent": { + "$ref": "AAAAAAFpe9vzHA533mc=" + }, + "model": { + "$ref": "AAAAAAFpe9vzGw50AI4=" + }, + "font": "Arial;13;0", + "left": 502, + "top": 285, + "width": 7.22998046875, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe9vzHA533mc=" + }, + "edgePosition": 2, + "text": "1" + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe9vzHA5+nq0=", + "_parent": { + "$ref": "AAAAAAFpe9vzHA533mc=" + }, + "model": { + "$ref": "AAAAAAFpe9vzGw51XIg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 474, + "top": 312, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe9vzHA533mc=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe9vzHA5//VU=", + "_parent": { + "$ref": "AAAAAAFpe9vzHA533mc=" + }, + "model": { + "$ref": "AAAAAAFpe9vzGw51XIg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 477, + "top": 326, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe9vzHA533mc=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe9vzHA6AwX4=", + "_parent": { + "$ref": "AAAAAAFpe9vzHA533mc=" + }, + "model": { + "$ref": "AAAAAAFpe9vzGw51XIg=" + }, + "font": "Arial;13;0", + "left": 461, + "top": 285, + "width": 19.5126953125, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe9vzHA533mc=" + }, + "text": "1..*" + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe9vzHA6BJng=", + "_parent": { + "$ref": "AAAAAAFpe9vzHA533mc=" + }, + "model": { + "$ref": "AAAAAAFpe9vzGw50AI4=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe9vzHA6CVI4=", + "_parent": { + "$ref": "AAAAAAFpe9vzHA533mc=" + }, + "model": { + "$ref": "AAAAAAFpe9vzGw51XIg=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe9bk5gpFT4k=" + }, + "tail": { + "$ref": "AAAAAAFpe9dW+QqxoKA=" + }, + "lineStyle": 1, + "points": "527:304;449:304", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe9vzHA54HKw=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe9vzHA55M2Q=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe9vzHA56iUI=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAFpe9vzHA573qE=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAFpe9vzHA589wc=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAFpe9vzHA59UPs=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAFpe9vzHA5+nq0=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAFpe9vzHA5//VU=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAFpe9vzHA6AwX4=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAFpe9vzHA6BJng=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAFpe9vzHA6CVI4=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAFpe96SVBHN29o=", + "_parent": { + "$ref": "AAAAAAFpe9ROcQmXUrc=" + }, + "model": { + "$ref": "AAAAAAFpe96SUxHJcGM=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe96SVBHO1wQ=", + "_parent": { + "$ref": "AAAAAAFpe96SVBHN29o=" + }, + "model": { + "$ref": "AAAAAAFpe96SUxHJcGM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 223, + "top": 177, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe96SVBHN29o=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe96SVBHPvZI=", + "_parent": { + "$ref": "AAAAAAFpe96SVBHN29o=" + }, + "model": { + "$ref": "AAAAAAFpe96SUxHJcGM=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 238, + "top": 177, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe96SVBHN29o=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe96SVBHQ+uM=", + "_parent": { + "$ref": "AAAAAAFpe96SVBHN29o=" + }, + "model": { + "$ref": "AAAAAAFpe96SUxHJcGM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 193, + "top": 178, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe96SVBHN29o=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe96SVBHRgY4=", + "_parent": { + "$ref": "AAAAAAFpe96SVBHN29o=" + }, + "model": { + "$ref": "AAAAAAFpe96SUxHKwIM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 221, + "top": 190, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe96SVBHN29o=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe96SVBHSfO4=", + "_parent": { + "$ref": "AAAAAAFpe96SVBHN29o=" + }, + "model": { + "$ref": "AAAAAAFpe96SUxHKwIM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 221, + "top": 204, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe96SVBHN29o=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe96SVBHTETw=", + "_parent": { + "$ref": "AAAAAAFpe96SVBHN29o=" + }, + "model": { + "$ref": "AAAAAAFpe96SUxHKwIM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 220, + "top": 162, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe96SVBHN29o=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe96SVBHU0qk=", + "_parent": { + "$ref": "AAAAAAFpe96SVBHN29o=" + }, + "model": { + "$ref": "AAAAAAFpe96SUxHL0gw=" + }, + "font": "Arial;13;0", + "left": 152, + "top": 287, + "width": 43.72265625, + "height": 13, + "alpha": -6.110784557081414, + "distance": 204.0245083317198, + "hostEdge": { + "$ref": "AAAAAAFpe96SVBHN29o=" + }, + "text": "create" + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe96SVBHVQ2M=", + "_parent": { + "$ref": "AAAAAAFpe96SVBHN29o=" + }, + "model": { + "$ref": "AAAAAAFpe96SUxHL0gw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 236, + "top": 460, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe96SVBHN29o=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe96SVBHWF9s=", + "_parent": { + "$ref": "AAAAAAFpe96SVBHN29o=" + }, + "model": { + "$ref": "AAAAAAFpe96SUxHL0gw=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 195, + "top": 467, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe96SVBHN29o=" + } + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe96SVBHXkns=", + "_parent": { + "$ref": "AAAAAAFpe96SVBHN29o=" + }, + "model": { + "$ref": "AAAAAAFpe96SUxHKwIM=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe96SVBHYekM=", + "_parent": { + "$ref": "AAAAAAFpe96SVBHN29o=" + }, + "model": { + "$ref": "AAAAAAFpe96SUxHL0gw=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe9SGnAoVT4E=" + }, + "tail": { + "$ref": "AAAAAAFpe9f/cAw472Y=" + }, + "lineStyle": 1, + "points": "244:177;208:184;208:495", + "nameLabel": { + "$ref": "AAAAAAFpe96SVBHO1wQ=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe96SVBHPvZI=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe96SVBHQ+uM=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAFpe96SVBHRgY4=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAFpe96SVBHSfO4=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAFpe96SVBHTETw=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAFpe96SVBHU0qk=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAFpe96SVBHVQ2M=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAFpe96SVBHWF9s=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAFpe96SVBHXkns=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAFpe96SVBHYekM=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAFpe972OxN4tj8=", + "_parent": { + "$ref": "AAAAAAFpe9ROcQmXUrc=" + }, + "model": { + "$ref": "AAAAAAFpe972OxN2368=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe972OxN5KFA=", + "_parent": { + "$ref": "AAAAAAFpe972OxN4tj8=" + }, + "model": { + "$ref": "AAAAAAFpe972OxN2368=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 601, + "top": 201, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe972OxN4tj8=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe972OxN6viU=", + "_parent": { + "$ref": "AAAAAAFpe972OxN4tj8=" + }, + "model": { + "$ref": "AAAAAAFpe972OxN2368=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 586, + "top": 201, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe972OxN4tj8=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe972OxN7i7k=", + "_parent": { + "$ref": "AAAAAAFpe972OxN4tj8=" + }, + "model": { + "$ref": "AAAAAAFpe972OxN2368=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 630, + "top": 202, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe972OxN4tj8=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe9f/cAw472Y=" + }, + "tail": { + "$ref": "AAAAAAFpe9dW+QqxoKA=" + }, + "lineStyle": 1, + "points": "616:239;616:177", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe972OxN5KFA=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe972OxN6viU=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe972OxN7i7k=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAFpe98dDRRLWM0=", + "_parent": { + "$ref": "AAAAAAFpe9ROcQmXUrc=" + }, + "model": { + "$ref": "AAAAAAFpe98dDRRJTJc=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe98dDRRMoZc=", + "_parent": { + "$ref": "AAAAAAFpe98dDRRLWM0=" + }, + "model": { + "$ref": "AAAAAAFpe98dDRRJTJc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1036, + "top": 216, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe98dDRRLWM0=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe98dDRRNn6E=", + "_parent": { + "$ref": "AAAAAAFpe98dDRRLWM0=" + }, + "model": { + "$ref": "AAAAAAFpe98dDRRJTJc=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1032, + "top": 231, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe98dDRRLWM0=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe98dDRROY6c=", + "_parent": { + "$ref": "AAAAAAFpe98dDRRLWM0=" + }, + "model": { + "$ref": "AAAAAAFpe98dDRRJTJc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1043, + "top": 187, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe98dDRRLWM0=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe9f/cAw472Y=" + }, + "tail": { + "$ref": "AAAAAAFpe9hwjgyQIqw=" + }, + "lineStyle": 1, + "points": "1041:239;1040:208;914:177", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe98dDRRMoZc=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe98dDRRNn6E=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe98dDRROY6c=" + } + }, + { + "_type": "UMLGeneralizationView", + "_id": "AAAAAAFpe987XBT5mjs=", + "_parent": { + "$ref": "AAAAAAFpe9ROcQmXUrc=" + }, + "model": { + "$ref": "AAAAAAFpe987XBT3cus=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe987XBT6LL8=", + "_parent": { + "$ref": "AAAAAAFpe987XBT5mjs=" + }, + "model": { + "$ref": "AAAAAAFpe987XBT3cus=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 817, + "top": 215, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe987XBT5mjs=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe987XBT7lGY=", + "_parent": { + "$ref": "AAAAAAFpe987XBT5mjs=" + }, + "model": { + "$ref": "AAAAAAFpe987XBT3cus=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 810, + "top": 228, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe987XBT5mjs=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe987XBT8CT4=", + "_parent": { + "$ref": "AAAAAAFpe987XBT5mjs=" + }, + "model": { + "$ref": "AAAAAAFpe987XBT3cus=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 830, + "top": 188, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe987XBT5mjs=" + }, + "edgePosition": 1 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe9f/cAw472Y=" + }, + "tail": { + "$ref": "AAAAAAFpe9hDuAxk9j4=" + }, + "lineStyle": 1, + "points": "824:239;824:208;762:177", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe987XBT6LL8=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe987XBT7lGY=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe987XBT8CT4=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAFpe9+vshaTx9w=", + "_parent": { + "$ref": "AAAAAAFpe9ROcQmXUrc=" + }, + "model": { + "$ref": "AAAAAAFpe9+vsRaP3xM=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe9+vshaUm6c=", + "_parent": { + "$ref": "AAAAAAFpe9+vshaTx9w=" + }, + "model": { + "$ref": "AAAAAAFpe9+vsRaP3xM=" + }, + "font": "Arial;13;0", + "left": 854, + "top": 880, + "width": 32.16357421875, + "height": 13, + "alpha": -0.0646113865719955, + "distance": 177.28226081590904, + "hostEdge": { + "$ref": "AAAAAAFpe9+vshaTx9w=" + }, + "edgePosition": 1, + "text": "vote" + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe9+vshaVLQ4=", + "_parent": { + "$ref": "AAAAAAFpe9+vshaTx9w=" + }, + "model": { + "$ref": "AAAAAAFpe9+vsRaP3xM=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 1048, + "top": 919, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe9+vshaTx9w=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe9+vshaW+vA=", + "_parent": { + "$ref": "AAAAAAFpe9+vshaTx9w=" + }, + "model": { + "$ref": "AAAAAAFpe9+vsRaP3xM=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1047, + "top": 875, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe9+vshaTx9w=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe9+vshaXmw8=", + "_parent": { + "$ref": "AAAAAAFpe9+vshaTx9w=" + }, + "model": { + "$ref": "AAAAAAFpe9+vshaQ76o=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1059, + "top": 388, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe9+vshaTx9w=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe9+vshaYl8Q=", + "_parent": { + "$ref": "AAAAAAFpe9+vshaTx9w=" + }, + "model": { + "$ref": "AAAAAAFpe9+vshaQ76o=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 1072, + "top": 391, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe9+vshaTx9w=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe9+vshaZHNw=", + "_parent": { + "$ref": "AAAAAAFpe9+vshaTx9w=" + }, + "model": { + "$ref": "AAAAAAFpe9+vshaQ76o=" + }, + "font": "Arial;13;0", + "left": 1028, + "top": 384, + "width": 7.22998046875, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe9+vshaTx9w=" + }, + "edgePosition": 2, + "text": "1" + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe9+vshaaXNY=", + "_parent": { + "$ref": "AAAAAAFpe9+vshaTx9w=" + }, + "model": { + "$ref": "AAAAAAFpe9+vshaRqeo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 715, + "top": 907, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe9+vshaTx9w=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe9+vshabTKg=", + "_parent": { + "$ref": "AAAAAAFpe9+vshaTx9w=" + }, + "model": { + "$ref": "AAAAAAFpe9+vshaRqeo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 717, + "top": 921, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe9+vshaTx9w=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe9+vshac+C4=", + "_parent": { + "$ref": "AAAAAAFpe9+vshaTx9w=" + }, + "model": { + "$ref": "AAAAAAFpe9+vshaRqeo=" + }, + "font": "Arial;13;0", + "left": 700, + "top": 880, + "width": 21.68359375, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe9+vshaTx9w=" + }, + "text": "0..1" + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe9+vshadakY=", + "_parent": { + "$ref": "AAAAAAFpe9+vshaTx9w=" + }, + "model": { + "$ref": "AAAAAAFpe9+vshaQ76o=" + }, + "visible": false, + "font": "Arial;13;0", + "top": -8, + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe9+vshaeHL8=", + "_parent": { + "$ref": "AAAAAAFpe9+vshaTx9w=" + }, + "model": { + "$ref": "AAAAAAFpe9+vshaRqeo=" + }, + "visible": false, + "font": "Arial;13;0", + "top": -8, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe9iaRQy84Rg=" + }, + "tail": { + "$ref": "AAAAAAFpe9hwjgyQIqw=" + }, + "lineStyle": 1, + "points": "1044:369;1048:896;689:899", + "nameLabel": { + "$ref": "AAAAAAFpe9+vshaUm6c=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe9+vshaVLQ4=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe9+vshaW+vA=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAFpe9+vshaXmw8=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAFpe9+vshaYl8Q=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAFpe9+vshaZHNw=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAFpe9+vshaaXNY=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAFpe9+vshabTKg=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAFpe9+vshac+C4=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAFpe9+vshadakY=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAFpe9+vshaeHL8=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAFpe+BI8BmulHY=", + "_parent": { + "$ref": "AAAAAAFpe9ROcQmXUrc=" + }, + "model": { + "$ref": "AAAAAAFpe+BI7xmqpv0=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe+BI8BmvuLE=", + "_parent": { + "$ref": "AAAAAAFpe+BI8BmulHY=" + }, + "model": { + "$ref": "AAAAAAFpe+BI7xmqpv0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 193, + "top": 889, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe+BI8BmulHY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe+BI8BmwzYM=", + "_parent": { + "$ref": "AAAAAAFpe+BI8BmulHY=" + }, + "model": { + "$ref": "AAAAAAFpe+BI7xmqpv0=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 178, + "top": 889, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe+BI8BmulHY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe+BI8Bmxzc8=", + "_parent": { + "$ref": "AAAAAAFpe+BI8BmulHY=" + }, + "model": { + "$ref": "AAAAAAFpe+BI7xmqpv0=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 223, + "top": 890, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe+BI8BmulHY=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe+BI8BmyI2M=", + "_parent": { + "$ref": "AAAAAAFpe+BI8BmulHY=" + }, + "model": { + "$ref": "AAAAAAFpe+BI7xmrGFc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 532, + "top": 907, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe+BI8BmulHY=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe+BI8BmzaDo=", + "_parent": { + "$ref": "AAAAAAFpe+BI8BmulHY=" + }, + "model": { + "$ref": "AAAAAAFpe+BI7xmrGFc=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 530, + "top": 921, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe+BI8BmulHY=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe+BI8Bm0ZB0=", + "_parent": { + "$ref": "AAAAAAFpe+BI8BmulHY=" + }, + "model": { + "$ref": "AAAAAAFpe+BI7xmrGFc=" + }, + "font": "Arial;13;0", + "left": 528, + "top": 880, + "width": 19.5126953125, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe+BI8BmulHY=" + }, + "edgePosition": 2, + "text": "0..*" + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe+BI8Bm1JTA=", + "_parent": { + "$ref": "AAAAAAFpe+BI8BmulHY=" + }, + "model": { + "$ref": "AAAAAAFpe+BI7xmsygg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 193, + "top": 756, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe+BI8BmulHY=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe+BI8Bm248E=", + "_parent": { + "$ref": "AAAAAAFpe+BI8BmulHY=" + }, + "model": { + "$ref": "AAAAAAFpe+BI7xmsygg=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 179, + "top": 759, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe+BI8BmulHY=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe+BI8Bm3BCQ=", + "_parent": { + "$ref": "AAAAAAFpe+BI8BmulHY=" + }, + "model": { + "$ref": "AAAAAAFpe+BI7xmsygg=" + }, + "font": "Arial;13;0", + "left": 217, + "top": 752, + "width": 7.22998046875, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe+BI8BmulHY=" + }, + "text": "1" + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe+BI8Bm4g/0=", + "_parent": { + "$ref": "AAAAAAFpe+BI8BmulHY=" + }, + "model": { + "$ref": "AAAAAAFpe+BI7xmrGFc=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe+BI8Bm5DYI=", + "_parent": { + "$ref": "AAAAAAFpe+BI8BmulHY=" + }, + "model": { + "$ref": "AAAAAAFpe+BI7xmsygg=" + }, + "visible": false, + "font": "Arial;13;0", + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe9SGnAoVT4E=" + }, + "tail": { + "$ref": "AAAAAAFpe9iaRQy84Rg=" + }, + "lineStyle": 1, + "points": "559:899;208:896;208:737", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe+BI8BmvuLE=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe+BI8BmwzYM=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe+BI8Bmxzc8=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAFpe+BI8BmyI2M=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAFpe+BI8BmzaDo=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAFpe+BI8Bm0ZB0=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAFpe+BI8Bm1JTA=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAFpe+BI8Bm248E=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAFpe+BI8Bm3BCQ=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAFpe+BI8Bm4g/0=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAFpe+BI8Bm5DYI=" + } + }, + { + "_type": "UMLAssociationView", + "_id": "AAAAAAFpe+DNuBrOv3g=", + "_parent": { + "$ref": "AAAAAAFpe9ROcQmXUrc=" + }, + "model": { + "$ref": "AAAAAAFpe+DNtxrKcoA=" + }, + "subViews": [ + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe+DNuBrPdBc=", + "_parent": { + "$ref": "AAAAAAFpe+DNuBrOv3g=" + }, + "model": { + "$ref": "AAAAAAFpe+DNtxrKcoA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 55, + "top": 469, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe+DNuBrOv3g=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe+DNuRrQRxU=", + "_parent": { + "$ref": "AAAAAAFpe+DNuBrOv3g=" + }, + "model": { + "$ref": "AAAAAAFpe+DNtxrKcoA=" + }, + "visible": null, + "font": "Arial;13;0", + "left": 70, + "top": 469, + "height": 13, + "alpha": 1.5707963267948966, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe+DNuBrOv3g=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe+DNuRrRzXg=", + "_parent": { + "$ref": "AAAAAAFpe+DNuBrOv3g=" + }, + "model": { + "$ref": "AAAAAAFpe+DNtxrKcoA=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 25, + "top": 470, + "height": 13, + "alpha": -1.5707963267948966, + "distance": 15, + "hostEdge": { + "$ref": "AAAAAAFpe+DNuBrOv3g=" + }, + "edgePosition": 1 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe+DNuRrSu1w=", + "_parent": { + "$ref": "AAAAAAFpe+DNuBrOv3g=" + }, + "model": { + "$ref": "AAAAAAFpe+DNtxrLbUo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 105, + "top": 464, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe+DNuBrOv3g=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe+DNuRrT7ck=", + "_parent": { + "$ref": "AAAAAAFpe+DNuBrOv3g=" + }, + "model": { + "$ref": "AAAAAAFpe+DNtxrLbUo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 91, + "top": 461, + "height": 13, + "alpha": 0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe+DNuBrOv3g=" + }, + "edgePosition": 2 + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe+DNuRrUeek=", + "_parent": { + "$ref": "AAAAAAFpe+DNuBrOv3g=" + }, + "model": { + "$ref": "AAAAAAFpe+DNtxrLbUo=" + }, + "font": "Arial;13;0", + "left": 123, + "top": 468, + "width": 19.5126953125, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe+DNuBrOv3g=" + }, + "edgePosition": 2, + "text": "0..*" + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe+DNuRrVhCM=", + "_parent": { + "$ref": "AAAAAAFpe+DNuBrOv3g=" + }, + "model": { + "$ref": "AAAAAAFpe+DNuBrM4Gk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 54, + "top": 575, + "height": 13, + "alpha": -0.5235987755982988, + "distance": 30, + "hostEdge": { + "$ref": "AAAAAAFpe+DNuBrOv3g=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe+DNuRrWoGo=", + "_parent": { + "$ref": "AAAAAAFpe+DNuBrOv3g=" + }, + "model": { + "$ref": "AAAAAAFpe+DNuBrM4Gk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": 51, + "top": 561, + "height": 13, + "alpha": -0.7853981633974483, + "distance": 40, + "hostEdge": { + "$ref": "AAAAAAFpe+DNuBrOv3g=" + } + }, + { + "_type": "EdgeLabelView", + "_id": "AAAAAAFpe+DNuRrXi6Y=", + "_parent": { + "$ref": "AAAAAAFpe+DNuBrOv3g=" + }, + "model": { + "$ref": "AAAAAAFpe+DNuBrM4Gk=" + }, + "font": "Arial;13;0", + "left": 55, + "top": 602, + "width": 7.22998046875, + "height": 13, + "alpha": 0.5235987755982988, + "distance": 25, + "hostEdge": { + "$ref": "AAAAAAFpe+DNuBrOv3g=" + }, + "text": "1" + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe+DNuRrYS3k=", + "_parent": { + "$ref": "AAAAAAFpe+DNuBrOv3g=" + }, + "model": { + "$ref": "AAAAAAFpe+DNtxrLbUo=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -88, + "top": 296, + "width": 10, + "height": 10 + }, + { + "_type": "UMLQualifierCompartmentView", + "_id": "AAAAAAFpe+DNuRrZYYg=", + "_parent": { + "$ref": "AAAAAAFpe+DNuBrOv3g=" + }, + "model": { + "$ref": "AAAAAAFpe+DNuBrM4Gk=" + }, + "visible": false, + "font": "Arial;13;0", + "left": -88, + "top": 296, + "width": 10, + "height": 10 + } + ], + "font": "Arial;13;0", + "head": { + "$ref": "AAAAAAFpe9SGnAoVT4E=" + }, + "tail": { + "$ref": "AAAAAAFpe9SGnAoVT4E=" + }, + "points": "120:496;120:476;40:476;40:596;80:596", + "showVisibility": true, + "nameLabel": { + "$ref": "AAAAAAFpe+DNuBrPdBc=" + }, + "stereotypeLabel": { + "$ref": "AAAAAAFpe+DNuRrQRxU=" + }, + "propertyLabel": { + "$ref": "AAAAAAFpe+DNuRrRzXg=" + }, + "tailRoleNameLabel": { + "$ref": "AAAAAAFpe+DNuRrSu1w=" + }, + "tailPropertyLabel": { + "$ref": "AAAAAAFpe+DNuRrT7ck=" + }, + "tailMultiplicityLabel": { + "$ref": "AAAAAAFpe+DNuRrUeek=" + }, + "headRoleNameLabel": { + "$ref": "AAAAAAFpe+DNuRrVhCM=" + }, + "headPropertyLabel": { + "$ref": "AAAAAAFpe+DNuRrWoGo=" + }, + "headMultiplicityLabel": { + "$ref": "AAAAAAFpe+DNuRrXi6Y=" + }, + "tailQualifiersCompartment": { + "$ref": "AAAAAAFpe+DNuRrYS3k=" + }, + "headQualifiersCompartment": { + "$ref": "AAAAAAFpe+DNuRrZYYg=" + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/docs/comments_domain_diagram.png b/docs/comments_domain_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..ce60e68d02cf98f98f3923606c6c02c846d74dfb Binary files /dev/null and b/docs/comments_domain_diagram.png differ diff --git a/docs/comments_use_case_diagram.png b/docs/comments_use_case_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..ec2a00b801f6b50fc05031c7ea7ae3025a719e51 Binary files /dev/null and b/docs/comments_use_case_diagram.png differ diff --git a/package-lock.json b/package-lock.json index 0fbd10ec5671fce99fe0a9f16a9f2b6c9b4442ae..a9f8e471574c7a7798aea62b83bb9bb2ecf17c01 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "arsnova-angular-frontend", - "version": "0.0.0", + "version": "1.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -15,60 +15,93 @@ } }, "@angular-devkit/build-angular": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.10.6.tgz", - "integrity": "sha512-Lbx6rjIGB2mMmkTCaolrQ86OfPxO/qfb4l2RvPiSyx06MEZfmFWKGeJzqCYKBRQajziX3Yc3AFzAPecoCkbIGA==", - "dev": true, - "requires": { - "@angular-devkit/architect": "0.10.6", - "@angular-devkit/build-optimizer": "0.10.6", - "@angular-devkit/build-webpack": "0.10.6", - "@angular-devkit/core": "7.0.6", - "@ngtools/webpack": "7.0.6", - "ajv": "6.5.3", - "autoprefixer": "9.1.5", + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.13.7.tgz", + "integrity": "sha512-GVYZyLvFXH87loz7GaSt2/JMXeAQrnOFxrx0e82eLtjMjj2ncrTj8FkbCp3WVhUivID1GoDhbgXwcBOHYlzHRg==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.13.7", + "@angular-devkit/build-optimizer": "0.13.7", + "@angular-devkit/build-webpack": "0.13.7", + "@angular-devkit/core": "7.3.7", + "@ngtools/webpack": "7.3.7", + "ajv": "6.9.1", + "autoprefixer": "9.4.6", "circular-dependency-plugin": "5.0.2", "clean-css": "4.2.1", - "copy-webpack-plugin": "4.5.4", - "file-loader": "2.0.0", + "copy-webpack-plugin": "4.6.0", + "file-loader": "3.0.1", "glob": "7.1.3", - "istanbul": "0.4.5", "istanbul-instrumenter-loader": "3.0.1", "karma-source-map-support": "1.3.0", - "less": "3.8.1", + "less": "3.9.0", "less-loader": "4.1.0", - "license-webpack-plugin": "2.0.2", - "loader-utils": "1.1.0", - "mini-css-extract-plugin": "0.4.3", + "license-webpack-plugin": "2.1.0", + "loader-utils": "1.2.3", + "mini-css-extract-plugin": "0.5.0", "minimatch": "3.0.4", - "node-sass": "4.9.3", - "opn": "5.3.0", + "node-sass": "4.11.0", + "opn": "5.4.0", "parse5": "4.0.0", - "portfinder": "1.0.17", - "postcss": "7.0.5", - "postcss-import": "12.0.0", + "postcss": "7.0.14", + "postcss-import": "12.0.1", "postcss-loader": "3.0.0", - "raw-loader": "0.5.1", + "raw-loader": "1.0.0", "rxjs": "6.3.3", "sass-loader": "7.1.0", - "semver": "5.5.1", + "semver": "5.6.0", "source-map-loader": "0.2.4", - "source-map-support": "0.5.9", - "speed-measure-webpack-plugin": "^1.2.3", + "source-map-support": "0.5.10", + "speed-measure-webpack-plugin": "1.3.1", "stats-webpack-plugin": "0.7.0", - "style-loader": "0.23.0", + "style-loader": "0.23.1", "stylus": "0.54.5", "stylus-loader": "3.0.2", - "terser-webpack-plugin": "1.1.0", - "tree-kill": "1.2.0", - "webpack": "4.19.1", - "webpack-dev-middleware": "3.3.0", - "webpack-dev-server": "3.1.8", - "webpack-merge": "4.1.4", - "webpack-sources": "1.2.0", + "terser-webpack-plugin": "1.2.2", + "tree-kill": "1.2.1", + "webpack": "4.29.0", + "webpack-dev-middleware": "3.5.1", + "webpack-dev-server": "3.1.14", + "webpack-merge": "4.2.1", + "webpack-sources": "1.3.0", "webpack-subresource-integrity": "1.1.0-rc.6" }, "dependencies": { + "@angular-devkit/architect": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.13.7.tgz", + "integrity": "sha512-1N4R7cuwbbz7Z76v0Fi5nkxg6eS6FA58Y7SnTYCxI2HRJ1lqlafRjr89eoKzzbCH8ZGa7NG0wfRXtUwF/IrGmQ==", + "dev": true, + "requires": { + "@angular-devkit/core": "7.3.7", + "rxjs": "6.3.3" + } + }, + "@angular-devkit/core": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.3.7.tgz", + "integrity": "sha512-RRDCqSX4wF3Nxxls+W0BzCHz2HYWFP6bUpWxmzXF8EETGlZq/b/ZsEnVV41jtsqC4PCTks4k0qUFMaKE7XCupg==", + "dev": true, + "requires": { + "ajv": "6.9.1", + "chokidar": "2.0.4", + "fast-json-stable-stringify": "2.0.0", + "rxjs": "6.3.3", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", + "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, "glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", @@ -83,6 +116,15 @@ "path-is-absolute": "^1.0.0" } }, + "opn": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", + "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, "parse5": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", @@ -90,39 +132,47 @@ "dev": true }, "semver": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", - "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", "dev": true }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true }, "source-map-support": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", - "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.10.tgz", + "integrity": "sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==", "dev": true, "requires": { "buffer-from": "^1.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==", + "dev": true + } } } } }, "@angular-devkit/build-optimizer": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.10.6.tgz", - "integrity": "sha512-oedg8F++8zZTmoTt141k3nlyPtrSSsQUZI9TFbSdfR1D5WDflwOlkLyRb5WoC53HSoQnagKxY2qzd7khVah//Q==", + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.13.7.tgz", + "integrity": "sha512-NXW75v0lS0cGI1ri058vlaLA4D4Z+CsGYbuHYfmZeoyY0Ub9K4PPI+MZnAUT3D3dCes/dcZTmCNru4prOXR43w==", "dev": true, "requires": { - "loader-utils": "1.1.0", + "loader-utils": "1.2.3", "source-map": "0.5.6", - "typescript": "3.1.6", - "webpack-sources": "1.2.0" + "typescript": "3.2.4", + "webpack-sources": "1.3.0" }, "dependencies": { "source-map": { @@ -130,18 +180,67 @@ "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", "dev": true + }, + "typescript": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz", + "integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==", + "dev": true } } }, "@angular-devkit/build-webpack": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.10.6.tgz", - "integrity": "sha512-tPv23KKw3iAGCTF6noD7zdHbufny4A3d+mlX1VoJDiAa6jqmuFxhY2fALymc11MRY4HVtMF5J1kQy9BLGCDbQg==", + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.13.7.tgz", + "integrity": "sha512-JXlgO0EzlSY90gbw3Cofr02HrZ24Wxgl6ysd6rFuTlXLqlTkjrUn0VdMeoQE33IvfXoaRzXqIH+EQtJvThjUFw==", "dev": true, "requires": { - "@angular-devkit/architect": "0.10.6", - "@angular-devkit/core": "7.0.6", + "@angular-devkit/architect": "0.13.7", + "@angular-devkit/core": "7.3.7", "rxjs": "6.3.3" + }, + "dependencies": { + "@angular-devkit/architect": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.13.7.tgz", + "integrity": "sha512-1N4R7cuwbbz7Z76v0Fi5nkxg6eS6FA58Y7SnTYCxI2HRJ1lqlafRjr89eoKzzbCH8ZGa7NG0wfRXtUwF/IrGmQ==", + "dev": true, + "requires": { + "@angular-devkit/core": "7.3.7", + "rxjs": "6.3.3" + } + }, + "@angular-devkit/core": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.3.7.tgz", + "integrity": "sha512-RRDCqSX4wF3Nxxls+W0BzCHz2HYWFP6bUpWxmzXF8EETGlZq/b/ZsEnVV41jtsqC4PCTks4k0qUFMaKE7XCupg==", + "dev": true, + "requires": { + "ajv": "6.9.1", + "chokidar": "2.0.4", + "fast-json-stable-stringify": "2.0.0", + "rxjs": "6.3.3", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", + "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } } }, "@angular-devkit/core": { @@ -243,13 +342,13 @@ } }, "@angular/compiler-cli": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-7.1.0.tgz", - "integrity": "sha512-Q42B3YmjMNYWTxTWfyDDFa6HSVqwY3rZO5Kp3Q/NKhQ6w/WddduxjARf/OCbtp0bVX3wZNObS6nO4H65rNCtsw==", + "version": "7.2.11", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-7.2.11.tgz", + "integrity": "sha512-JlyJcRdD0oltKbFKGA83g4+vitF4e7ReqAHYTGbNTDIicWhCXYwwGAqj0HYAUHsv9KnP9F5ojZOJ7FRIN7mPgw==", "dev": true, "requires": { "canonical-path": "1.0.0", - "chokidar": "^1.4.2", + "chokidar": "^2.1.1", "convert-source-map": "^1.5.1", "dependency-graph": "^0.7.2", "magic-string": "^0.25.0", @@ -261,127 +360,752 @@ "yargs": "9.0.1" }, "dependencies": { - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "chokidar": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.5.tgz", + "integrity": "sha512-i0TprVWp+Kj4WRPtInjexJ8Q+BqTE909VpH8xVhXrJkoc5QC8VO9TryGOqTr+2hljzc1sC62t22h5tZePodM/A==", "dev": true, "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" + "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" + } + }, + "fsevents": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", + "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true + } } }, - "arr-diff": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "load-json-file": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { - "arr-flatten": "^1.0.1" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" } }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "dev": true, "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" } }, - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "dev": true, "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" + "pify": "^2.0.0" } }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "dev": true, "requires": { - "is-posix-bracket": "^0.1.0" + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" } }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" } }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, "requires": { - "is-glob": "^2.0.0" + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" } }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" } }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "upath": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", + "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", + "dev": true + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", "dev": true + }, + "yargs": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", + "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", + "dev": true, + "requires": { + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } } } }, @@ -636,19 +1360,52 @@ } } }, - "@ngtools/webpack": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-7.0.6.tgz", - "integrity": "sha512-lOHpVqr30QXPuaOxSRasHv6ybDj4a1jVwSOk+W4aGqVlLi0bsngt9HrvgR+FALEoG9P520bytz16wma81Y2Aeg==", - "dev": true, - "requires": { - "@angular-devkit/core": "7.0.6", - "enhanced-resolve": "4.1.0", - "rxjs": "6.3.3", - "tree-kill": "1.2.0", - "webpack-sources": "1.2.0" - } - }, + "@ngtools/webpack": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-7.3.7.tgz", + "integrity": "sha512-u14/poGhv0aSQ3vwgX6DpIFN+TWviqOv4+uM4/AUnLGwvNS+p02BMIr3m+biX9dsLH+7EfATEuWOLkSkhaCjnA==", + "dev": true, + "requires": { + "@angular-devkit/core": "7.3.7", + "enhanced-resolve": "4.1.0", + "rxjs": "6.3.3", + "tree-kill": "1.2.1", + "webpack-sources": "1.3.0" + }, + "dependencies": { + "@angular-devkit/core": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.3.7.tgz", + "integrity": "sha512-RRDCqSX4wF3Nxxls+W0BzCHz2HYWFP6bUpWxmzXF8EETGlZq/b/ZsEnVV41jtsqC4PCTks4k0qUFMaKE7XCupg==", + "dev": true, + "requires": { + "ajv": "6.9.1", + "chokidar": "2.0.4", + "fast-json-stable-stringify": "2.0.0", + "rxjs": "6.3.3", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", + "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, "@ngx-translate/core": { "version": "10.0.2", "resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-10.0.2.tgz", @@ -764,6 +1521,12 @@ "integrity": "sha512-UBYHWph6P3tutkbXpW6XYg9ZPbTKjw/YC2hGG1/GEvWwTbvezBUv3h+mmUFw79T3RFPnmedpiXdOBbXX+4l0jg==", "dev": true }, + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "dev": true + }, "@types/strip-bom": { "version": "3.0.0", "resolved": "http://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", @@ -776,180 +1539,194 @@ "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", "dev": true }, + "@types/webpack-sources": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.5.tgz", + "integrity": "sha512-zfvjpp7jiafSmrzJ2/i3LqOyTYTuJ7u1KOXlKgDlvsj9Rr0x7ZiYu5lZbXwobL7lmsRNtPXlBfmaUD8eU2Hu8w==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "@webassemblyjs/ast": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.6.tgz", - "integrity": "sha512-8nkZS48EVsMUU0v6F1LCIOw4RYWLm2plMtbhFTjNgeXmsTNLuU3xTRtnljt9BFQB+iPbLRobkNrCWftWnNC7wQ==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz", + "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==", "dev": true, "requires": { - "@webassemblyjs/helper-module-context": "1.7.6", - "@webassemblyjs/helper-wasm-bytecode": "1.7.6", - "@webassemblyjs/wast-parser": "1.7.6", - "mamacro": "^0.0.3" + "@webassemblyjs/helper-module-context": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/wast-parser": "1.7.11" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.6.tgz", - "integrity": "sha512-VBOZvaOyBSkPZdIt5VBMg3vPWxouuM13dPXGWI1cBh3oFLNcFJ8s9YA7S9l4mPI7+Q950QqOmqj06oa83hNWBA==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz", + "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.6.tgz", - "integrity": "sha512-SCzhcQWHXfrfMSKcj8zHg1/kL9kb3aa5TN4plc/EREOs5Xop0ci5bdVBApbk2yfVi8aL+Ly4Qpp3/TRAUInjrg==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz", + "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.6.tgz", - "integrity": "sha512-1/gW5NaGsEOZ02fjnFiU8/OEEXU1uVbv2um0pQ9YVL3IHSkyk6xOwokzyqqO1qDZQUAllb+V8irtClPWntbVqw==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz", + "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==", "dev": true }, "@webassemblyjs/helper-code-frame": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.6.tgz", - "integrity": "sha512-+suMJOkSn9+vEvDvgyWyrJo5vJsWSDXZmJAjtoUq4zS4eqHyXImpktvHOZwXp1XQjO5H+YQwsBgqTQEc0J/5zg==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz", + "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==", "dev": true, "requires": { - "@webassemblyjs/wast-printer": "1.7.6" + "@webassemblyjs/wast-printer": "1.7.11" } }, "@webassemblyjs/helper-fsm": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.6.tgz", - "integrity": "sha512-HCS6KN3wgxUihGBW7WFzEC/o8Eyvk0d56uazusnxXthDPnkWiMv+kGi9xXswL2cvfYfeK5yiM17z2K5BVlwypw==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz", + "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==", "dev": true }, "@webassemblyjs/helper-module-context": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.6.tgz", - "integrity": "sha512-e8/6GbY7OjLM+6OsN7f2krC2qYVNaSr0B0oe4lWdmq5sL++8dYDD1TFbD1TdAdWMRTYNr/Qq7ovXWzia2EbSjw==", - "dev": true, - "requires": { - "mamacro": "^0.0.3" - } + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz", + "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==", + "dev": true }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.6.tgz", - "integrity": "sha512-PzYFCb7RjjSdAOljyvLWVqd6adAOabJW+8yRT+NWhXuf1nNZWH+igFZCUK9k7Cx7CsBbzIfXjJc7u56zZgFj9Q==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz", + "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.6.tgz", - "integrity": "sha512-3GS628ppDPSuwcYlQ7cDCGr4W2n9c4hLzvnRKeuz+lGsJSmc/ADVoYpm1ts2vlB1tGHkjtQMni+yu8mHoMlKlA==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz", + "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-buffer": "1.7.6", - "@webassemblyjs/helper-wasm-bytecode": "1.7.6", - "@webassemblyjs/wasm-gen": "1.7.6" + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11" } }, "@webassemblyjs/ieee754": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.6.tgz", - "integrity": "sha512-V4cIp0ruyw+hawUHwQLn6o2mFEw4t50tk530oKsYXQhEzKR+xNGDxs/SFFuyTO7X3NzEu4usA3w5jzhl2RYyzQ==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz", + "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.6.tgz", - "integrity": "sha512-ojdlG8WpM394lBow4ncTGJoIVZ4aAtNOWHhfAM7m7zprmkVcKK+2kK5YJ9Bmj6/ketTtOn7wGSHCtMt+LzqgYQ==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz", + "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==", "dev": true, "requires": { "@xtuc/long": "4.2.1" } }, "@webassemblyjs/utf8": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.6.tgz", - "integrity": "sha512-oId+tLxQ+AeDC34ELRYNSqJRaScB0TClUU6KQfpB8rNT6oelYlz8axsPhf6yPTg7PBJ/Z5WcXmUYiHEWgbbHJw==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz", + "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.6.tgz", - "integrity": "sha512-pTNjLO3o41v/Vz9VFLl+I3YLImpCSpodFW77pNoH4agn5I6GgSxXHXtvWDTvYJFty0jSeXZWLEmbaSIRUDlekg==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz", + "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-buffer": "1.7.6", - "@webassemblyjs/helper-wasm-bytecode": "1.7.6", - "@webassemblyjs/helper-wasm-section": "1.7.6", - "@webassemblyjs/wasm-gen": "1.7.6", - "@webassemblyjs/wasm-opt": "1.7.6", - "@webassemblyjs/wasm-parser": "1.7.6", - "@webassemblyjs/wast-printer": "1.7.6" + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/helper-wasm-section": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11", + "@webassemblyjs/wasm-opt": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11", + "@webassemblyjs/wast-printer": "1.7.11" } }, "@webassemblyjs/wasm-gen": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.6.tgz", - "integrity": "sha512-mQvFJVumtmRKEUXMohwn8nSrtjJJl6oXwF3FotC5t6e2hlKMh8sIaW03Sck2MDzw9xPogZD7tdP5kjPlbH9EcQ==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz", + "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-wasm-bytecode": "1.7.6", - "@webassemblyjs/ieee754": "1.7.6", - "@webassemblyjs/leb128": "1.7.6", - "@webassemblyjs/utf8": "1.7.6" + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/ieee754": "1.7.11", + "@webassemblyjs/leb128": "1.7.11", + "@webassemblyjs/utf8": "1.7.11" } }, "@webassemblyjs/wasm-opt": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.6.tgz", - "integrity": "sha512-go44K90fSIsDwRgtHhX14VtbdDPdK2sZQtZqUcMRvTojdozj5tLI0VVJAzLCfz51NOkFXezPeVTAYFqrZ6rI8Q==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz", + "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-buffer": "1.7.6", - "@webassemblyjs/wasm-gen": "1.7.6", - "@webassemblyjs/wasm-parser": "1.7.6" + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-buffer": "1.7.11", + "@webassemblyjs/wasm-gen": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11" } }, "@webassemblyjs/wasm-parser": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.6.tgz", - "integrity": "sha512-t1T6TfwNY85pDA/HWPA8kB9xA4sp9ajlRg5W7EKikqrynTyFo+/qDzIpvdkOkOGjlS6d4n4SX59SPuIayR22Yg==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz", + "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-api-error": "1.7.6", - "@webassemblyjs/helper-wasm-bytecode": "1.7.6", - "@webassemblyjs/ieee754": "1.7.6", - "@webassemblyjs/leb128": "1.7.6", - "@webassemblyjs/utf8": "1.7.6" + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-api-error": "1.7.11", + "@webassemblyjs/helper-wasm-bytecode": "1.7.11", + "@webassemblyjs/ieee754": "1.7.11", + "@webassemblyjs/leb128": "1.7.11", + "@webassemblyjs/utf8": "1.7.11" } }, "@webassemblyjs/wast-parser": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.6.tgz", - "integrity": "sha512-1MaWTErN0ziOsNUlLdvwS+NS1QWuI/kgJaAGAMHX8+fMJFgOJDmN/xsG4h/A1Gtf/tz5VyXQciaqHZqp2q0vfg==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz", + "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/floating-point-hex-parser": "1.7.6", - "@webassemblyjs/helper-api-error": "1.7.6", - "@webassemblyjs/helper-code-frame": "1.7.6", - "@webassemblyjs/helper-fsm": "1.7.6", - "@xtuc/long": "4.2.1", - "mamacro": "^0.0.3" + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/floating-point-hex-parser": "1.7.11", + "@webassemblyjs/helper-api-error": "1.7.11", + "@webassemblyjs/helper-code-frame": "1.7.11", + "@webassemblyjs/helper-fsm": "1.7.11", + "@xtuc/long": "4.2.1" } }, "@webassemblyjs/wast-printer": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.6.tgz", - "integrity": "sha512-vHdHSK1tOetvDcl1IV1OdDeGNe/NDDQ+KzuZHMtqTVP1xO/tZ/IKNpj5BaGk1OYFdsDWQqb31PIwdEyPntOWRQ==", + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz", + "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/wast-parser": "1.7.6", + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/wast-parser": "1.7.11", "@xtuc/long": "4.2.1" } }, @@ -966,10 +1743,11 @@ "dev": true }, "abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true, + "optional": true }, "accepts": { "version": "1.3.5", @@ -982,19 +1760,16 @@ } }, "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", "dev": true }, "acorn-dynamic-import": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", - "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", - "dev": true, - "requires": { - "acorn": "^5.0.0" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", + "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "dev": true }, "addressparser": { "version": "1.0.1", @@ -1046,15 +1821,15 @@ } }, "ajv-errors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.0.tgz", - "integrity": "sha1-7PAh+hCP0X37Xms4Py3SM+Mf/Fk=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", "dev": true }, "ajv-keywords": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", + "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", "dev": true }, "align-text": { @@ -1062,6 +1837,7 @@ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, + "optional": true, "requires": { "kind-of": "^3.0.2", "longest": "^1.0.1", @@ -1123,9 +1899,9 @@ "integrity": "sha1-cvA81TK39AAy6x7PufhFc4S+lW4=" }, "ansi-colors": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.1.tgz", - "integrity": "sha512-Xt+zb6nqgvV9SWAVp0EG3lRsHcbq5DDgqjPPz6pwgtj6RKz65zGXMNa82oJfOSBA/to6GmRP7Dr+6o+kbApTzQ==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", "dev": true }, "ansi-escapes": { @@ -1149,7 +1925,7 @@ "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==", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", "dev": true, "requires": { "color-convert": "^1.9.0" @@ -1166,20 +1942,11 @@ } }, "app-root-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.1.0.tgz", - "integrity": "sha1-mL9lmTJ+zqGZMJhm6BQDaP0uZGo=", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.2.1.tgz", + "integrity": "sha512-91IFKeKk7FjfmezPKkwtaRvSpnUc4gDwPAjA1YZ9Gn0q0PPeW+vbeUsZuyDwjI7+QTHhcLen2v25fi/AmhvbJA==", "dev": true }, - "append-transform": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", - "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", - "dev": true, - "requires": { - "default-require-extensions": "^2.0.0" - } - }, "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", @@ -1191,6 +1958,7 @@ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, + "optional": true, "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" @@ -1199,7 +1967,7 @@ "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", "dev": true, "requires": { "sprintf-js": "~1.0.2" @@ -1227,12 +1995,13 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true + "dev": true, + "optional": true }, "array-flatten": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz", - "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", "dev": true }, "array-slice": { @@ -1311,7 +2080,8 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true + "dev": true, + "optional": true }, "assign-symbols": { "version": "1.0.0", @@ -1375,30 +2145,32 @@ "dev": true }, "autoprefixer": { - "version": "9.1.5", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.1.5.tgz", - "integrity": "sha512-kk4Zb6RUc58ld7gdosERHMF3DzIYJc2fp5sX46qEsGXQQy5bXsu8qyLjoxuY1NuQ/cJuCYnx99BfjwnRggrYIw==", + "version": "9.4.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.4.6.tgz", + "integrity": "sha512-Yp51mevbOEdxDUy5WjiKtpQaecqYq9OqZSL04rSoCiry7Tc5I9FEyo3bfxiTJc1DfHeKwSFCUYbBAiOQ2VGfiw==", "dev": true, "requires": { - "browserslist": "^4.1.0", - "caniuse-lite": "^1.0.30000884", + "browserslist": "^4.4.1", + "caniuse-lite": "^1.0.30000929", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.2", - "postcss-value-parser": "^3.2.3" + "postcss": "^7.0.13", + "postcss-value-parser": "^3.3.1" } }, "aws-sign2": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true + "dev": true, + "optional": true }, "aws4": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "dev": true + "dev": true, + "optional": true }, "axios": { "version": "0.15.3", @@ -1666,9 +2438,9 @@ } }, "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true }, "binary-extensions": { @@ -1824,6 +2596,7 @@ "resolved": "http://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "dev": true, + "optional": true, "requires": { "hoek": "2.x.x" } @@ -1831,7 +2604,7 @@ "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -1959,14 +2732,14 @@ } }, "browserslist": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.3.4.tgz", - "integrity": "sha512-u5iz+ijIMUlmV8blX82VGFrB9ecnUg5qEt55CMZ/YJEhha+d8qpBfOFuutJ6F/VKRXjZoD33b6uvarpPxcl3RA==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.5.4.tgz", + "integrity": "sha512-rAjx494LMjqKnMPhFkuLmLp8JWEX0o8ADTGeAbOqaF+XCvYLreZrG5uVjnPBlAQ8REZK4pzXGvp0bWgrFtKaag==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000899", - "electron-to-chromium": "^1.3.82", - "node-releases": "^1.0.1" + "caniuse-lite": "^1.0.30000955", + "electron-to-chromium": "^1.3.122", + "node-releases": "^1.1.13" } }, "buffer": { @@ -2018,7 +2791,8 @@ "version": "0.0.2", "resolved": "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-0.0.2.tgz", "integrity": "sha1-JrOIXRD6E9t/wBquOquHAZngEkw=", - "dev": true + "dev": true, + "optional": true }, "buffer-xor": { "version": "1.0.3", @@ -2085,14 +2859,6 @@ "ssri": "^5.2.4", "unique-filename": "^1.1.0", "y18n": "^4.0.0" - }, - "dependencies": { - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - } } }, "cache-base": { @@ -2127,10 +2893,11 @@ "dev": true }, "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true, + "optional": true }, "camelcase-keys": { "version": "2.1.0", @@ -2141,21 +2908,12 @@ "requires": { "camelcase": "^2.0.0", "map-obj": "^1.0.0" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true, - "optional": true - } } }, "caniuse-lite": { - "version": "1.0.30000910", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000910.tgz", - "integrity": "sha512-u/nxtHGAzCGZzIxt3dA/tpSPOcirBZFWKwz1EPz4aaupnBI2XR0Rbr74g0zc6Hzy41OEM4uMoZ38k56TpYAWjQ==", + "version": "1.0.30000957", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000957.tgz", + "integrity": "sha512-8wxNrjAzyiHcLXN/iunskqQnJquQQ6VX8JHfW5kLgAPRSiSuKZiNfmIkP5j7jgyXqAQBSoXyJxfnbCFS0ThSiQ==", "dev": true }, "canonical-path": { @@ -2446,15 +3204,6 @@ "shallow-clone": "^1.0.0" }, "dependencies": { - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", @@ -2476,9 +3225,9 @@ "dev": true }, "codelyzer": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-4.4.4.tgz", - "integrity": "sha512-JgFMudx0n50IuE/ydAfnkksCwQkWSVWgYvhDPHZgDUbmsiYC22VuEXKu5l8Hhx9UJsLgjWDLjTAFGj2WaW5DUA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-4.5.0.tgz", + "integrity": "sha512-oO6vCkjqsVrEsmh58oNlnJkRXuA30hF8cdNAQV9DytEalDwyOFRvHMnlKFzmOStNerOmPGZU9GAHnBo4tGvtiQ==", "dev": true, "requires": { "app-root-path": "^2.1.0", @@ -2490,9 +3239,9 @@ }, "dependencies": { "sprintf-js": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.1.tgz", - "integrity": "sha1-Nr54Mgr+WAH2zqPueLblqrlA6gw=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", "dev": true } } @@ -2557,12 +3306,6 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "compare-versions": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.3.0.tgz", - "integrity": "sha512-MAAAIOdi2s4Gl6rZ76PNcUa9IOYB+5ICdT41o5uMRf09aEu/F9RK+qhe8RjXNPwcTjGV7KU7h2P/fljThFVqyQ==", - "dev": true - }, "component-bind": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", @@ -2582,33 +3325,33 @@ "dev": true }, "compressible": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz", - "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.16.tgz", + "integrity": "sha512-JQfEOdnI7dASwCuSPWIeVYwc/zMsu/+tRhoUvEfXz2gxOA2DNjmG5vhtFdBlhWPPGo+RdT9S3tgc/uH5qgDiiA==", "dev": true, "requires": { - "mime-db": ">= 1.36.0 < 2" + "mime-db": ">= 1.38.0 < 2" }, "dependencies": { "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", + "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==", "dev": true } } }, "compression": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", - "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, "requires": { "accepts": "~1.3.5", "bytes": "3.0.0", - "compressible": "~2.0.14", + "compressible": "~2.0.16", "debug": "2.6.9", - "on-headers": "~1.0.1", + "on-headers": "~1.0.2", "safe-buffer": "5.1.2", "vary": "~1.1.2" }, @@ -2675,9 +3418,9 @@ } }, "connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", "dev": true }, "console-browserify": { @@ -2693,7 +3436,8 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true + "dev": true, + "optional": true }, "constants-browserify": { "version": "1.0.0", @@ -2755,9 +3499,9 @@ "dev": true }, "copy-webpack-plugin": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.5.4.tgz", - "integrity": "sha512-0lstlEyj74OAtYMrDxlNZsU7cwFijAI3Ofz2fD6Mpo9r4xCv4yegfa3uHIKvZY1NSuOtE9nvG6TAhJ+uz9gDaQ==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz", + "integrity": "sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA==", "dev": true, "requires": { "cacache": "^10.0.4", @@ -2858,6 +3602,7 @@ "resolved": "http://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", "dev": true, + "optional": true, "requires": { "boom": "2.x.x" } @@ -2900,9 +3645,9 @@ } }, "css-selector-tokenizer": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", - "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz", + "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", "dev": true, "requires": { "cssesc": "^0.1.0", @@ -2936,6 +3681,7 @@ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, + "optional": true, "requires": { "array-find-index": "^1.0.1" } @@ -3019,7 +3765,8 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true + "dev": true, + "optional": true }, "default-gateway": { "version": "2.7.2", @@ -3061,23 +3808,6 @@ } } }, - "default-require-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", - "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", - "dev": true, - "requires": { - "strip-bom": "^3.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", @@ -3186,12 +3916,6 @@ "dev": true } } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true } } }, @@ -3211,7 +3935,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true + "dev": true, + "optional": true }, "depd": { "version": "1.1.2", @@ -3280,30 +4005,12 @@ } }, "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", "dev": true, "requires": { - "arrify": "^1.0.1", "path-type": "^3.0.0" - }, - "dependencies": { - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } } }, "dns-equal": { @@ -3333,7 +4040,7 @@ }, "doctrine": { "version": "0.7.2", - "resolved": "http://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz", "integrity": "sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM=", "requires": { "esutils": "^1.1.6", @@ -3412,9 +4119,9 @@ "optional": true }, "duplexify": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", - "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, "requires": { "end-of-stream": "^1.0.0", @@ -3440,9 +4147,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.84", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.84.tgz", - "integrity": "sha512-IYhbzJYOopiTaNWMBp7RjbecUBsbnbDneOP86f3qvS0G0xfzwNSvMJpTrvi5/Y1gU7tg2NAgeg8a8rCYvW9Whw==", + "version": "1.3.122", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.122.tgz", + "integrity": "sha512-3RKoIyCN4DhP2dsmleuFvpJAIDOseWH88wFYBzb22CSwoFDSWRc4UAMfrtc9h8nBdJjTNIN3rogChgOy6eFInw==", "dev": true }, "elliptic": { @@ -3604,13 +4311,15 @@ "version": "4.2.4", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==", - "dev": true + "dev": true, + "optional": true }, "es6-promisify": { "version": "5.0.0", "resolved": "http://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "dev": true, + "optional": true, "requires": { "es6-promise": "^4.0.3" } @@ -3658,9 +4367,9 @@ } }, "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dev": true, "requires": { "esrecurse": "^4.1.0", @@ -3668,9 +4377,9 @@ } }, "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "esrecurse": { @@ -3707,18 +4416,18 @@ "dev": true }, "events": { - "version": "1.1.1", - "resolved": "http://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", + "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", "dev": true }, "eventsource": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", - "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", "dev": true, "requires": { - "original": ">=0.0.5" + "original": "^1.0.0" } }, "evp_bytestokey": { @@ -3844,48 +4553,6 @@ } } }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "^2.1.0" - }, - "dependencies": { - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - } - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, "express": { "version": "4.16.4", "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", @@ -4131,12 +4798,13 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "dev": true, + "optional": true }, "fastparse": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", - "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", "dev": true }, "faye-websocket": { @@ -4164,9 +4832,9 @@ } }, "file-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-2.0.0.tgz", - "integrity": "sha512-YCsBfd1ZGCyonOKLxPiKPdu+8ld9HAaMEvJewzz+b2eTF7uL5Zm/HdBF6FjCrpCMRq25Mi0U1gl4pwn2TlH7hQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz", + "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==", "dev": true, "requires": { "loader-utils": "^1.0.2", @@ -4180,12 +4848,6 @@ "dev": true, "optional": true }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, "fileset": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", @@ -4264,13 +4926,39 @@ } }, "flush-write-stream": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", - "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "dev": true, "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + }, + "dependencies": { + "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==", + "dev": 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" + } + }, + "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==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "follow-redirects": { @@ -4300,9 +4988,9 @@ "dev": true }, "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", "dev": true, "requires": { "for-in": "^1.0.1" @@ -4314,17 +5002,6 @@ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "dev": true }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.12" - } - }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -4409,7 +5086,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -4430,12 +5108,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4450,17 +5130,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -4577,7 +5260,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -4589,6 +5273,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -4603,6 +5288,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -4610,12 +5296,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.2.4", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -4634,6 +5322,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -4714,7 +5403,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -4726,6 +5416,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -4811,7 +5502,8 @@ "safe-buffer": { "version": "5.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -4847,6 +5539,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -4866,6 +5559,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -4909,12 +5603,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -4923,6 +5619,7 @@ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", "dev": true, + "optional": true, "requires": { "graceful-fs": "^4.1.2", "inherits": "~2.0.0", @@ -4975,6 +5672,7 @@ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, + "optional": true, "requires": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", @@ -5023,7 +5721,8 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true + "dev": true, + "optional": true }, "get-stream": { "version": "3.0.0", @@ -5092,42 +5791,6 @@ "path-is-absolute": "^1.0.0" } }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "^2.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, "glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", @@ -5167,14 +5830,6 @@ "ignore": "^3.3.5", "pify": "^3.0.0", "slash": "^1.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } } }, "globule": { @@ -5187,15 +5842,6 @@ "glob": "~7.1.1", "lodash": "~4.17.10", "minimatch": "~3.0.2" - }, - "dependencies": { - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true, - "optional": true - } } }, "good-listener": { @@ -5219,9 +5865,9 @@ "integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE=" }, "handle-thing": { - "version": "1.2.5", - "resolved": "http://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", - "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", + "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", "dev": true }, "handlebars": { @@ -5306,34 +5952,6 @@ } } }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", - "dev": true - }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "dev": true, - "requires": { - "ajv": "^4.9.1", - "har-schema": "^1.0.5" - }, - "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "requires": { - "co": "^4.6.0", - "json-stable-stringify": "^1.0.1" - } - } - } - }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", @@ -5376,7 +5994,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true + "dev": true, + "optional": true }, "has-value": { "version": "1.0.0", @@ -5449,9 +6068,9 @@ } }, "hash.js": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz", - "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -5463,6 +6082,7 @@ "resolved": "http://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", "dev": true, + "optional": true, "requires": { "boom": "2.x.x", "cryptiles": "2.x.x", @@ -5496,7 +6116,8 @@ "version": "2.16.3", "resolved": "http://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true + "dev": true, + "optional": true }, "homedir-polyfill": { "version": "1.0.1", @@ -5571,6 +6192,7 @@ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", "dev": true, + "optional": true, "requires": { "agent-base": "4", "debug": "3.1.0" @@ -5581,6 +6203,7 @@ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", "dev": true, + "optional": true, "requires": { "es6-promisify": "^5.0.0" } @@ -5590,6 +6213,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, + "optional": true, "requires": { "ms": "2.0.0" } @@ -5613,6 +6237,7 @@ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", "dev": true, + "optional": true, "requires": { "assert-plus": "^0.2.0", "jsprim": "^1.2.2", @@ -5624,6 +6249,7 @@ "resolved": "https://registry.npmjs.org/httpntlm/-/httpntlm-1.6.1.tgz", "integrity": "sha1-rQFScUOi6Hc8+uapb1hla7UqNLI=", "dev": true, + "optional": true, "requires": { "httpreq": ">=0.4.22", "underscore": "~1.7.0" @@ -5633,7 +6259,8 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/httpreq/-/httpreq-0.4.24.tgz", "integrity": "sha1-QzX/2CzZaWaKOUZckprGHWOTYn8=", - "dev": true + "dev": true, + "optional": true }, "https-browserify": { "version": "1.0.0", @@ -5659,9 +6286,9 @@ "dev": true }, "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", "dev": true }, "iferr": { @@ -5731,9 +6358,9 @@ } }, "p-limit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", - "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -5749,9 +6376,9 @@ } }, "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "pkg-dir": { @@ -5894,9 +6521,9 @@ } }, "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", "dev": true }, "invariant": { @@ -6010,21 +6637,6 @@ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-1.1.0.tgz", "integrity": "sha1-8EN01O7lMQ6ajhE78UlUEeRhdqE=" }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "^2.0.0" - } - }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -6135,18 +6747,6 @@ } } }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", @@ -6223,70 +6823,50 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, - "istanbul": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", - "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", + "istanbul-api": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.7.tgz", + "integrity": "sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA==", "dev": true, "requires": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" + "async": "^2.1.4", + "fileset": "^2.0.2", + "istanbul-lib-coverage": "^1.2.1", + "istanbul-lib-hook": "^1.2.2", + "istanbul-lib-instrument": "^1.10.2", + "istanbul-lib-report": "^1.1.5", + "istanbul-lib-source-maps": "^1.2.6", + "istanbul-reports": "^1.5.1", + "js-yaml": "^3.7.0", + "mkdirp": "^0.5.1", + "once": "^1.4.0" }, "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "append-transform": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", + "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", "dev": true, "requires": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.2.0" + "default-require-extensions": "^1.0.0" } }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, - "estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", - "dev": true + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } }, - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "default-require-extensions": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", + "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", "dev": true, "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "strip-bom": "^2.0.0" } }, "has-flag": { @@ -6295,22 +6875,61 @@ "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", "dev": true }, - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "istanbul-lib-coverage": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", + "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", "dev": true }, - "source-map": { - "version": "0.2.0", - "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "istanbul-lib-hook": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz", + "integrity": "sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==", "dev": true, - "optional": true, "requires": { - "amdefine": ">=0.0.4" + "append-transform": "^0.4.0" } }, + "istanbul-lib-report": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz", + "integrity": "sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^1.2.1", + "mkdirp": "^0.5.1", + "path-parse": "^1.0.5", + "supports-color": "^3.1.2" + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz", + "integrity": "sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "istanbul-lib-coverage": "^1.2.1", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" + } + }, + "istanbul-reports": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.5.1.tgz", + "integrity": "sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==", + "dev": true, + "requires": { + "handlebars": "^4.0.3" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", @@ -6319,35 +6938,9 @@ "requires": { "has-flag": "^1.0.0" } - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true } } }, - "istanbul-api": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.1.tgz", - "integrity": "sha512-duj6AlLcsWNwUpfyfHt0nWIeRiZpuShnP40YTxOGQgtaN8fd6JYSxsvxUphTDy8V5MfDXo4s/xVCIIvVCO808g==", - "dev": true, - "requires": { - "async": "^2.1.4", - "compare-versions": "^3.1.0", - "fileset": "^2.0.2", - "istanbul-lib-coverage": "^1.2.0", - "istanbul-lib-hook": "^1.2.0", - "istanbul-lib-instrument": "^1.10.1", - "istanbul-lib-report": "^1.1.4", - "istanbul-lib-source-maps": "^1.2.4", - "istanbul-reports": "^1.3.0", - "js-yaml": "^3.7.0", - "mkdirp": "^0.5.1", - "once": "^1.4.0" - } - }, "istanbul-instrumenter-loader": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-3.0.1.tgz", @@ -6395,25 +6988,10 @@ } } }, - "istanbul-lib-coverage": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz", - "integrity": "sha512-GvgM/uXRwm+gLlvkWHTjDAvwynZkL9ns15calTrmhGgowlwJBbWMYzWbKqE2DT6JDP1AFXKa+Zi0EkqNCUqY0A==", - "dev": true - }, - "istanbul-lib-hook": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.1.tgz", - "integrity": "sha512-eLAMkPG9FU0v5L02lIkcj/2/Zlz9OuluaXikdr5iStk8FDbSwAixTK9TkYxbF0eNnzAJTwM2fkV2A1tpsIp4Jg==", - "dev": true, - "requires": { - "append-transform": "^1.0.0" - } - }, "istanbul-lib-instrument": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz", - "integrity": "sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", + "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", "dev": true, "requires": { "babel-generator": "^6.18.0", @@ -6421,72 +6999,18 @@ "babel-traverse": "^6.18.0", "babel-types": "^6.18.0", "babylon": "^6.18.0", - "istanbul-lib-coverage": "^1.2.0", + "istanbul-lib-coverage": "^1.2.1", "semver": "^5.3.0" - } - }, - "istanbul-lib-report": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz", - "integrity": "sha512-Azqvq5tT0U09nrncK3q82e/Zjkxa4tkFZv7E6VcqP0QCPn6oNljDPfrZEC/umNXds2t7b8sRJfs6Kmpzt8m2kA==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^1.2.0", - "mkdirp": "^0.5.1", - "path-parse": "^1.0.5", - "supports-color": "^3.1.2" }, "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "istanbul-lib-coverage": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", + "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.5.tgz", - "integrity": "sha512-8O2T/3VhrQHn0XcJbP1/GN7kXMiRAlPi+fj3uEHrjBD8Oz7Py0prSC25C09NuAZS6bgW1NNKAvCSHZXB0irSGA==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "istanbul-lib-coverage": "^1.2.0", - "mkdirp": "^0.5.1", - "rimraf": "^2.6.1", - "source-map": "^0.5.3" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } } } }, - "istanbul-reports": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.3.0.tgz", - "integrity": "sha512-y2Z2IMqE1gefWUaVjrBm0mSKvUkaBy9Vqz8iwr/r40Y9hBbIteH5wqHG/9DLTfJ9xUnUT2j7A3+VVJ6EaYBllA==", - "dev": true, - "requires": { - "handlebars": "^4.0.3" - } - }, "jasmine": { "version": "2.99.0", "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.99.0.tgz", @@ -6528,9 +7052,9 @@ "dev": true }, "js-base64": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz", - "integrity": "sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", + "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==", "dev": true, "optional": true }, @@ -6541,9 +7065,9 @@ "dev": true }, "js-yaml": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", - "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.0.tgz", + "integrity": "sha512-pZZoSxcCYco+DIKBTimr67J6Hy+EYGZDY/HCWC+iAEA9h1ByhMXAIVUXMcMFpOCxQ/xjXmPI2MkDL5HRm5eFrQ==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -6577,18 +7101,9 @@ }, "json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "~0.0.0" - } + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "json-stringify-safe": { "version": "5.0.1", @@ -6603,16 +7118,21 @@ "dev": true }, "json5": { - "version": "0.5.1", - "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } }, "jsonpointer": { "version": "4.0.1", @@ -7076,9 +7596,9 @@ "dev": true }, "source-map-support": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", - "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.11.tgz", + "integrity": "sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -7119,9 +7639,9 @@ } }, "less": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/less/-/less-3.8.1.tgz", - "integrity": "sha512-8HFGuWmL3FhQR0aH89escFNBQH/nEiYPP2ltDFdQw2chE28Yx2E3lhAIq9Y2saYwLSwa699s4dBVEfCY8Drf7Q==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/less/-/less-3.9.0.tgz", + "integrity": "sha512-31CmtPEZraNUtuUREYjSqRkeETFdyEHSEPAGq4erDlUXtda7pzNmctdljdIagSb589d/qXGWiiP31R5JVf+v0w==", "dev": true, "requires": { "clone": "^2.1.2", @@ -7135,185 +7655,12 @@ "source-map": "~0.6.0" }, "dependencies": { - "ajv": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz", - "integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==", - "dev": true, - "optional": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true, - "optional": true - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true, - "optional": true - }, - "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==", - "dev": true, - "optional": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true, - "optional": true - }, - "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==", - "dev": true, - "optional": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", - "dev": true - }, - "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", - "dev": true, - "requires": { - "mime-db": "~1.37.0" - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "optional": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true, - "optional": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true, - "optional": true - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "optional": true, - "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" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "optional": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "optional": true - }, - "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==", - "dev": true, - "optional": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true, - "optional": true } } }, @@ -7326,14 +7673,6 @@ "clone": "^2.1.1", "loader-utils": "^1.1.0", "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } } }, "levn": { @@ -7341,6 +7680,7 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, + "optional": true, "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -7350,13 +7690,15 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/libbase64/-/libbase64-0.1.0.tgz", "integrity": "sha1-YjUag5VjrF/1vSbxL2Dpgwu3UeY=", - "dev": true + "dev": true, + "optional": true }, "libmime": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/libmime/-/libmime-3.0.0.tgz", "integrity": "sha1-UaGp50SOy9Ms2lRCFnW7IbwJPaY=", "dev": true, + "optional": true, "requires": { "iconv-lite": "0.4.15", "libbase64": "0.1.0", @@ -7367,7 +7709,8 @@ "version": "0.4.15", "resolved": "http://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", - "dev": true + "dev": true, + "optional": true } } }, @@ -7375,44 +7718,57 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/libqp/-/libqp-1.1.0.tgz", "integrity": "sha1-9ebgatdLeU+1tbZpiL9yjvHe2+g=", - "dev": true + "dev": true, + "optional": true }, "license-webpack-plugin": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.0.2.tgz", - "integrity": "sha512-GsomZw5VoT20ST8qH2tOjBgbyhn6Pgs9M94g0mbvfBIV1VXufm1iKY+4dbgfTObj1Mp6nSRE3Zf74deOZr0KwA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.1.0.tgz", + "integrity": "sha512-vDiBeMWxjE9n6TabQ9J4FH8urFdsRK0Nvxn1cit9biCiR9aq1zBR0X2BlAkEiIG6qPamLeU0GzvIgLkrFc398A==", "dev": true, "requires": { + "@types/webpack-sources": "^0.1.5", "webpack-sources": "^1.2.0" } }, "load-json-file": { - "version": "2.0.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, + "optional": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", "pify": "^2.0.0", - "strip-bom": "^3.0.0" + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "optional": true + } } }, "loader-runner": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.1.tgz", - "integrity": "sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", "dev": true }, "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", "dev": true, "requires": { - "big.js": "^3.1.3", + "big.js": "^5.2.2", "emojis-list": "^2.0.0", - "json5": "^0.5.0" + "json5": "^1.0.1" } }, "locate-path": { @@ -7426,9 +7782,9 @@ } }, "lodash": { - "version": "4.17.5", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", - "integrity": "sha1-maktZcAnLevoyWtgV7yPv6O+1RE=", + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", "dev": true }, "lodash.assign": { @@ -7630,7 +7986,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true + "dev": true, + "optional": true }, "loose-envify": { "version": "1.4.0", @@ -7646,6 +8003,7 @@ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "dev": true, + "optional": true, "requires": { "currently-unhandled": "^0.4.1", "signal-exit": "^3.0.0" @@ -7662,12 +8020,12 @@ } }, "magic-string": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz", - "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.2.tgz", + "integrity": "sha512-iLs9mPjh9IuTtRsqqhNGYcZXGei0Nh/A4xirrsqW7c+QhKVFL2vm7U09ru6cHRD22azaP/wMDgI+HCqbETMTtg==", "dev": true, "requires": { - "sourcemap-codec": "^1.4.1" + "sourcemap-codec": "^1.4.4" } }, "mailcomposer": { @@ -7730,14 +8088,6 @@ "dev": true, "requires": { "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } } }, "make-error": { @@ -7746,12 +8096,6 @@ "integrity": "sha1-GZeO1XX56VRdL/jBPjO10Ypn1TU=", "dev": true }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", - "dev": true - }, "map-age-cleaner": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", @@ -7771,7 +8115,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true + "dev": true, + "optional": true }, "map-visit": { "version": "1.0.0", @@ -7787,12 +8132,6 @@ "resolved": "http://registry.npmjs.org/marked/-/marked-0.3.19.tgz", "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==" }, - "math-random": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", - "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", - "dev": true - }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -7835,113 +8174,33 @@ "requires": { "errno": "^0.1.3", "readable-stream": "^2.0.1" - } - }, - "meow": { - "version": "3.7.0", - "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "optional": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "optional": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, + } + }, + "meow": { + "version": "3.7.0", + "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "optional": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "dependencies": { "minimist": { "version": "1.2.0", "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true, "optional": true - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "optional": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "optional": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "optional": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "optional": true, - "requires": { - "is-utf8": "^0.2.0" - } } } }, @@ -8030,9 +8289,9 @@ "dev": true }, "mini-css-extract-plugin": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.3.tgz", - "integrity": "sha512-Mxs0nxzF1kxPv4TRi2NimewgXlJqh0rGE30vviCU2WHrpbta6wklnUV9dr9FUtoAHmB3p3LeXEC+ZjgHvB0Dzg==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz", + "integrity": "sha512-IuaLjruM0vMKhUUT51fQdQzBYTX49dLj8w68ALEAe2A4iYNpIC4eMac67mt3NzycvjOlf07/kYxJDc0RTl1Wqw==", "dev": true, "requires": { "loader-utils": "^1.1.0", @@ -8055,7 +8314,7 @@ "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -8063,7 +8322,7 @@ }, "minimist": { "version": "0.0.8", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true }, @@ -8126,7 +8385,7 @@ }, "mkdirp": { "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { @@ -8233,256 +8492,83 @@ "dev": true }, "neo-async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", - "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", - "dev": true - }, - "netmask": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz", - "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=", - "dev": true, - "optional": true - }, - "ng2-charts": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ng2-charts/-/ng2-charts-1.6.0.tgz", - "integrity": "sha512-9w0WH69x5/nuqC1og2WaY39NbaBqTGIP1+5gZaH7/KPN6UEPonNg/pYnsIVklLj1DWPWXKa8+XXIJZ1jy5nLxg==", - "requires": { - "chart.js": "^2.6.0" - } - }, - "ngx-markdown": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ngx-markdown/-/ngx-markdown-1.6.0.tgz", - "integrity": "sha512-roFZyUKtdMB32V2pG8c/SAuM+mTL9EM79VAzGtDOaF3FIJJiknXADV/wF/yV9rQgnGi00vte7ksAkEs+/PMcpw==", - "requires": { - "@types/marked": "0.3.0", - "@types/prismjs": "^1.9.0", - "marked": "^0.3.19", - "prismjs": "^1.14.0" - } - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-forge": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", - "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==", - "dev": true - }, - "node-gyp": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", - "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", - "dev": true, - "optional": true, - "requires": { - "fstream": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", - "request": "^2.87.0", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^2.0.0", - "which": "1" - }, - "dependencies": { - "ajv": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz", - "integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==", - "dev": true, - "optional": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true, - "optional": true - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true, - "optional": true - }, - "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==", - "dev": true, - "optional": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true, - "optional": true - }, - "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==", - "dev": true, - "optional": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", - "dev": true - }, - "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", - "dev": true, - "requires": { - "mime-db": "~1.37.0" - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "optional": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true, - "optional": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true, - "optional": true - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "optional": true, - "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" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "optional": true - }, + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", + "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", + "dev": true + }, + "netmask": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz", + "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=", + "dev": true, + "optional": true + }, + "ng2-charts": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ng2-charts/-/ng2-charts-1.6.0.tgz", + "integrity": "sha512-9w0WH69x5/nuqC1og2WaY39NbaBqTGIP1+5gZaH7/KPN6UEPonNg/pYnsIVklLj1DWPWXKa8+XXIJZ1jy5nLxg==", + "requires": { + "chart.js": "^2.6.0" + } + }, + "ngx-markdown": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ngx-markdown/-/ngx-markdown-1.6.0.tgz", + "integrity": "sha512-roFZyUKtdMB32V2pG8c/SAuM+mTL9EM79VAzGtDOaF3FIJJiknXADV/wF/yV9rQgnGi00vte7ksAkEs+/PMcpw==", + "requires": { + "@types/marked": "0.3.0", + "@types/prismjs": "^1.9.0", + "marked": "^0.3.19", + "prismjs": "^1.14.0" + } + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-forge": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", + "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==", + "dev": true + }, + "node-gyp": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "dev": true, + "optional": true, + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { "semver": { "version": "5.3.0", "resolved": "http://registry.npmjs.org/semver/-/semver-5.3.0.tgz", "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", "dev": true, "optional": true - }, - "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==", - "dev": true, - "optional": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true, - "optional": true } } }, "node-libs-browser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", - "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz", + "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==", "dev": true, "requires": { "assert": "^1.1.1", @@ -8492,7 +8578,7 @@ "constants-browserify": "^1.0.0", "crypto-browserify": "^3.11.0", "domain-browser": "^1.1.1", - "events": "^1.0.0", + "events": "^3.0.0", "https-browserify": "^1.0.0", "os-browserify": "^0.3.0", "path-browserify": "0.0.0", @@ -8506,23 +8592,34 @@ "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", "url": "^0.11.0", - "util": "^0.10.3", + "util": "^0.11.0", "vm-browserify": "0.0.4" + }, + "dependencies": { + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + } } }, "node-releases": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.0.4.tgz", - "integrity": "sha512-GqRV9GcHw8JCRDaP/JoeNMNzEGzHAknMvIHqMb2VeTOmg1Cf9+ej8bkV12tHfzWHQMCkQ5zUFgwFUkfraynNCw==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.13.tgz", + "integrity": "sha512-fKZGviSXR6YvVPyc011NHuJDSD8gFQvLPmc2d2V3BS4gr52ycyQ1Xzs7a8B+Ax3Ni/W+5h1h4SqmzeoA8WZRmA==", "dev": true, "requires": { "semver": "^5.3.0" } }, "node-sass": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.3.tgz", - "integrity": "sha512-XzXyGjO+84wxyH7fV6IwBOTrEBe2f0a6SBze9QWWYR/cL74AcQUks2AsqcCZenl/Fp/JVbuEaLpgrLtocwBUww==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.11.0.tgz", + "integrity": "sha512-bHUdHTphgQJZaF1LASx0kAviPH7sGlcyNhWade4eVIpFp6tsn7SV8xNMTbsQFpEV9VXpnwTTnNYlfsZXgGgmkA==", "dev": true, "optional": true, "requires": { @@ -8541,25 +8638,12 @@ "nan": "^2.10.0", "node-gyp": "^3.8.0", "npmlog": "^4.0.0", - "request": "2.87.0", + "request": "^2.88.0", "sass-graph": "^2.2.4", "stdout-stream": "^1.4.0", "true-case-path": "^1.0.2" }, "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "optional": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -8567,20 +8651,6 @@ "dev": true, "optional": true }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true, - "optional": true - }, "chalk": { "version": "1.1.3", "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", @@ -8595,105 +8665,6 @@ "supports-color": "^2.0.0" } }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true, - "optional": true - }, - "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==", - "dev": true, - "optional": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true, - "optional": true - }, - "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", - "dev": true, - "optional": true, - "requires": { - "ajv": "^5.1.0", - "har-schema": "^2.0.0" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true, - "optional": true - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true, - "optional": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true, - "optional": true - }, - "request": { - "version": "2.87.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", - "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.6.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.1", - "forever-agent": "~0.6.1", - "form-data": "~2.3.1", - "har-validator": "~5.0.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.17", - "oauth-sign": "~0.8.2", - "performance-now": "^2.1.0", - "qs": "~6.5.1", - "safe-buffer": "^5.1.1", - "tough-cookie": "~2.3.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.1.0" - } - }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -8747,13 +8718,15 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz", "integrity": "sha1-ecSQihwPXzdbc/6IjamCj23JY6Q=", - "dev": true + "dev": true, + "optional": true }, "nodemailer-shared": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz", "integrity": "sha1-z1mU4v0mjQD1zw+nZ6CBae2wfsA=", "dev": true, + "optional": true, "requires": { "nodemailer-fetch": "1.6.0" } @@ -8786,13 +8759,15 @@ "version": "0.1.10", "resolved": "https://registry.npmjs.org/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz", "integrity": "sha1-WG24EB2zDLRDjrVGc3pBqtDPE9U=", - "dev": true + "dev": true, + "optional": true }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, + "optional": true, "requires": { "abbrev": "1" } @@ -8878,6 +8853,7 @@ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, + "optional": true, "requires": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", @@ -8916,7 +8892,8 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -8969,16 +8946,6 @@ } } }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - } - }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -9012,9 +8979,9 @@ } }, "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "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==", "dev": true }, "once": { @@ -9059,6 +9026,7 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, + "optional": true, "requires": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.4", @@ -9072,7 +9040,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true + "dev": true, + "optional": true } } }, @@ -9104,14 +9073,13 @@ "dev": true }, "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dev": true, + "optional": true, "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" + "lcid": "^1.0.0" } }, "os-tmpdir": { @@ -9143,9 +9111,9 @@ "dev": true }, "p-is-promise": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz", + "integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==", "dev": true }, "p-limit": { @@ -9200,6 +9168,7 @@ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", "dev": true, + "optional": true, "requires": { "es6-promisify": "^5.0.0" } @@ -9209,6 +9178,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, + "optional": true, "requires": { "ms": "2.0.0" } @@ -9252,9 +9222,9 @@ } }, "pako": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", "dev": true }, "parallel-transform": { @@ -9264,50 +9234,22 @@ "dev": true, "requires": { "cyclist": "~0.2.2", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "parse-asn1": { - "version": "5.1.1", - "resolved": "http://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", - "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", - "dev": true, - "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - } + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "parse-asn1": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", + "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", + "dev": true, + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" } }, "parse-json": { @@ -9394,7 +9336,7 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, @@ -9442,12 +9384,12 @@ "dev": true }, "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { - "pify": "^2.0.0" + "pify": "^3.0.0" } }, "pbkdf2": { @@ -9463,16 +9405,10 @@ "sha.js": "^2.4.8" } }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", - "dev": true - }, "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, "pinkie": { @@ -9500,9 +9436,9 @@ } }, "portfinder": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.17.tgz", - "integrity": "sha512-syFcRIRzVI1BoEFOCaAiizwDolh1S1YXSodsVhncbhjzjZQulhczNRbqnUl9N31Q4dKGOXsNDqxC2BWBgSMqeQ==", + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz", + "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==", "dev": true, "requires": { "async": "^1.5.2", @@ -9525,16 +9461,38 @@ "dev": true }, "postcss": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.5.tgz", - "integrity": "sha512-HBNpviAUFCKvEh7NZhw1e8MBPivRszIiUnhrJ+sBFVSYSqubrzwX3KG51mYgcRHX8j/cAgZJedONZcm5jTBdgQ==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz", + "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==", "dev": true, "requires": { - "chalk": "^2.4.1", + "chalk": "^2.4.2", "source-map": "^0.6.1", - "supports-color": "^5.5.0" + "supports-color": "^6.1.0" }, "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -9548,9 +9506,9 @@ "dev": true }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -9559,9 +9517,9 @@ } }, "postcss-import": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.0.tgz", - "integrity": "sha512-3KqKRZcaZAvxbY8DVLdd81tG5uKzbUQuiWIvy0o0fzEC42bKacqPYFWbfCQyw6L4LWUaqPz/idvIdbhpgQ32eQ==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz", + "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==", "dev": true, "requires": { "postcss": "^7.0.1", @@ -9602,13 +9560,8 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true + "dev": true, + "optional": true }, "prismjs": { "version": "1.15.0", @@ -9798,6 +9751,7 @@ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", "dev": true, + "optional": true, "requires": { "es6-promisify": "^5.0.0" } @@ -9807,6 +9761,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, + "optional": true, "requires": { "ms": "2.0.0" } @@ -9855,11 +9810,10 @@ "dev": true }, "psl": { - "version": "1.1.29", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", - "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", - "dev": true, - "optional": true + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", + "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", + "dev": true }, "public-encrypt": { "version": "4.0.3", @@ -9922,12 +9876,6 @@ "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", "dev": true }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "dev": true - }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -9941,40 +9889,15 @@ "dev": true }, "querystringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz", - "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", "dev": true }, - "randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "dev": true, - "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - } - } - }, "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { "safe-buffer": "^5.1.0" @@ -10035,10 +9958,14 @@ } }, "raw-loader": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", - "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-1.0.0.tgz", + "integrity": "sha512-Uqy5AqELpytJTRxYT4fhltcKPj0TyaEpzJDcGz7DFJi+pQOOi3GjR/DOdxTkTsF+NzhnldIoG6TORaBlInUuqA==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "schema-utils": "^1.0.0" + } }, "read-cache": { "version": "1.0.0", @@ -10047,27 +9974,81 @@ "dev": true, "requires": { "pify": "^2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } } }, "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, + "optional": true, "requires": { - "load-json-file": "^2.0.0", + "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" + "path-type": "^1.0.0" + }, + "dependencies": { + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "optional": true + } } }, "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=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, + "optional": true, "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "optional": true, + "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=", + "dev": true, + "optional": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + } } }, "readable-stream": { @@ -10144,9 +10125,9 @@ "optional": true }, "reflect-metadata": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.12.tgz", - "integrity": "sha512-n+IyV+nGz3+0q3/Yf1ra12KpCyi001bi4XFxSjbiWWjfqb52iTTtpGXmCCAOWWIAn9KEuFZKGqBERHmrtScZ3A==", + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", "dev": true }, "regenerate": { @@ -10161,15 +10142,6 @@ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", "dev": true }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -10193,7 +10165,7 @@ }, "regjsgen": { "version": "0.2.0", - "resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", "dev": true }, @@ -10208,69 +10180,192 @@ "dependencies": { "jsesc": { "version": "0.5.0", - "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true } } }, - "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=", - "dev": true - }, - "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "dev": true, - "requires": { - "aws-sign2": "~0.6.0", - "aws4": "^1.2.1", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.0", - "forever-agent": "~0.6.1", - "form-data": "~2.1.1", - "har-validator": "~4.2.1", - "hawk": "~3.1.3", - "http-signature": "~1.1.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.7", - "oauth-sign": "~0.8.1", - "performance-now": "^0.2.0", - "qs": "~6.4.0", - "safe-buffer": "^5.0.1", - "stringstream": "~0.0.4", - "tough-cookie": "~2.3.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.0.0" - } - }, + "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=", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "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": { + "ajv": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "mime-db": { + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", + "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==", + "dev": true + }, + "mime-types": { + "version": "2.1.22", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", + "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", + "dev": true, + "requires": { + "mime-db": "~1.38.0" + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + } + } + }, "requestretry": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/requestretry/-/requestretry-1.13.0.tgz", @@ -10461,143 +10556,6 @@ "lodash": "^4.0.0", "scss-tokenizer": "^0.2.3", "yargs": "^7.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "optional": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "os-locale": { - "version": "1.4.0", - "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "optional": true, - "requires": { - "lcid": "^1.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "optional": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "optional": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "optional": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "optional": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true, - "optional": true - }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, - "optional": true, - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" - } - }, - "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "optional": true, - "requires": { - "camelcase": "^3.0.0" - } - } } }, "sass-loader": { @@ -10612,14 +10570,6 @@ "neo-async": "^2.5.0", "pify": "^3.0.0", "semver": "^5.5.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } } }, "saucelabs": { @@ -10769,9 +10719,9 @@ } }, "serialize-javascript": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz", - "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", + "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==", "dev": true }, "serve-index": { @@ -10943,6 +10893,7 @@ "resolved": "https://registry.npmjs.org/smtp-connection/-/smtp-connection-2.12.0.tgz", "integrity": "sha1-1275EnyyPCJZ7bHoNJwujV4tdME=", "dev": true, + "optional": true, "requires": { "httpntlm": "1.6.1", "nodemailer-shared": "1.1.0" @@ -11061,6 +11012,7 @@ "resolved": "http://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", "dev": true, + "optional": true, "requires": { "hoek": "2.x.x" } @@ -11145,19 +11097,28 @@ } }, "sockjs-client": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.5.tgz", - "integrity": "sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", + "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", "dev": true, "requires": { - "debug": "^2.6.6", - "eventsource": "0.1.6", - "faye-websocket": "~0.11.0", - "inherits": "^2.0.1", + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", "json3": "^3.3.2", - "url-parse": "^1.1.8" + "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==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, "faye-websocket": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", @@ -11166,6 +11127,12 @@ "requires": { "websocket-driver": ">=0.5.1" } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true } } }, @@ -11310,38 +11277,90 @@ "dev": true }, "spdy": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", - "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz", + "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==", "dev": true, "requires": { - "debug": "^2.6.8", - "handle-thing": "^1.2.5", + "debug": "^4.1.0", + "handle-thing": "^2.0.0", "http-deceiver": "^1.2.7", - "safe-buffer": "^5.0.1", "select-hose": "^2.0.0", - "spdy-transport": "^2.0.18" + "spdy-transport": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } } }, "spdy-transport": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.1.1.tgz", - "integrity": "sha512-q7D8c148escoB3Z7ySCASadkegMmUZW8Wb/Q1u0/XBgDKMO880rLQDj8Twiew/tYi7ghemKUi/whSYOwE17f5Q==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, "requires": { - "debug": "^2.6.8", - "detect-node": "^2.0.3", + "debug": "^4.1.0", + "detect-node": "^2.0.4", "hpack.js": "^2.1.6", - "obuf": "^1.1.1", - "readable-stream": "^2.2.9", - "safe-buffer": "^5.0.1", - "wbuf": "^1.7.2" + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "readable-stream": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", + "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "string_decoder": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", + "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "speed-measure-webpack-plugin": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.2.3.tgz", - "integrity": "sha512-p+taQ69VkRUXYMoZOx2nxV/Tz8tt79ahctoZJyJDHWP7fEYvwFNf5Pd73k5kZ6auu0pTsPNLEUwWpM8mCk85Zw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.1.tgz", + "integrity": "sha512-qVIkJvbtS9j/UeZumbdfz0vg+QfG/zxonAjzefZrqzkr7xOncLVXkeGbTpzd1gjCBM4PmVNkWlkeTVhgskAGSQ==", "dev": true, "requires": { "chalk": "^2.0.1" @@ -11442,9 +11461,9 @@ } }, "stream-browserify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", "dev": true, "requires": { "inherits": "~2.0.1", @@ -11553,7 +11572,8 @@ "version": "0.0.5", "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true + "dev": true, + "optional": true }, "strip-ansi": { "version": "3.0.1", @@ -11565,10 +11585,13 @@ } }, "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } }, "strip-eof": { "version": "1.0.0", @@ -11593,25 +11616,13 @@ "dev": true }, "style-loader": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.0.tgz", - "integrity": "sha512-uCcN7XWHkqwGVt7skpInW6IGO1tG6ReyFQ1Cseh0VcN6VdcFQi62aG/2F3Y9ueA8x4IVlfaSUxpmQXQD9QrEuQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", + "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==", "dev": true, "requires": { "loader-utils": "^1.1.0", - "schema-utils": "^0.4.5" - }, - "dependencies": { - "schema-utils": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", - "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" - } - } + "schema-utils": "^1.0.0" } }, "stylus": { @@ -11680,9 +11691,9 @@ "dev": true }, "tapable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.0.tgz", - "integrity": "sha512-IlqtmLVaZA2qab8epUXbVWRn3aB1imbDMJtjB3nu4X0NqPkcY/JH9ZtCBWKHWPxs8Svi9tyo8w2dBoi07qZbBA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", + "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==", "dev": true }, "tar": { @@ -11698,20 +11709,20 @@ } }, "terser": { - "version": "3.10.12", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.10.12.tgz", - "integrity": "sha512-3ODPC1eVt25EVNb04s/PkHxOmzKBQUF6bwwuR6h2DbEF8/j265Y1UkwNtOk9am/pRxfJ5HPapOlUlO6c16mKQQ==", + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", + "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", "dev": true, "requires": { - "commander": "~2.17.1", + "commander": "^2.19.0", "source-map": "~0.6.1", - "source-map-support": "~0.5.6" + "source-map-support": "~0.5.10" }, "dependencies": { "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", "dev": true }, "source-map": { @@ -11721,9 +11732,9 @@ "dev": true }, "source-map-support": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", - "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.11.tgz", + "integrity": "sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -11733,9 +11744,9 @@ } }, "terser-webpack-plugin": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.1.0.tgz", - "integrity": "sha512-61lV0DSxMAZ8AyZG7/A4a3UPlrbOBo8NIQ4tJzLPAdGOQ+yoNC7l5ijEow27lBAL2humer01KLS6bGIMYQxKoA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.2.tgz", + "integrity": "sha512-1DMkTk286BzmfylAvLXwpJrI7dWa5BnFmscV/2dCr8+c56egFcbaeFAl7+sujAjdmpLam21XRdhA4oifLyiWWg==", "dev": true, "requires": { "cacache": "^11.0.2", @@ -11743,41 +11754,47 @@ "schema-utils": "^1.0.0", "serialize-javascript": "^1.4.0", "source-map": "^0.6.1", - "terser": "^3.8.1", + "terser": "^3.16.1", "webpack-sources": "^1.1.0", "worker-farm": "^1.5.2" }, "dependencies": { + "bluebird": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.4.tgz", + "integrity": "sha512-FG+nFEZChJrbQ9tIccIfZJBz3J7mLrAhxakAbnrJWn8d7aKOC+LWifa0G+p4ZqKp4y13T7juYvdhq9NzKdsrjw==", + "dev": true + }, "cacache": { - "version": "11.3.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.1.tgz", - "integrity": "sha512-2PEw4cRRDu+iQvBTTuttQifacYjLPhET+SYO/gEFMy8uhi+jlJREDAjSF5FWSdV/Aw5h18caHA7vMTw2c+wDzA==", + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", + "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", "dev": true, "requires": { - "bluebird": "^3.5.1", - "chownr": "^1.0.1", - "figgy-pudding": "^3.1.0", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.3", + "bluebird": "^3.5.3", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.3", + "graceful-fs": "^4.1.15", + "lru-cache": "^5.1.1", "mississippi": "^3.0.0", "mkdirp": "^0.5.1", "move-concurrently": "^1.0.1", "promise-inflight": "^1.0.1", "rimraf": "^2.6.2", - "ssri": "^6.0.0", - "unique-filename": "^1.1.0", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", "y18n": "^4.0.0" } }, "find-cache-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.0.0.tgz", - "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, "requires": { "commondir": "^1.0.1", - "make-dir": "^1.0.0", + "make-dir": "^2.0.0", "pkg-dir": "^3.0.0" } }, @@ -11790,6 +11807,26 @@ "locate-path": "^3.0.0" } }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true + }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", @@ -11801,15 +11838,24 @@ } }, "lru-cache": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.4.tgz", - "integrity": "sha512-EPstzZ23znHUVLKj+lcXO1KvZkrlw+ZirdwvOmnAnA/1PB4ggyXJ77LRkCqkff+ShQ+cqoxCxLQOh4cKITO5iA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "requires": { - "pseudomap": "^1.0.2", "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==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, "mississippi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", @@ -11829,9 +11875,9 @@ } }, "p-limit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", - "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -11847,9 +11893,15 @@ } }, "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, "pkg-dir": { @@ -11871,6 +11923,12 @@ "once": "^1.3.1" } }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -11886,12 +11944,6 @@ "figgy-pudding": "^3.5.1" } }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, "yallist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", @@ -11902,7 +11954,7 @@ }, "through": { "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, @@ -12051,14 +12103,15 @@ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "dev": true, + "optional": true, "requires": { "punycode": "^1.4.1" } }, "tree-kill": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.0.tgz", - "integrity": "sha512-DlX6dR0lOIRDFxI0mjL9IYg6OTncLm/Zt+JiBhE5OlFcAR8yc9S7FFXU9so0oda47frdM/JFsk7UjNt9vscKcg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.1.tgz", + "integrity": "sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q==", "dev": true }, "trim-newlines": { @@ -12287,6 +12340,7 @@ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, + "optional": true, "requires": { "prelude-ls": "~1.1.2" } @@ -12313,29 +12367,10 @@ "integrity": "sha512-tDMYfVtvpb96msS1lDX9MEdHrW4yOuZ4Kdc4Him9oU796XldPYF/t2+uKoX0BBa0hXXwDlqYQbXY5Rzjzc5hBA==", "dev": true }, - "uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", - "dev": true, - "requires": { - "commander": "~2.13.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } + "typescript-map": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/typescript-map/-/typescript-map-0.0.7.tgz", + "integrity": "sha512-qLGAeshAnryHN1ycLS4nk+7195MYXbrCzI62bXl8TEqigD5otgHUGIdWsdn5MsbAX3ba5ZtkKEAM0LgaVUAdnQ==" }, "uglify-to-browserify": { "version": "1.0.2", @@ -12344,40 +12379,6 @@ "dev": true, "optional": true }, - "uglifyjs-webpack-plugin": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz", - "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==", - "dev": true, - "requires": { - "cacache": "^10.0.4", - "find-cache-dir": "^1.0.0", - "schema-utils": "^0.4.5", - "serialize-javascript": "^1.4.0", - "source-map": "^0.6.1", - "uglify-es": "^3.3.4", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" - }, - "dependencies": { - "schema-utils": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", - "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.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==", - "dev": true - } - } - }, "ultron": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", @@ -12388,7 +12389,8 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", - "dev": true + "dev": true, + "optional": true }, "union-value": { "version": "1.0.0", @@ -12542,12 +12544,6 @@ } } }, - "url-join": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", - "integrity": "sha1-TTNA6AfTdzvamZH4MFrNzCpmXSo=", - "dev": true - }, "url-parse": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", @@ -12612,9 +12608,9 @@ "dev": true }, "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha1-EsUou51Y0LkmXZovbw/ovhf/HxQ=", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", "dev": true }, "uws": { @@ -12782,17 +12778,17 @@ } }, "webpack": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.19.1.tgz", - "integrity": "sha512-j7Q/5QqZRqIFXJvC0E59ipLV5Hf6lAnS3ezC3I4HMUybwEDikQBVad5d+IpPtmaQPQArvgUZLXIN6lWijHBn4g==", + "version": "4.29.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.29.0.tgz", + "integrity": "sha512-pxdGG0keDBtamE1mNvT5zyBdx+7wkh6mh7uzMOo/uRQ/fhsdj5FXkh/j5mapzs060forql1oXqXN9HJGju+y7w==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-module-context": "1.7.6", - "@webassemblyjs/wasm-edit": "1.7.6", - "@webassemblyjs/wasm-parser": "1.7.6", - "acorn": "^5.6.2", - "acorn-dynamic-import": "^3.0.0", + "@webassemblyjs/ast": "1.7.11", + "@webassemblyjs/helper-module-context": "1.7.11", + "@webassemblyjs/wasm-edit": "1.7.11", + "@webassemblyjs/wasm-parser": "1.7.11", + "acorn": "^6.0.5", + "acorn-dynamic-import": "^4.0.0", "ajv": "^6.1.0", "ajv-keywords": "^3.1.0", "chrome-trace-event": "^1.0.0", @@ -12808,9 +12804,9 @@ "node-libs-browser": "^2.0.0", "schema-utils": "^0.4.4", "tapable": "^1.1.0", - "uglifyjs-webpack-plugin": "^1.2.4", + "terser-webpack-plugin": "^1.1.0", "watchpack": "^1.5.0", - "webpack-sources": "^1.2.0" + "webpack-sources": "^1.3.0" }, "dependencies": { "schema-utils": { @@ -12853,31 +12849,29 @@ } }, "webpack-dev-middleware": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.3.0.tgz", - "integrity": "sha512-5C5gXtOo1I6+0AEg4UPglYEtu3Rai6l5IiO6aUu65scHXz29dc3oIWMiRwvcNLXgL0HwRkRxa9N02ZjFt4hY8w==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.5.1.tgz", + "integrity": "sha512-4dwCh/AyMOYAybggUr8fiCkRnjVDp+Cqlr9c+aaNB3GJYgRGYQWJ1YX/WAKUNA9dPNHZ6QSN2lYDKqjKSI8Vqw==", "dev": true, "requires": { - "loud-rejection": "^1.6.0", "memory-fs": "~0.4.1", "mime": "^2.3.1", "range-parser": "^1.0.3", - "url-join": "^4.0.0", "webpack-log": "^2.0.0" }, "dependencies": { "mime": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", - "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", + "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", "dev": true } } }, "webpack-dev-server": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.8.tgz", - "integrity": "sha512-c+tcJtDqnPdxCAzEEZKdIPmg3i5i7cAHe+B+0xFNK0BlCc2HF/unYccbU7xTgfGc5xxhCztCQzFmsqim+KhI+A==", + "version": "3.1.14", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.14.tgz", + "integrity": "sha512-mGXDgz5SlTxcF3hUpfC8hrQ11yhAttuUQWf1Wmb+6zo3x6rb7b9mIfuQvAPLdfDRCGRGvakBWHdHOa0I9p/EVQ==", "dev": true, "requires": { "ansi-html": "0.0.7", @@ -12899,13 +12893,15 @@ "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.1.5", - "spdy": "^3.4.1", + "sockjs-client": "1.3.0", + "spdy": "^4.0.0", "strip-ansi": "^3.0.0", "supports-color": "^5.1.0", - "webpack-dev-middleware": "3.2.0", + "url": "^0.11.0", + "webpack-dev-middleware": "3.4.0", "webpack-log": "^2.0.0", "yargs": "12.0.2" }, @@ -12916,6 +12912,12 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, "cliui": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", @@ -12970,13 +12972,13 @@ } }, "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", + "get-stream": "^4.0.0", "is-stream": "^1.1.0", "npm-run-path": "^2.0.0", "p-finally": "^1.0.0", @@ -12993,6 +12995,15 @@ "locate-path": "^3.0.0" } }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -13031,20 +13042,26 @@ } }, "mem": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", - "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", "dev": true, "requires": { "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^1.1.0" + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" } }, "mime": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", - "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", + "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "ms": { @@ -13054,20 +13071,20 @@ "dev": true }, "os-locale": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.0.1.tgz", - "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", + "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==", "dev": true, "requires": { - "execa": "^0.10.0", + "execa": "^1.0.0", "lcid": "^2.0.0", "mem": "^4.0.0" } }, "p-limit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", - "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", + "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -13083,9 +13100,25 @@ } }, "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", "dev": true }, "string-width": { @@ -13119,20 +13152,23 @@ } }, "webpack-dev-middleware": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.2.0.tgz", - "integrity": "sha512-YJLMF/96TpKXaEQwaLEo+Z4NDK8aV133ROF6xp9pe3gQoS7sxfpXh4Rv9eC+8vCvWfmDjRQaMSlRPbO+9G6jgA==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz", + "integrity": "sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==", "dev": true, "requires": { - "loud-rejection": "^1.6.0", "memory-fs": "~0.4.1", "mime": "^2.3.1", - "path-is-absolute": "^1.0.0", "range-parser": "^1.0.3", - "url-join": "^4.0.0", "webpack-log": "^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=", + "dev": true + }, "xregexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", @@ -13178,29 +13214,21 @@ "requires": { "ansi-colors": "^3.0.0", "uuid": "^3.3.2" - }, - "dependencies": { - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - } } }, "webpack-merge": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.4.tgz", - "integrity": "sha512-TmSe1HZKeOPey3oy1Ov2iS3guIZjWvMT2BBJDzzT5jScHTjVC3mpjJofgueEzaEd6ibhxRDD6MIblDr8tzh8iQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.1.tgz", + "integrity": "sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw==", "dev": true, "requires": { "lodash": "^4.17.5" } }, "webpack-sources": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.2.0.tgz", - "integrity": "sha512-9BZwxR85dNsjWz3blyxdOhTgtnQvv3OEs5xofI0wPYTwu5kaWxS08UuD1oI7WLBLpRO+ylf0ofnXLXWmGb2WMw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", + "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", "dev": true, "requires": { "source-list-map": "^2.0.0", @@ -13256,16 +13284,18 @@ } }, "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true, + "optional": true }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, + "optional": true, "requires": { "string-width": "^1.0.2 || 2" } @@ -13370,9 +13400,9 @@ "dev": true }, "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true }, "yallist": { @@ -13382,66 +13412,60 @@ "dev": true }, "yargs": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", - "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", "dev": true, + "optional": true, "requires": { - "camelcase": "^4.1.0", + "camelcase": "^3.0.0", "cliui": "^3.2.0", "decamelize": "^1.1.1", "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "read-pkg-up": "^2.0.0", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", "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", + "string-width": "^1.0.2", + "which-module": "^1.0.0", "y18n": "^3.2.1", - "yargs-parser": "^7.0.0" + "yargs-parser": "^5.0.0" }, "dependencies": { - "ansi-regex": { + "camelcase": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } + "optional": true }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } + "optional": true } } }, "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", "dev": true, + "optional": true, "requires": { - "camelcase": "^4.1.0" + "camelcase": "^3.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true, + "optional": true + } } }, "yeast": { diff --git a/package.json b/package.json index 4e9dac24b66b338b20473d923a369efcdef99a18..4faf263ca093a23a7efb09d3729d68fe758c8544 100644 --- a/package.json +++ b/package.json @@ -37,18 +37,19 @@ "rxjs": "^6.3.3", "rxjs-compat": "^6.2.2", "tslint-eslint-rules": "^5.3.1", + "typescript-map": "0.0.7", "zone.js": "^0.8.26" }, "devDependencies": { - "@angular-devkit/build-angular": "~0.10.0", + "@angular-devkit/build-angular": "^0.13.7", "@angular/cli": "7.0.6", - "@angular/compiler-cli": "7.1.0", + "@angular/compiler-cli": "^7.2.11", "@angular/language-service": "7.1.0", "@biesbjerg/ngx-translate-extract": "^2.3.4", "@types/jasmine": "^2.8.8", "@types/jasminewd2": "~2.0.2", "@types/node": "^6.0.116", - "codelyzer": "^4.4.4", + "codelyzer": "^4.5.0", "jasmine-core": "~2.8.0", "jasmine-spec-reporter": "~4.2.1", "karma": "^2.0.5", diff --git a/proxy.conf.json b/proxy.conf.json index c2e9c8823311057960824399f18aafc86f7620a9..93cc54a82c5dae28c32ca7e3deb83c19663e8fe4 100644 --- a/proxy.conf.json +++ b/proxy.conf.json @@ -1,4 +1,12 @@ { + "/api/comment": { + "target": "http://localhost:8088", + "secure": false, + "pathRewrite": { + "^/api": "" + }, + "logLevel": "debug" + }, "/api": { "target": "http://localhost:8080", "secure": false, diff --git a/src/app/app.component.html b/src/app/app.component.html index b86ef90e22afcc573488a94b2a31092e5d3f795c..e69c12c153e2dd6e94d1dad08fa97d2254db4820 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -1,7 +1,7 @@ -<div fxLayout="column" fxFill> - <app-header></app-header> - <div fxFlex class="app-component"> - <router-outlet></router-outlet> + <div fxLayout="column" fxFill appTheme> + <app-header #header></app-header> + <div fxFlex class="app-component"> + <router-outlet></router-outlet> + </div> + <app-footer></app-footer> </div> - <app-footer></app-footer> -</div> diff --git a/src/app/app.component.scss b/src/app/app.component.scss index 23f30f8823f78bc2ff012e22dfa0f15a82ec9f7a..046919174d5af1f047768ca34bc8c6b79e2e1532 100644 --- a/src/app/app.component.scss +++ b/src/app/app.component.scss @@ -1,8 +1,6 @@ -@import '../theme/_variables.scss'; +@import '../theme/default-Theme/_variables.scss'; .app-component { padding: 4%; - background-color: #b2dfdb; + background-color:var(--background); } - - diff --git a/src/app/app.component.ts b/src/app/app.component.ts index aae1fa0a69aeddecb214bb15270b559cdce4dea5..39c8d57d7b6e576f503beaa91ccd1d6b777e7f7e 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,5 +1,6 @@ import { Component } from '@angular/core'; import { TranslateService } from '@ngx-translate/core'; +import { ThemeService } from '../theme/theme.service'; @Component({ selector: 'app-root', @@ -8,7 +9,8 @@ import { TranslateService } from '@ngx-translate/core'; }) export class AppComponent { - constructor(private translationService: TranslateService) { + constructor(private translationService: TranslateService, + private themeService: ThemeService) { translationService.setDefaultLang(this.translationService.getBrowserLang()); sessionStorage.setItem('currentLang', this.translationService.getBrowserLang()); diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 83012f4e168b12ce0e6b307ecedbef84c896e323..30c5ab13ffaff929b5963d9c28c31b7c37ce4af3 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -14,6 +14,7 @@ import { CommentService } from './services/http/comment.service'; import { DataStoreService } from './services/util/data-store.service'; import { ContentService } from './services/http/content.service'; import { ContentAnswerService } from './services/http/content-answer.service'; +import { WsConnectorService } from './services/websockets/ws-connector.service'; import { UserActivationComponent } from './components/home/_dialogs/user-activation/user-activation.component'; import { AuthenticationInterceptor } from './interceptors/authentication.interceptor'; import { EssentialsModule } from './components/essentials/essentials.module'; @@ -24,9 +25,8 @@ import { LanguageService } from './services/util/language.service'; import { MarkdownService, MarkedOptions } from 'ngx-markdown'; import { NewLandingComponent } from './components/home/new-landing/new-landing.component'; import { HomePageComponent } from './components/home/home-page/home-page.component'; -import { InjectableRxStompConfig, RxStompService, rxStompServiceFactory } from '@stomp/ng2-stompjs'; -import { myRxStompConfig } from './rx-stomp.config'; import { AppConfig } from './app.config'; +import { ThemeModule } from '../theme/theme.module'; export function dialogClose(dialogResult: any) { } @@ -54,7 +54,8 @@ export function initializeApp(appConfig: AppConfig) { BrowserModule, BrowserAnimationsModule, EssentialsModule, - SharedModule + SharedModule, + ThemeModule ], providers: [ AppConfig, @@ -67,15 +68,7 @@ export function initializeApp(appConfig: AppConfig) { useClass: AuthenticationInterceptor, multi: true }, - { - provide: InjectableRxStompConfig, - useValue: myRxStompConfig - }, - { - provide: RxStompService, - useFactory: rxStompServiceFactory, - deps: [InjectableRxStompConfig] - }, + WsConnectorService, NotificationService, AuthenticationService, AuthenticationGuard, @@ -88,6 +81,7 @@ export function initializeApp(appConfig: AppConfig) { MarkdownService, MarkedOptions, UserService, + WsConnectorService, { provide: MatDialogRef, useValue: { diff --git a/src/app/components/creator/_dialogs/comment-export/comment-export.component.html b/src/app/components/creator/_dialogs/comment-export/comment-export.component.html new file mode 100644 index 0000000000000000000000000000000000000000..29c5e5b78b517356c5e60c4cd3bb29116a16c1b4 --- /dev/null +++ b/src/app/components/creator/_dialogs/comment-export/comment-export.component.html @@ -0,0 +1,14 @@ +<div fxLayout="column" fxLayoutAlign="center center" fxLayoutGap="35px"> + <h3>{{'comment-page.delimiter' | translate}}</h3> + <mat-radio-group [(ngModel)]="exportType"> + <div fxLayout="column"> + <mat-radio-button value="comma" checked><h4>{{'comment-page.comma' | translate}}</h4></mat-radio-button> + <mat-radio-button value="semicolon"><h4>{{'comment-page.semicolon' | translate}}</h4></mat-radio-button> + </div> + </mat-radio-group> + <div fxLayout="row" fxLayoutAlign="center center" fxLayoutGap="20px"> + <button mat-raised-button color="warn" (click)="onNoClick()">{{'comment-page.abort' | translate}}</button> + <button mat-raised-button color="primary" + (click)="onExport(exportType)">{{'comment-page.export' | translate}}</button> + </div> +</div> diff --git a/src/app/components/creator/_dialogs/comment-export/comment-export.component.scss b/src/app/components/creator/_dialogs/comment-export/comment-export.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..abe40e414eb4880fc99fe8157869a450bb5b089d --- /dev/null +++ b/src/app/components/creator/_dialogs/comment-export/comment-export.component.scss @@ -0,0 +1,12 @@ +button { + min-width: 100px; +} + +h3 { + font-size: large; + color: var(--text-2); +} + +h4 { + margin: 15px 0 15px 0; +} diff --git a/src/app/components/creator/_dialogs/comment-export/comment-export.component.spec.ts b/src/app/components/creator/_dialogs/comment-export/comment-export.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..e0df83fd5c0e5afcf5d765ad18859ef705b0df9e --- /dev/null +++ b/src/app/components/creator/_dialogs/comment-export/comment-export.component.spec.ts @@ -0,0 +1,25 @@ +/** import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { CommentExportComponent } from './comment-export.component'; + +describe('CommentExportComponent', () => { + let component: CommentExportComponent; + let fixture: ComponentFixture<CommentExportComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ CommentExportComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(CommentExportComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); */ diff --git a/src/app/components/creator/_dialogs/comment-export/comment-export.component.ts b/src/app/components/creator/_dialogs/comment-export/comment-export.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..468f3ce70874f21c831854bcf80d07e2bef13868 --- /dev/null +++ b/src/app/components/creator/_dialogs/comment-export/comment-export.component.ts @@ -0,0 +1,56 @@ +import { Component, OnInit } from '@angular/core'; +import { MatDialogRef } from '@angular/material'; +import { CommentCreatorPageComponent } from '../../comment-creator-page/comment-creator-page.component'; +import { Comment } from '../../../../models/comment'; + +@Component({ + selector: 'app-comment-export', + templateUrl: './comment-export.component.html', + styleUrls: ['./comment-export.component.scss'] +}) +export class CommentExportComponent implements OnInit { + comments: Comment[]; + exportType = 'comma'; + + constructor(public dialogRef: MatDialogRef<CommentCreatorPageComponent>) { } + + ngOnInit() { + } + + onNoClick(): void { + this.dialogRef.close(); + } + + exportCsv(delimiter: string, date: string): void { + let csv: string; + let keyFields = ''; + let valueFields = ''; + keyFields = Object.keys(this.comments[0]).slice(3).join(delimiter) + '\r\n'; + this.comments.forEach(element => { + element.body = '"' + element.body.replace(/[\r\n]/g, ' ').replace(/ +/g, ' ').replace(/"/g, '""') + '"'; + valueFields += Object.values(element).slice(3).join(delimiter) + '\r\n'; + }); + csv = keyFields + valueFields; + const myBlob = new Blob([csv], { type: 'text/csv' }); + const link = document.createElement('a'); + const fileName = 'comments_' + date + '.csv'; + link.setAttribute('download', fileName); + link.href = window.URL.createObjectURL(myBlob); + link.click(); + } + + onExport(exportType: string): void { + const date = new Date(); + const dateString = date.getFullYear() + '_' + ('0' + (date.getMonth() + 1)).slice(-2) + '_' + ('0' + date.getDate()).slice(-2); + const timeString = ('0' + date.getHours()).slice(-2) + ('0' + date.getMinutes()).slice(-2) + ('0' + date.getSeconds()).slice(-2); + const timestamp = dateString + '_' + timeString; + if (exportType === 'comma') { + this.exportCsv(',', timestamp); + this.onNoClick(); + } + if (exportType === 'semicolon') { + this.exportCsv(';', timestamp); + this.onNoClick(); + } + } +} diff --git a/src/app/components/creator/_dialogs/content-edit/content-edit.component.html b/src/app/components/creator/_dialogs/content-edit/content-edit.component.html index fffc5e8954703c0bcf405519ecdfa192f62c0939..e12c461abd84156066c3fb6cfcb9db80d38e824c 100644 --- a/src/app/components/creator/_dialogs/content-edit/content-edit.component.html +++ b/src/app/components/creator/_dialogs/content-edit/content-edit.component.html @@ -1,16 +1,16 @@ <div fxLayout="column" fxLayoutAlign="center" fxLayoutGap="10px"> <mat-form-field> - <input matInput [(ngModel)]="content.subject" maxlength="20" placeholder="{{'content.subject' | translate}}" name="subject"/> + <input matInput [(ngModel)]="content.subject" maxlength="40" placeholder="{{'content.subject' | translate}}" name="subject"/> </mat-form-field> <mat-form-field> - <textarea matInput [(ngModel)]="content.body" rows="3" maxlength="100" placeholder="{{'content.body' | translate}}" name="body"></textarea> + <textarea matInput [(ngModel)]="content.body" rows="3" maxlength="255" placeholder="{{'content.body' | translate}}" name="body"></textarea> </mat-form-field> <h4>{{'content.answers' | translate}}</h4> <mat-table [dataSource]="displayAnswers"> <ng-container matColumnDef="label"> <mat-cell *matCellDef="let answer"> <mat-form-field class="input-block"> - <input matInput [(ngModel)]="answer.answerOption.label" maxlength="20" name="answer"/> + <input matInput [(ngModel)]="answer.answerOption.label" maxlength="50" name="answer"/> </mat-form-field> </mat-cell> </ng-container> diff --git a/src/app/components/creator/_dialogs/content-edit/content-edit.component.scss b/src/app/components/creator/_dialogs/content-edit/content-edit.component.scss index eba525c7cf8ad283c44f83d34e8a1581b57b6a00..16599afe763f0c8876d09feff4a10ed9cc6a93e7 100644 --- a/src/app/components/creator/_dialogs/content-edit/content-edit.component.scss +++ b/src/app/components/creator/_dialogs/content-edit/content-edit.component.scss @@ -9,17 +9,17 @@ textarea { } mat-row { - background-color: #bbdefb; - border-color: #bbdefb; + background-color: var(--dialog); + border-color: var(--dialog); } h4 { - margin: 0px !important; + margin: 0 !important; padding-bottom: 10px; - color: #4db6ac; + color: var(--primary); } mat-cell { - padding-left: 0px!important; + padding-left: 0!important; padding-right: 10px!important; } diff --git a/src/app/components/creator/_dialogs/room-delete/room-delete.component.ts b/src/app/components/creator/_dialogs/room-delete/room-delete.component.ts index b8ac7c16b6c2b5261e292993b0c826833693f6e1..35b03c1e74bb83be00061ddf184a92bc0a47c175 100644 --- a/src/app/components/creator/_dialogs/room-delete/room-delete.component.ts +++ b/src/app/components/creator/_dialogs/room-delete/room-delete.component.ts @@ -1,9 +1,6 @@ import { Component, Inject, OnInit } from '@angular/core'; -import { Router } from '@angular/router'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material'; -import { NotificationService } from '../../../../services/util/notification.service'; import { RoomCreateComponent } from '../../../shared/_dialogs/room-create/room-create.component'; -import { RoomService } from '../../../../services/http/room.service'; import { Room } from '../../../../models/room'; @Component({ @@ -14,10 +11,7 @@ import { Room } from '../../../../models/room'; export class RoomDeleteComponent implements OnInit { room: Room; - constructor(private roomService: RoomService, - private router: Router, - private notification: NotificationService, - public dialogRef: MatDialogRef<RoomCreateComponent>, + constructor( public dialogRef: MatDialogRef<RoomCreateComponent>, @Inject(MAT_DIALOG_DATA) public data: any) { } diff --git a/src/app/components/creator/_dialogs/room-edit/room-edit.component.html b/src/app/components/creator/_dialogs/room-edit/room-edit.component.html index fa34865c28a2ac1a03c5b8ef3fae8daad6634ad4..c32a98968be0287e5e98eab5f4897d06c0b1e8bb 100644 --- a/src/app/components/creator/_dialogs/room-edit/room-edit.component.html +++ b/src/app/components/creator/_dialogs/room-edit/room-edit.component.html @@ -1,17 +1,38 @@ <div *ngIf="editRoom"> - <mat-form-field class="input-block"> - <input [(ngModel)]="editRoom.name" matInput placeholder="{{ 'session.session-name' | translate}}" name="room-name"/> - </mat-form-field> - <mat-form-field class="input-block"> - <textarea [(ngModel)]="editRoom.description" matInput matTextareaAutosize - matAutosizeMinRows="2" matAutosizeMaxRows="5" placeholder="{{ 'session.description' | translate}}" name="description"> - </textarea> - </mat-form-field> + <mat-card class="header" fxLayoutAlign="center"> + <mat-card-title class="title" fxLayoutAlign="center">{{'room-page.general' | translate}}</mat-card-title> + </mat-card> + <div fxLayout="column"> + <mat-form-field class="input-block"> + <input [(ngModel)]="editRoom.name" matInput placeholder="{{ 'session.session-name' | translate}}" + name="room-name" maxlength="20"/> + </mat-form-field> + <mat-form-field class="input-block"> + <textarea [(ngModel)]="editRoom.description" matInput matTextareaAutosize + matAutosizeMinRows="2" matAutosizeMaxRows="5" maxlength="255" + placeholder="{{ 'session.description' | translate}}" name="description"> + </textarea> + </mat-form-field> + <div fxLayoutAlign="center center"> + <button mat-raised-button class="delete" (click)="openDeletionRoomDialog()"><mat-icon>delete</mat-icon>Session löschen</button> + </div> + </div> + <mat-card class="header" fxLayoutAlign="center"> + <mat-card-title class="title" fxLayoutAlign="center">{{'room-page.comments' | translate}}</mat-card-title> + </mat-card> + <div fxLayout="column"> + <div fxLayout="row"> + <h3>{{ 'room-page.threshold' | translate}}</h3> + <h3>{{commentThreshold | number}}</h3> + </div> + <mat-slider id="commentSlider" min="-50" max="50" step="1" value="0" + color="accent" [(ngModel)]="commentThreshold" (input)="onSliderChange($event)"></mat-slider> + </div> <div fxLayout="row" fxLayoutAlign="center" fxLayoutGap="10px"> <button (click)="dialogRef.close('abort')" mat-button color="primary"> {{ 'room-page.abort' | translate}} </button> - <button (click)="dialogRef.close('edit')" mat-raised-button color="primary"> + <button (click)="dialogRef.close(commentThreshold)" mat-raised-button color="primary"> {{ 'room-page.update' | translate}} </button> </div> diff --git a/src/app/components/creator/_dialogs/room-edit/room-edit.component.scss b/src/app/components/creator/_dialogs/room-edit/room-edit.component.scss index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1c5d943580c400870d05205f57d0d87c9c23b4c2 100644 --- a/src/app/components/creator/_dialogs/room-edit/room-edit.component.scss +++ b/src/app/components/creator/_dialogs/room-edit/room-edit.component.scss @@ -0,0 +1,26 @@ +@import '../../../../../styles'; + +.header { + background-color: mat-color($arsnova-primary,200); + margin: 0 0 10px 0; +} + +.title { + // color: ; +} + +#commentSlider { + width: 100%; +} + +.delete { + margin-bottom: 20px; + min-width: 170px; + width: 60%; + background-color: mat-color($arsnova-warn,300); +} + +mat-icon { + margin-right: 10px; +} + diff --git a/src/app/components/creator/_dialogs/room-edit/room-edit.component.ts b/src/app/components/creator/_dialogs/room-edit/room-edit.component.ts index b9f3a3cb7a3c503f529ce55bd20a3132be975df7..e4f337a0341eddf7dd431977a8601806250f17d2 100644 --- a/src/app/components/creator/_dialogs/room-edit/room-edit.component.ts +++ b/src/app/components/creator/_dialogs/room-edit/room-edit.component.ts @@ -1,7 +1,12 @@ import { Component, Inject, OnInit } from '@angular/core'; import { Room } from '../../../../models/room'; import { RoomCreateComponent } from '../../../shared/_dialogs/room-create/room-create.component'; -import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material'; +import { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material'; +import { RoomDeleteComponent } from '../room-delete/room-delete.component'; +import { NotificationService } from '../../../../services/util/notification.service'; +import { TranslateService } from '@ngx-translate/core'; +import { RoomService } from '../../../../services/http/room.service'; +import { Router } from '@angular/router'; @Component({ selector: 'app-room-edit', @@ -10,15 +15,56 @@ import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material'; }) export class RoomEditComponent implements OnInit { editRoom: Room; + commentThreshold: number; constructor(public dialogRef: MatDialogRef<RoomCreateComponent>, + public dialog: MatDialog, + public notificationService: NotificationService, + public translationService: TranslateService, + protected roomService: RoomService, + public router: Router, @Inject(MAT_DIALOG_DATA) public data: any) { } - onNoClick(): void { + ngOnInit() { + if (this.editRoom.extensions['comments'].commentThreshold != null) { + this.commentThreshold = this.editRoom.extensions['comments'].commentThreshold; + } else { + this.commentThreshold = -10; + } + } + + onSliderChange(event: any) { + if (event.value) { + this.commentThreshold = event.value; + } else { + this.commentThreshold = 0; + } + } + + openDeletionRoomDialog(): void { + const dialogRef = this.dialog.open(RoomDeleteComponent, { + width: '400px' + }); + dialogRef.componentInstance.room = this.editRoom; + dialogRef.afterClosed() + .subscribe(result => { + this.confirmDeletion(result); + }); + } + + deleteRoom(room: Room): void { + this.translationService.get('room-page.deleted').subscribe(msg => { + this.notificationService.show(room.name + msg); + }); + this.roomService.deleteRoom(room.id).subscribe(); this.dialogRef.close(); + this.router.navigate([`/creator`]); } - ngOnInit() { + confirmDeletion(dialogAnswer: string): void { + if (dialogAnswer === 'delete') { + this.deleteRoom(this.editRoom); + } } } diff --git a/src/app/components/creator/comment-creator-page/comment-creator-page.component.html b/src/app/components/creator/comment-creator-page/comment-creator-page.component.html new file mode 100644 index 0000000000000000000000000000000000000000..2445a6fcae34f3159b6597b46220b8fe37935acc --- /dev/null +++ b/src/app/components/creator/comment-creator-page/comment-creator-page.component.html @@ -0,0 +1 @@ +<app-comment-page></app-comment-page> diff --git a/src/app/components/creator/comment-creator-page/comment-creator-page.component.scss b/src/app/components/creator/comment-creator-page/comment-creator-page.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/app/components/creator/comment-creator-page/comment-creator-page.component.spec.ts b/src/app/components/creator/comment-creator-page/comment-creator-page.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..de0a3aef6dc4dfda982d534c827258d562a082c9 --- /dev/null +++ b/src/app/components/creator/comment-creator-page/comment-creator-page.component.spec.ts @@ -0,0 +1,26 @@ +/* import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { CommentCreatorPageComponent } from './comment-creator-page.component'; + +describe('CommentCreatorPageComponent', () => { + let component: CommentCreatorPageComponent; + let fixture: ComponentFixture<CommentCreatorPageComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ CommentCreatorPageComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(CommentCreatorPageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); +*/ diff --git a/src/app/components/creator/comment-creator-page/comment-creator-page.component.ts b/src/app/components/creator/comment-creator-page/comment-creator-page.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..c971df4b4cd2023e25c5ecdf17eab19b848b2146 --- /dev/null +++ b/src/app/components/creator/comment-creator-page/comment-creator-page.component.ts @@ -0,0 +1,14 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-comment-creator-page', + templateUrl: './comment-creator-page.component.html', + styleUrls: ['./comment-creator-page.component.scss'] +}) +export class CommentCreatorPageComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } +} diff --git a/src/app/components/creator/content-choice-creator/content-choice-creator.component.html b/src/app/components/creator/content-choice-creator/content-choice-creator.component.html index 4b6a7d1d8255775f177e1914a3b6c85265f85031..d0c3bef729c69f04e798c2b4272084c65b1a7276 100644 --- a/src/app/components/creator/content-choice-creator/content-choice-creator.component.html +++ b/src/app/components/creator/content-choice-creator/content-choice-creator.component.html @@ -13,7 +13,7 @@ <ng-container matColumnDef="label"> <mat-header-cell *matHeaderCellDef>{{ 'content.answer' | translate }}</mat-header-cell> <mat-cell *matCellDef="let answer"> - <mat-checkbox color="primary" (click)="switchValue(answer.answerOption.label)" [(ngModel)]="answer.correct" + <mat-checkbox (click)="switchValue(answer.answerOption.label)" [(ngModel)]="answer.correct" [checked]="answer.correct" name="{{ answer.answerOption.label }}">{{ answer.answerOption.label }} </mat-checkbox> diff --git a/src/app/components/creator/content-choice-creator/content-choice-creator.component.scss b/src/app/components/creator/content-choice-creator/content-choice-creator.component.scss index 4d0f4e714bbecf2a8716814d8f3add41351e36b3..3d1670d1e84db9ddaee4cdd9f4a0d8ae5ccda756 100644 --- a/src/app/components/creator/content-choice-creator/content-choice-creator.component.scss +++ b/src/app/components/creator/content-choice-creator/content-choice-creator.component.scss @@ -3,11 +3,15 @@ form > button { } mat-header-cell { - background-color: #ffe0b2; + background-color: var(--background-2); } mat-row { - background-color: #ffecb3; + background-color: var(--primary); +} + +.mat-checkbox { + color: var(--text-3) !important; } .addIcon { diff --git a/src/app/components/creator/content-creator/content-creator.component.html b/src/app/components/creator/content-creator/content-creator.component.html index 407b840e6c9cf2cf3acbf0c07b2795914fa95fbd..56fdf8efb5fe229fb1a4af4e43d890f1fb118476 100644 --- a/src/app/components/creator/content-creator/content-creator.component.html +++ b/src/app/components/creator/content-creator/content-creator.component.html @@ -1,11 +1,11 @@ <form> <mat-form-field class="input-block"> <input matInput #subject [(ngModel)]="content.subject" placeholder="{{'content.subject' | translate}}" name="subject" - maxlength="20"> + maxlength="40"> </mat-form-field> <mat-form-field class="input-block"> <textarea matInput #body [(ngModel)]="content.body" placeholder="{{'content.body' | translate}}" name="body" - matTextareaAutosize matAutosizeMinRows="3" matAutosizeMaxRows="8" maxlength="100"></textarea> + matTextareaAutosize matAutosizeMinRows="3" matAutosizeMaxRows="8" maxlength="255"></textarea> </mat-form-field> <mat-form-field> <input matInput #group [formControl]="myControl" [matAutocomplete]="auto" diff --git a/src/app/components/creator/content-likert-creator/content-likert-creator.component.scss b/src/app/components/creator/content-likert-creator/content-likert-creator.component.scss index 3d0e678f5ec7ef58ad3ce0c18847c8e32c158072..ccd1c0a31b7626c17023705cfc44d7a7252d025a 100644 --- a/src/app/components/creator/content-likert-creator/content-likert-creator.component.scss +++ b/src/app/components/creator/content-likert-creator/content-likert-creator.component.scss @@ -3,9 +3,9 @@ form > button { } mat-header-cell { - background-color: #ffe0b2; + background-color: var(--background-2); } mat-cell { - background-color: #ffecb3; + background-color: var(--primary); } diff --git a/src/app/components/creator/content-list/content-list.component.html b/src/app/components/creator/content-list/content-list.component.html index 933c5089885f0712fb93a5f8726a94d504fd2b19..058925e146d34a131d3e10c98d76b5409a4c7422 100644 --- a/src/app/components/creator/content-list/content-list.component.html +++ b/src/app/components/creator/content-list/content-list.component.html @@ -13,32 +13,32 @@ </div> <mat-grid-list cols="3" rowHeight="1:1"> <mat-grid-tile> - <button class="actionButton" mat-icon-button color="primary" - matTooltip="{{ 'room-page.create-content' | translate}}" + <button class="actionButton" mat-icon-button routerLink="/creator/room/{{ roomId }}/create-content"> <mat-icon class="actionIcon">note_add</mat-icon> + <h3 *ngIf="deviceType === 'desktop'">{{ 'room-page.create-content' | translate}}</h3> </button> </mat-grid-tile> <mat-grid-tile> - <button class="actionButton" mat-icon-button color="primary" - matTooltip="{{ 'room-page.present' | translate}}" + <button class="actionButton" mat-icon-button routerLink="/creator/room/{{ roomId }}/{{ contentGroup.name }}/presentation"> <mat-icon class="actionIcon">school</mat-icon> + <h3 *ngIf="deviceType === 'desktop'">{{ 'room-page.present' | translate}}</h3> </button> </mat-grid-tile> <mat-grid-tile> - <button class="actionButton" mat-icon-button color="primary" - matTooltip="{{ 'room-page.answer-statistics' | translate}}" + <button class="actionButton" mat-icon-button routerLink="/creator/room/{{ roomId }}/statistics"> <mat-icon class="actionIcon">insert_chart</mat-icon> + <h3 *ngIf="deviceType === 'desktop'">{{ 'room-page.answer-statistics' | translate}}</h3> </button> </mat-grid-tile> </mat-grid-list> <mat-divider></mat-divider> <mat-card-content> - <mat-expansion-panel *ngFor="let content of contents; index as i"> - <mat-expansion-panel-header> - <mat-panel-title> + <mat-expansion-panel *ngFor="let content of contents; index as i" class="matPanel"> + <mat-expansion-panel-header class="matPanelListHeader"> + <mat-panel-title class="panelTitle"> {{ labels[i] }} </mat-panel-title> <button mat-icon-button color="accent" (click)="editContent(content);$event.stopPropagation();" @@ -50,7 +50,7 @@ <mat-icon>delete_forever</mat-icon> </button> </mat-expansion-panel-header> - <mat-panel-description> + <mat-panel-description class="panelTitle"> {{ content.body }} </mat-panel-description> </mat-expansion-panel> diff --git a/src/app/components/creator/content-list/content-list.component.scss b/src/app/components/creator/content-list/content-list.component.scss index d814020384c6cfdada1e8d55d5058ed72a1b73a1..a452212da4e80ea1c573a680500910a7666e978b 100644 --- a/src/app/components/creator/content-list/content-list.component.scss +++ b/src/app/components/creator/content-list/content-list.component.scss @@ -1,7 +1,7 @@ mat-card { width: 800px; max-width: 90%; - background-color: #fff8e1; + background-color: var(--card)!important; } mat-card-content > :first-child { @@ -9,7 +9,7 @@ mat-card-content > :first-child { } mat-expansion-panel { - background-color: #bbdefb; + background-color: var(--background-2); margin-bottom: 5px; } @@ -21,23 +21,34 @@ mat-panel-title { } mat-expansion-panel-header { - background-color: #bbdefb !important; + background-color: var(--background-2) !important; padding-left: 3%; padding-right: 3%; + word-break: break-all; } -.mat-expansion-panel-header-title { - word-break: break-all; +.matPanel { + background-color: var(--background-2); + margin-bottom: 5px; + color: black!important; +} + +.panelTitle { + width: 8% !important; + color: black !important; } h2 { font-size: larger; + color: black !important; } .actionButton { width: 75%; height: 75%; margin: 5px; + transition: all 0.5s; + color: var(--primary)!important; &:hover { transform: scale(1.25) diff --git a/src/app/components/creator/content-list/content-list.component.ts b/src/app/components/creator/content-list/content-list.component.ts index 61e01725e902a58cbf92bc1b10c781608d56f32d..53651c3b8e24cc80707750d6cc2da2455efc6ac9 100644 --- a/src/app/components/creator/content-list/content-list.component.ts +++ b/src/app/components/creator/content-list/content-list.component.ts @@ -15,8 +15,6 @@ import { TranslateService } from '@ngx-translate/core'; import { LanguageService } from '../../../services/util/language.service'; import { ContentDeleteComponent } from '../_dialogs/content-delete/content-delete.component'; import { ContentEditComponent } from '../_dialogs/content-edit/content-edit.component'; -import { InnerSubscriber } from 'rxjs/internal/InnerSubscriber'; - @Component({ selector: 'app-content-list', @@ -28,24 +26,16 @@ import { InnerSubscriber } from 'rxjs/internal/InnerSubscriber'; export class ContentListComponent implements OnInit { contents: Content[]; - contentBackup: Content; - contentCBackup: ContentChoice; - roomId: string; - contentGroup: ContentGroup; - room: Room; - isLoading = true; - collectionName: string; - labelMaxLength: number; - labels: string[] = []; + deviceType = localStorage.getItem('deviceType'); constructor(private contentService: ContentService, private roomService: RoomService, diff --git a/src/app/components/creator/content-presentation/content-presentation.component.scss b/src/app/components/creator/content-presentation/content-presentation.component.scss index 8b0580e3b3bca45d557bc0bbf884d70074a25fbd..902425126609477610d0dedb98d7da6cac7e1671 100644 --- a/src/app/components/creator/content-presentation/content-presentation.component.scss +++ b/src/app/components/creator/content-presentation/content-presentation.component.scss @@ -11,12 +11,12 @@ mat-card { width: 800px; max-width: 90%; margin-top: 20px; - background-color: #fff8e1; + background-color: var(--card); } h3 { font-size: 150%; - color: #26a69a; + color: var(--text-3); } h4 { diff --git a/src/app/components/creator/creator-routing.module.ts b/src/app/components/creator/creator-routing.module.ts index 8f5d6276a24767d2f2014ce5da03d676aea7db51..37cc87063de37571aba54ebc76be84f41371afa9 100644 --- a/src/app/components/creator/creator-routing.module.ts +++ b/src/app/components/creator/creator-routing.module.ts @@ -6,11 +6,11 @@ import { UserRole } from '../../models/user-roles.enum'; import { RoomCreatorPageComponent } from './room-creator-page/room-creator-page.component'; import { ContentCreatePageComponent } from './content-create-page/content-create-page.component'; import { StatisticsPageComponent } from '../shared/statistics-page/statistics-page.component'; -import { CommentListComponent } from '../shared/comment-list/comment-list.component'; import { FeedbackBarometerPageComponent } from '../shared/feedback-barometer-page/feedback-barometer-page.component'; import { ContentListComponent } from './content-list/content-list.component'; import { StatisticComponent } from '../shared/statistic/statistic.component'; import { ContentPresentationComponent } from './content-presentation/content-presentation.component'; +import { CommentCreatorPageComponent } from './comment-creator-page/comment-creator-page.component'; const routes: Routes = [ { @@ -45,7 +45,7 @@ const routes: Routes = [ }, { path: 'room/:roomId/comments', - component: CommentListComponent, + component: CommentCreatorPageComponent, canActivate: [AuthenticationGuard], data: { roles: [UserRole.CREATOR] } }, diff --git a/src/app/components/creator/creator.module.ts b/src/app/components/creator/creator.module.ts index bd0dce86a7b46517d424cac55f2982c658200d84..5707a9ddd352e3e396d204340ccf13bdbf7a0823 100644 --- a/src/app/components/creator/creator.module.ts +++ b/src/app/components/creator/creator.module.ts @@ -21,6 +21,8 @@ import { ContentCreatorComponent } from './content-creator/content-creator.compo import { ContentListComponent } from './content-list/content-list.component'; import { ContentEditComponent } from './_dialogs/content-edit/content-edit.component'; import { ContentPresentationComponent } from './content-presentation/content-presentation.component'; +import { CommentCreatorPageComponent } from './comment-creator-page/comment-creator-page.component'; +import { CommentExportComponent } from './_dialogs/comment-export/comment-export.component'; @NgModule({ imports: [ @@ -50,7 +52,9 @@ import { ContentPresentationComponent } from './content-presentation/content-pre ContentCreatorComponent, ContentListComponent, ContentEditComponent, - ContentPresentationComponent + ContentPresentationComponent, + CommentCreatorPageComponent, + CommentExportComponent ], entryComponents: [ RoomDeleteComponent, @@ -61,7 +65,8 @@ import { ContentPresentationComponent } from './content-presentation/content-pre ContentLikertCreatorComponent, ContentTextCreatorComponent, ContentYesNoCreatorComponent, - ContentEditComponent + ContentEditComponent, + CommentExportComponent ] }) export class CreatorModule { diff --git a/src/app/components/creator/room-creator-page/room-creator-page.component.html b/src/app/components/creator/room-creator-page/room-creator-page.component.html index 747df67543f8cddae2d7741063a5dff44764012a..142c359d1bc993373332181165ebcbba46631165 100644 --- a/src/app/components/creator/room-creator-page/room-creator-page.component.html +++ b/src/app/components/creator/room-creator-page/room-creator-page.component.html @@ -2,18 +2,25 @@ <div fxLayout="row" fxLayoutAlign="center"> <mat-progress-spinner *ngIf="isLoading" color="accent" mode="indeterminate"></mat-progress-spinner> <mat-card *ngIf="room"> - <mat-card-header fxLayoutAlign="center"> - <mat-card-title fxLayoutAlign="center"> - <h2>{{ room.name }}</h2> - </mat-card-title> - <mat-card-subtitle fxLayoutAlign="center"> - <h3> - {{ room.shortId.slice(0,4) }} {{ room.shortId.slice(4,8) }} - </h3> - </mat-card-subtitle> - </mat-card-header> + <div fxLayout="row"> + <span class="fill-remaining-space"></span> + <mat-card-header fxLayoutAlign="center" fxLayout="row"> + <mat-card-title fxLayoutAlign="center"> + <h2>{{ room.name }}</h2> + </mat-card-title> + <mat-card-subtitle fxLayoutAlign="center"> + <h3> + {{ room.shortId.slice(0, 4) }} {{ room.shortId.slice(4, 8) }} + </h3> + </mat-card-subtitle> + </mat-card-header> + <span class="fill-remaining-space"></span> + <button mat-icon-button id="settings" (click)="showEditDialog()"> + <mat-icon id="settings-icon" matTooltip="{{ 'room-page.session-settings' | translate}}">settings</mat-icon> + </button> + </div> <mat-divider></mat-divider> - <mat-card-content fxLayoutAlign="center"> + <mat-card-content id="description" fxLayoutAlign="center"> <mat-expansion-panel *ngIf="!(room.description == '')" class="mat-elevation-z0"> <mat-expansion-panel-header> <h4>{{ 'room-page.description' | translate }}</h4> @@ -23,44 +30,35 @@ </p> </mat-expansion-panel> </mat-card-content> - <mat-grid-list cols="3" rowHeight="2:1"> + <mat-grid-list cols="2" rowHeight="2:1"> <mat-grid-tile colspan="1" rowspan="1"> - <button mat-icon-button color="primary" matTooltip="{{ 'room-page.create-content' | translate}}" - routerLink="/creator/room/{{ room.shortId }}/create-content"> - <mat-icon>note_add</mat-icon> - </button> + <button mat-icon-button + routerLink="/creator/room/{{ room.shortId }}/create-content"> + <mat-icon>note_add</mat-icon> + <h3 *ngIf="deviceType === 'desktop'">{{ 'room-page.create-content' | translate}}</h3> + </button> </mat-grid-tile> <mat-grid-tile> - <button mat-icon-button color="primary" matTooltip="{{ 'room-page.comments' | translate}}" + <button mat-icon-button routerLink="/creator/room/{{ room.shortId }}/comments"> <mat-icon>question_answer</mat-icon> - </button> - </mat-grid-tile> - <mat-grid-tile> - <button mat-icon-button *ngIf="!modify" (click)="showEditDialog()" color="accent" - matTooltip="{{ 'room-page.edit-room' | translate}}"> - <mat-icon>create</mat-icon> + <h3 *ngIf="deviceType === 'desktop'">{{ 'room-page.comments' | translate}}</h3> </button> </mat-grid-tile> </mat-grid-list> - <mat-grid-list cols="3" rowHeight="2:1"> - <mat-grid-tile> - <button mat-icon-button color="primary" matTooltip="{{ 'room-page.answer-statistics' | translate}}" - routerLink="/creator/room/{{ room.shortId }}/statistics"> - <mat-icon>insert_chart</mat-icon> - </button> - </mat-grid-tile> + <mat-grid-list cols="2" rowHeight="2:1"> <mat-grid-tile> - <button mat-icon-button color="primary" matTooltip="{{ 'room-page.live-feedback' | translate}}" - routerLink="/creator/room/{{ room.shortId }}/feedback-barometer"> - <mat-icon class="smallerIcon">thumbs_up_down</mat-icon> + <button mat-icon-button routerLink="/creator/room/{{ room.shortId }}/statistics"> + <mat-icon>insert_chart</mat-icon> + <h3 *ngIf="deviceType === 'desktop'">{{ 'room-page.answer-statistics' | translate}}</h3> </button> </mat-grid-tile> <mat-grid-tile> - <button mat-icon-button color="warn" (click)="openDeletionRoomDialog()" - matTooltip="{{ 'room-page.delete-room' | translate}}"> - <mat-icon>delete_forever</mat-icon> - </button> + <button mat-icon-button routerLink="/creator/room/{{ room.shortId }}/feedback-barometer"> + <mat-icon class="smallerIcon">thumbs_up_down + </mat-icon> + <h3 *ngIf="deviceType === 'desktop'">{{ 'room-page.live-feedback' | translate}}</h3> + </button> </mat-grid-tile> </mat-grid-list> <app-content-groups *ngIf="room && room.contentGroups" [contentGroups]="room.contentGroups"></app-content-groups> diff --git a/src/app/components/creator/room-creator-page/room-creator-page.component.scss b/src/app/components/creator/room-creator-page/room-creator-page.component.scss index 9a4764ae3219972403b5a0a0d49934c0ef28c035..c506cd16b80a223ca4fb96ee1335b106a7d2be4b 100644 --- a/src/app/components/creator/room-creator-page/room-creator-page.component.scss +++ b/src/app/components/creator/room-creator-page/room-creator-page.component.scss @@ -2,7 +2,7 @@ mat-card { width: 800px; - background-color: #fff8e1 !important; + background-color: var(--card)!important; } mat-card-content > :first-child { @@ -12,15 +12,32 @@ mat-card-content > :first-child { button { width: 30%; + transition: all 0.3s; &:hover { transform: scale(1.25) } } +#description { + margin-bottom: 0; +} + .mat-icon-button { width: 75%; height: 75%; margin-bottom: 20px; + color: var(--primary)!important; +} + +#settings { + width: 10%; + max-width: 40px; +} + +#settings-icon { + font-size: 35px; + height: 35px; + width: 35px; } mat-icon { @@ -40,19 +57,22 @@ mat-tooltip-component { p { font-size: medium; + color: var(--text-2)!important; } +h2 { + font-size: large; + color: var(--text-1)!important; + } + h3 { font-size: larger; + color: var(--text-3)!important; } h4 { font-size: medium; - color: mat-color($arsnova-primary, 300); -} - -h2 { - font-size: large; + color: var(--text-1)!important; } mat-card-header { @@ -73,6 +93,6 @@ mat-grid-tile { } mat-expansion-panel { - background-color: #fff8e1!important; + background-color: var(--card)!important; min-width: 200px; } diff --git a/src/app/components/creator/room-creator-page/room-creator-page.component.ts b/src/app/components/creator/room-creator-page/room-creator-page.component.ts index 0d6a23fbb87b0e1846891aed117241960511fc75..8f85d6e2819bd1e0c2de5eacfc0c5bc323652d3d 100644 --- a/src/app/components/creator/room-creator-page/room-creator-page.component.ts +++ b/src/app/components/creator/room-creator-page/room-creator-page.component.ts @@ -6,10 +6,10 @@ import { Room } from '../../../models/room'; import { Location } from '@angular/common'; import { NotificationService } from '../../../services/util/notification.service'; import { MatDialog } from '@angular/material'; -import { RoomDeleteComponent } from '../_dialogs/room-delete/room-delete.component'; import { RoomEditComponent } from '../_dialogs/room-edit/room-edit.component'; import { TranslateService } from '@ngx-translate/core'; import { LanguageService } from '../../../services/util/language.service'; +import { TSMap } from 'typescript-map'; @Component({ selector: 'app-room-creator-page', @@ -19,6 +19,9 @@ import { LanguageService } from '../../../services/util/language.service'; export class RoomCreatorPageComponent extends RoomPageComponent implements OnInit { room: Room; updRoom: Room; + commentThreshold: number; + updCommentThreshold: number; + deviceType = localStorage.getItem('deviceType'); constructor(protected roomService: RoomService, protected notification: NotificationService, @@ -39,65 +42,41 @@ export class RoomCreatorPageComponent extends RoomPageComponent implements OnIni }); } - /* TODO: i18n */ - - updateRoom(): void { - if ((this.updRoom.name === this.room.name) && - (this.updRoom.description === this.room.description) - ) { - this.notification.show('There were no changes'); - return; - } else { - this.room.name = this.updRoom.name; - this.room.description = this.updRoom.description; - this.roomService.updateRoom(this.room) - .subscribe(() => { - this.notification.show('Changes are made'); - }); - } - } - - deleteRoom(room: Room): void { - const msg = room.name + ' deleted'; - this.notification.show(msg); - this.delete(room); - } - - confirmDeletion(dialogAnswer: string): void { - if (dialogAnswer === 'delete') { - this.deleteRoom(this.room); + updateRoom(threshold: number): void { + this.room.name = this.updRoom.name; + this.room.description = this.updRoom.description; + if (threshold > -50) { + const commentExtension: TSMap<string, any> = new TSMap(); + commentExtension.set('commentThreshold', threshold); + this.room.extensions = new TSMap(); + this.room.extensions.set('comments', commentExtension); } - } - - openDeletionRoomDialog(): void { - const dialogRef = this.dialog.open(RoomDeleteComponent, { - width: '400px' - }); - dialogRef.componentInstance.room = this.room; - dialogRef.afterClosed() - .subscribe(result => { - this.confirmDeletion(result); + this.roomService.updateRoom(this.room) + .subscribe(() => { + this.translateService.get('room-page.changes-successful').subscribe(msg => { + this.notification.show(msg); + }); }); } showEditDialog(): void { - this.updRoom = new Room(); - this.updRoom.name = this.room.name; - this.updRoom.shortId = this.room.shortId; - this.updRoom.description = this.room.description; + this.updRoom = this.room; const dialogRef = this.dialog.open(RoomEditComponent, { width: '400px' }); dialogRef.componentInstance.editRoom = this.updRoom; + dialogRef.componentInstance.commentThreshold = this.updCommentThreshold; dialogRef.afterClosed() .subscribe(result => { if (result === 'abort') { return; - } - if (result === 'edit') { - this.updateRoom(); + } else { + this.updateRoom(+result); } }); + dialogRef.backdropClick().subscribe( res => { + dialogRef.close('abort'); + }); } } diff --git a/src/app/components/home/home-page/home-page.component.html b/src/app/components/home/home-page/home-page.component.html index e829c2b878c952b04e2258df948f295bd6b89d8c..43bf206c84fd77c89cbd7424fcf921c982492c2a 100644 --- a/src/app/components/home/home-page/home-page.component.html +++ b/src/app/components/home/home-page/home-page.component.html @@ -1,5 +1,5 @@ <div fxLayout="column" fxLayoutAlign="center" fxLayoutGap="20px" fxFill> - <div fxLayout="row" fxLayoutAlign="center" *ngIf="mobile === true"> + <div fxLayout="row" fxLayoutAlign="center" *ngIf="deviceType === 'mobile'"> <h1> <span class="main-heading-secondary">{{ 'login-page.welcome' | translate }}</span> <span class="main-heading-primary">ARSnova</span> @@ -8,7 +8,7 @@ <div fxLayout="row" fxLayoutAlign="center"> <mat-card class="outer"> <mat-card-content> - <mat-card-header *ngIf="mobile === false"> + <mat-card-header *ngIf="deviceType === 'desktop'"> <mat-card-title> <h1> <span class="main-heading-secondary">{{ 'login-page.welcome' | translate }}</span> diff --git a/src/app/components/home/home-page/home-page.component.scss b/src/app/components/home/home-page/home-page.component.scss index 91512460d0dcf1beb2bfafef6922d91b00a76b9f..0ec3f5d386b4621115912f4c65c3dc99a2e930cd 100644 --- a/src/app/components/home/home-page/home-page.component.scss +++ b/src/app/components/home/home-page/home-page.component.scss @@ -3,7 +3,7 @@ .outer { width: 90%; max-width: 500px; - background-color: #bbdefb; + background-color: var(--background-2); } .main-heading-primary { diff --git a/src/app/components/home/home-page/home-page.component.ts b/src/app/components/home/home-page/home-page.component.ts index eec655fa3ea823dfbd746378b02d76df1eb5bd9f..89a824fdc48ef59a6a164d0f75b50ef749f803a3 100644 --- a/src/app/components/home/home-page/home-page.component.ts +++ b/src/app/components/home/home-page/home-page.component.ts @@ -7,13 +7,18 @@ import { Component, OnInit } from '@angular/core'; }) export class HomePageComponent implements OnInit { - mobile = true; + deviceType: string; - constructor() { } + constructor() { + } ngOnInit() { - if (window.innerWidth > 500) { - this.mobile = false; + if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) { + localStorage.setItem('deviceType', 'mobile'); + this.deviceType = 'mobile'; + } else { + localStorage.setItem('deviceType', 'desktop'); + this.deviceType = 'desktop'; } } diff --git a/src/app/components/home/new-landing/new-landing.component.html b/src/app/components/home/new-landing/new-landing.component.html index dcc8cccfa0965626cfdc1ca5d3693aeac7547948..c9731f48b29f9ceacb142897bd697ab8ba205579 100644 --- a/src/app/components/home/new-landing/new-landing.component.html +++ b/src/app/components/home/new-landing/new-landing.component.html @@ -1,6 +1,6 @@ <div fxLayout="column" fxLayoutAlign="center center" fxlayoutgap="20px" fxFill> <app-room-join></app-room-join> - <button mat-fab class="fab-extended" color="primary" (click)="createSession()"> + <button mat-fab class="fab-extended" (click)="createSession()"> <mat-icon class="add">add</mat-icon> {{'home-page.create-session' | translate}} </button> diff --git a/src/app/components/home/new-landing/new-landing.component.scss b/src/app/components/home/new-landing/new-landing.component.scss index f43f1a749630219f8dcf7c61dfa990d6f411a158..fd55c4f7441d4854591dbbe94cf32b898dd920f9 100644 --- a/src/app/components/home/new-landing/new-landing.component.scss +++ b/src/app/components/home/new-landing/new-landing.component.scss @@ -4,6 +4,7 @@ border-radius: 32px; margin-bottom: 5%; font-size: large; + background-color: var(--primary); } .add { diff --git a/src/app/components/participant/comment-create-page/comment-create-page.component.html b/src/app/components/participant/comment-create-page/comment-create-page.component.html deleted file mode 100644 index 4bdc50978f522844bca28d93af97edeed725aff2..0000000000000000000000000000000000000000 --- a/src/app/components/participant/comment-create-page/comment-create-page.component.html +++ /dev/null @@ -1,19 +0,0 @@ -<div fxLayout="column" fxLayoutAlign="center" fxLayoutGap="20px"> - <div fxLayout="row" fxLayoutAlign="center"> - <form> - <mat-form-field class="input-block"> - <input matInput #commentSubject type="text" maxlength="24" placeholder="{{ 'comment-page.enter-title' | translate}}"> - </mat-form-field> - <mat-form-field class="input-block"> - <input matInput #commentBody> - <textarea matInput></textarea> - </mat-form-field> - <button mat-raised-button color="primary" (click)="goBack()">{{ 'comment-page.back' | translate}}</button> - <button mat-raised-button color="accent" (click)="send(commentSubject.value, commentBody.value)">{{ 'comment-page.send' | translate}}</button> - </form> - </div> - <div fxLayout="row" fxLayoutAlign="center"> - <app-comment-list></app-comment-list> - </div> -</div> - diff --git a/src/app/components/participant/comment-create-page/comment-create-page.component.ts b/src/app/components/participant/comment-create-page/comment-create-page.component.ts deleted file mode 100644 index 9dafaa1af7882b5a6005f7ea8772ab4ae0188a45..0000000000000000000000000000000000000000 --- a/src/app/components/participant/comment-create-page/comment-create-page.component.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { Component, OnInit, ViewChild } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; -import { Location } from '@angular/common'; -import { Comment } from '../../../models/comment'; -import { RoomService } from '../../../services/http/room.service'; -import { CommentService } from '../../../services/http/comment.service'; -import { NotificationService } from '../../../services/util/notification.service'; -import { AuthenticationService } from '../../../services/http/authentication.service'; -import { User } from '../../../models/user'; -import { CommentListComponent } from '../../shared/comment-list/comment-list.component'; - -@Component({ - selector: 'app-comment-create-page', - templateUrl: './comment-create-page.component.html', - styleUrls: ['./comment-create-page.component.scss'] -}) -export class CommentCreatePageComponent implements OnInit { - @ViewChild(CommentListComponent) child: CommentListComponent; - roomId: string; - roomShortId: string; - user: User; - private date = new Date(Date.now()); - - constructor( - protected authenticationService: AuthenticationService, - private route: ActivatedRoute, - private roomService: RoomService, - private commentService: CommentService, - private location: Location, - private notification: NotificationService) { } - - ngOnInit(): void { - this.user = this.authenticationService.getUser(); - this.roomShortId = this.route.snapshot.paramMap.get('roomId'); - this.roomId = localStorage.getItem(`roomId`); - } - - // TODO: check if empty - - send(subject: string, body: string): void { - subject = subject.trim(); - body = body.trim(); - if (!subject || !body) { - return; - } - this.commentService.addComment({ - id: '', - roomId: this.roomId, - userId: this.user.id, - subject: subject, - body: body, - creationTimestamp: this.date.getTime(), - read: false, - revision: '' - } as Comment).subscribe(() => { - this.child.getComments(); - this.notification.show(`Comment '${subject}' successfully created.`); - this.goBack(); - }); - } - - goBack(): void { - this.location.back(); - } -} diff --git a/src/app/components/participant/comment-participant-page/comment-participant-page.component.html b/src/app/components/participant/comment-participant-page/comment-participant-page.component.html new file mode 100644 index 0000000000000000000000000000000000000000..2445a6fcae34f3159b6597b46220b8fe37935acc --- /dev/null +++ b/src/app/components/participant/comment-participant-page/comment-participant-page.component.html @@ -0,0 +1 @@ +<app-comment-page></app-comment-page> diff --git a/src/app/components/participant/comment-participant-page/comment-participant-page.component.scss b/src/app/components/participant/comment-participant-page/comment-participant-page.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/app/components/participant/comment-participant-page/comment-participant-page.component.spec.ts b/src/app/components/participant/comment-participant-page/comment-participant-page.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..6287f88a12f29bf8718cfa17ad8ef9dc0ea7b490 --- /dev/null +++ b/src/app/components/participant/comment-participant-page/comment-participant-page.component.spec.ts @@ -0,0 +1,27 @@ +/* +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { CommentParticipantPageComponent } from './comment-participant-page.component'; + +describe('CommentParticipantPageComponent', () => { + let component: CommentParticipantPageComponent; + let fixture: ComponentFixture<CommentParticipantPageComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ CommentParticipantPageComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(CommentParticipantPageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); +*/ diff --git a/src/app/components/participant/comment-participant-page/comment-participant-page.component.ts b/src/app/components/participant/comment-participant-page/comment-participant-page.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..e652a59ef795450533ed4f834ce437bfe4545ee8 --- /dev/null +++ b/src/app/components/participant/comment-participant-page/comment-participant-page.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-comment-participant-page', + templateUrl: './comment-participant-page.component.html', + styleUrls: ['./comment-participant-page.component.scss'] +}) +export class CommentParticipantPageComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + +} diff --git a/src/app/components/participant/participant-routing.module.ts b/src/app/components/participant/participant-routing.module.ts index b4b33c4e59fc1066fbfb6dae8a08a82d82ccb22b..1b6054cae8add874cad84fa73b8b247118b9549c 100644 --- a/src/app/components/participant/participant-routing.module.ts +++ b/src/app/components/participant/participant-routing.module.ts @@ -4,11 +4,11 @@ import { HomeParticipantPageComponent } from './home-participant-page/home-parti import { AuthenticationGuard } from '../../guards/authentication.guard'; import { UserRole } from '../../models/user-roles.enum'; import { RoomParticipantPageComponent } from './room-participant-page/room-participant-page.component'; -import { CommentCreatePageComponent } from './comment-create-page/comment-create-page.component'; import { FeedbackBarometerPageComponent } from '../shared/feedback-barometer-page/feedback-barometer-page.component'; import { ParticipantContentCarouselPageComponent } from './participant-content-carousel-page/participant-content-carousel-page.component'; import { StatisticsPageComponent } from '../shared/statistics-page/statistics-page.component'; import { StatisticComponent } from '../shared/statistic/statistic.component'; +import { CommentParticipantPageComponent } from './comment-participant-page/comment-participant-page.component'; const routes: Routes = [ { @@ -36,8 +36,8 @@ const routes: Routes = [ data: { roles: [UserRole.PARTICIPANT] } }, { - path: 'room/:roomId/create-comment', - component: CommentCreatePageComponent, + path: 'room/:roomId/comments', + component: CommentParticipantPageComponent, canActivate: [AuthenticationGuard], data: { roles: [UserRole.PARTICIPANT] } }, diff --git a/src/app/components/participant/participant.module.ts b/src/app/components/participant/participant.module.ts index 77d5bb07717cd9433c3260a33bf96838a0bd9fda..640952e86f8c4ee683e67d86574822321a401f5f 100644 --- a/src/app/components/participant/participant.module.ts +++ b/src/app/components/participant/participant.module.ts @@ -11,6 +11,7 @@ import { ParticipantContentCarouselPageComponent } from './participant-content-c import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; import { HttpClient } from '@angular/common/http'; import { TranslateHttpLoader } from '@ngx-translate/http-loader'; +import { CommentParticipantPageComponent } from './comment-participant-page/comment-participant-page.component'; @NgModule({ imports: [ @@ -32,7 +33,8 @@ import { TranslateHttpLoader } from '@ngx-translate/http-loader'; ContentTextParticipantComponent, HomeParticipantPageComponent, RoomParticipantPageComponent, - ParticipantContentCarouselPageComponent + ParticipantContentCarouselPageComponent, + CommentParticipantPageComponent ] }) export class ParticipantModule { diff --git a/src/app/components/participant/room-participant-page/room-participant-page.component.html b/src/app/components/participant/room-participant-page/room-participant-page.component.html index c361e9994ecc4f6cb84c41cc0c8c464e4ef89283..685e9034d78298a3728246a3ab26541aa5da12c0 100644 --- a/src/app/components/participant/room-participant-page/room-participant-page.component.html +++ b/src/app/components/participant/room-participant-page/room-participant-page.component.html @@ -23,21 +23,21 @@ </mat-card-content> <mat-grid-list cols="3" rowHeight="2:1"> <mat-grid-tile> - <button mat-icon-button color="primary" matTooltip="{{ 'room-page.create-comment' | translate}}" - routerLink="/participant/room/{{ room.id }}/create-comment"> + <button mat-icon-button routerLink="/participant/room/{{ room.shortId }}/comments"> <mat-icon>question_answer</mat-icon> + <h3 *ngIf="deviceType === 'desktop'">{{ 'room-page.create-comment' | translate}}</h3> </button> </mat-grid-tile> <mat-grid-tile> - <button mat-icon-button color="primary" matTooltip="{{ 'room-page.give-feedback' | translate}}" - routerLink="/participant/room/{{ room.shortId }}/feedback-barometer"> + <button mat-icon-button routerLink="/participant/room/{{ room.shortId }}/feedback-barometer"> <mat-icon>thumbs_up_down</mat-icon> + <h3 *ngIf="deviceType === 'desktop'">{{ 'room-page.give-feedback' | translate}}</h3> </button> </mat-grid-tile> <mat-grid-tile> - <button mat-icon-button color="primary" matTooltip="Lernstand" - routerLink="/participant/room/{{ room.shortId }}/statistics"> + <button mat-icon-button routerLink="/participant/room/{{ room.shortId }}/statistics"> <mat-icon>insert_chart</mat-icon> + <h3 *ngIf="deviceType === 'desktop'">{{ 'statistic.answer-statistic' | translate}}</h3> </button> </mat-grid-tile> </mat-grid-list> diff --git a/src/app/components/participant/room-participant-page/room-participant-page.component.scss b/src/app/components/participant/room-participant-page/room-participant-page.component.scss index a3a11c062dd6e0ee95fda1f468f023bf1f507e52..ed7e5887a128cfc053a10a8b1cc48159d0e4958d 100644 --- a/src/app/components/participant/room-participant-page/room-participant-page.component.scss +++ b/src/app/components/participant/room-participant-page/room-participant-page.component.scss @@ -3,7 +3,7 @@ mat-card { width: 100%; max-width: 800px; - background-color: #fff8e1 !important; + background-color: var(--card)!important; } mat-card-content>:first-child { @@ -13,7 +13,8 @@ mat-card-content>:first-child { .mat-icon-button { width: 75%; height: 75%; - margin-bottom: 20px; + margin-bottom: 10px; + color: var(--primary)!important; } mat-icon { @@ -25,6 +26,8 @@ mat-icon { button { width: 30%; + transition: all 0.3s; + &:hover { transform: scale(1.25) } @@ -32,19 +35,24 @@ button { p { font-size: medium; + color: var(--text-2)!important; +} + +h2 { + font-size: large; + color: var(--text-1)!important; } h3 { font-size: larger; + color: var(--text-3)!important; + margin-top: 10px; + margin-bottom: 10px; } h4 { font-size: medium; - color: mat-color($arsnova-primary, 300); -} - -h2 { - font-size: large; + color: var(--text-1)!important; } mat-card-header { @@ -61,7 +69,7 @@ mat-card-subtitle { } mat-expansion-panel { - background-color: #fff8e1!important; + background-color: var(--card)!important; min-width: 200px; } diff --git a/src/app/components/participant/room-participant-page/room-participant-page.component.ts b/src/app/components/participant/room-participant-page/room-participant-page.component.ts index 49f308215252343c542b3eb0629952d7f348b3a9..69244c2222e1bcb9edc33299b1ee94b914fb3499 100644 --- a/src/app/components/participant/room-participant-page/room-participant-page.component.ts +++ b/src/app/components/participant/room-participant-page/room-participant-page.component.ts @@ -15,6 +15,8 @@ export class RoomParticipantPageComponent implements OnInit { room: Room; isLoading = true; + deviceType = localStorage.getItem('deviceType'); + constructor(private location: Location, private roomService: RoomService, diff --git a/src/app/components/shared/_dialogs/present-comment/present-comment.component.html b/src/app/components/shared/_dialogs/present-comment/present-comment.component.html new file mode 100644 index 0000000000000000000000000000000000000000..e24779e17cf6ec0b48ea83488971abdca549817c --- /dev/null +++ b/src/app/components/shared/_dialogs/present-comment/present-comment.component.html @@ -0,0 +1,8 @@ +<mat-slider min="1" max="2" step="0.1" thumbLabel tickInterval="auto" + (input)="updateFontSize($event)" id="slider"></mat-slider> +<button id="exitButton" mat-raised-button color="warn" (click)="onCloseClick()"> + <mat-icon >exit_to_app</mat-icon> +</button> +<div id="comment"> + {{body}} +</div> diff --git a/src/app/components/shared/_dialogs/present-comment/present-comment.component.scss b/src/app/components/shared/_dialogs/present-comment/present-comment.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..305ba28b00216ed7f567c965cacf4e34ea8ba1bc --- /dev/null +++ b/src/app/components/shared/_dialogs/present-comment/present-comment.component.scss @@ -0,0 +1,23 @@ +#comment { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + text-align: center; + min-height: 90vh; + font-size: 2.1em; + margin: 0.5em 0.5em; + +} + +#exitButton { + position:absolute; + top:2em; + right:2em; +} + +#slider { + position:absolute; + top:2em; + left:2em; +} diff --git a/src/app/components/shared/_dialogs/present-comment/present-comment.component.spec.ts b/src/app/components/shared/_dialogs/present-comment/present-comment.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..d1bf39b8ca52eefa7761b9a15a6dc0c2eae596f6 --- /dev/null +++ b/src/app/components/shared/_dialogs/present-comment/present-comment.component.spec.ts @@ -0,0 +1,26 @@ +/* +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { PresentCommentComponent } from './present-comment.component'; + +describe('PresentCommentComponent', () => { + let component: PresentCommentComponent; + let fixture: ComponentFixture<PresentCommentComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ PresentCommentComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(PresentCommentComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); +*/ diff --git a/src/app/components/shared/_dialogs/present-comment/present-comment.component.ts b/src/app/components/shared/_dialogs/present-comment/present-comment.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..db98ecce3f438a190adff9d0ac4e9a8a86f6f084 --- /dev/null +++ b/src/app/components/shared/_dialogs/present-comment/present-comment.component.ts @@ -0,0 +1,30 @@ +import { Component, OnInit } from '@angular/core'; +import { MatDialog, MatDialogRef } from '@angular/material'; +import { TranslateService } from '@ngx-translate/core'; + +@Component({ + selector: 'app-present-comment', + templateUrl: './present-comment.component.html', + styleUrls: ['./present-comment.component.scss'] +}) +export class PresentCommentComponent implements OnInit { + public body: string; + + constructor( + public dialogRef: MatDialogRef<PresentCommentComponent>, + private translateService: TranslateService, + public dialog: MatDialog + ) { } + + ngOnInit() { + this.translateService.use(localStorage.getItem('currentLang')); + } + + onCloseClick(): void { + this.dialogRef.close('close'); + } + + private updateFontSize(event: any): void { + document.getElementById('comment').style.fontSize = (event.value * 2.5) + 'em'; + } +} diff --git a/src/app/components/shared/_dialogs/room-create/room-create.component.ts b/src/app/components/shared/_dialogs/room-create/room-create.component.ts index dc074e219ffe72dff4dd83899230ecabfd82c221..81e0dac52a117a635dd3c5815f420d46778609d3 100644 --- a/src/app/components/shared/_dialogs/room-create/room-create.component.ts +++ b/src/app/components/shared/_dialogs/room-create/room-create.component.ts @@ -46,11 +46,11 @@ export class RoomCreateComponent implements OnInit { this.emptyInputs = true; return; } - this.roomService.addRoom({ - name: longRoomName, - abbreviation: '00000000', - description: description - } as Room).subscribe(room => { + const newRoom = new Room(); + newRoom.name = longRoomName; + newRoom.abbreviation = '00000000'; + newRoom.description = description; + this.roomService.addRoom(newRoom).subscribe(room => { this.room = room; let msg1: string; let msg2: string; diff --git a/src/app/components/shared/_dialogs/statistic-help/statistic-help.component.scss b/src/app/components/shared/_dialogs/statistic-help/statistic-help.component.scss index effb292362e0dfc112c82dc4eb387d3ddcce2097..a8bc1a483a38f177478398fdea674ee8c5c89736 100644 --- a/src/app/components/shared/_dialogs/statistic-help/statistic-help.component.scss +++ b/src/app/components/shared/_dialogs/statistic-help/statistic-help.component.scss @@ -1,21 +1,21 @@ .positiveC { - background-color: #AED581; + background-color: var(--green); } .negativeC { - background-color: #FF8A65; + background-color: var(--red); } .okayC { - background-color: #FFD54F; + background-color: var(--yellow); } .emptyC { - background-color: #E0E0E0; + background-color: var(--grey); } mat-chip { - width: 130px!important; + width: 130px !important; display: flex; justify-content: center; } diff --git a/src/app/components/shared/_dialogs/submit-comment/submit-comment.component.html b/src/app/components/shared/_dialogs/submit-comment/submit-comment.component.html new file mode 100644 index 0000000000000000000000000000000000000000..7eae850eaed7c04d88ccb0b1b6d5cdd61e7fc077 --- /dev/null +++ b/src/app/components/shared/_dialogs/submit-comment/submit-comment.component.html @@ -0,0 +1,13 @@ +<div fxLayout="column" fxLayoutAlign="center" fxLayoutGap="20px"> + <mat-form-field class="input-block"> + <textarea matInput #commentBody placeholder="{{ 'comment-page.enter-comment' | translate}}" + matAutosizeMinRows=2 matAutosizeMaxRows=5 maxlength="255" [formControl]="bodyForm"></textarea> + <mat-hint align="end">{{commentBody.value.length}} / 255</mat-hint> + </mat-form-field> + <div fxLayout="row" fxLayoutAlign="center" fxLayoutGap="20px"> + <button mat-raised-button color="warn" + (click)="onNoClick()">{{ 'comment-page.abort' | translate}}</button> + <button mat-raised-button color="accent" + (click)="closeDialog(commentBody.value)">{{ 'comment-page.send' | translate}}</button> + </div> +</div> diff --git a/src/app/components/participant/comment-create-page/comment-create-page.component.scss b/src/app/components/shared/_dialogs/submit-comment/submit-comment.component.scss similarity index 83% rename from src/app/components/participant/comment-create-page/comment-create-page.component.scss rename to src/app/components/shared/_dialogs/submit-comment/submit-comment.component.scss index ce244ec3c6b76073b139add2885197e286f63bf0..78777d0a839395d1f7c866668df3246e9357287b 100644 --- a/src/app/components/participant/comment-create-page/comment-create-page.component.scss +++ b/src/app/components/shared/_dialogs/submit-comment/submit-comment.component.scss @@ -1,3 +1,7 @@ +button { + min-width: 80px; +} + form { display: block; width: 100%; @@ -10,7 +14,6 @@ app-comment-list { max-width: 800px; } -button { - margin-right: 20px; - min-width: 80px; +textarea { + line-height: 120%; } diff --git a/src/app/components/shared/_dialogs/submit-comment/submit-comment.component.spec.ts b/src/app/components/shared/_dialogs/submit-comment/submit-comment.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..730881f3daa422eb190a18e9dc1b3e73fbdd6d99 --- /dev/null +++ b/src/app/components/shared/_dialogs/submit-comment/submit-comment.component.spec.ts @@ -0,0 +1,27 @@ +/* +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SubmitCommentComponent } from './submit-comment.component'; + +describe('SubmitCommentComponent', () => { + let component: SubmitCommentComponent; + let fixture: ComponentFixture<SubmitCommentComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ SubmitCommentComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(SubmitCommentComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); +*/ diff --git a/src/app/components/shared/_dialogs/submit-comment/submit-comment.component.ts b/src/app/components/shared/_dialogs/submit-comment/submit-comment.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..52aa288d8422f673d465051ff6defbfbf50edaff --- /dev/null +++ b/src/app/components/shared/_dialogs/submit-comment/submit-comment.component.ts @@ -0,0 +1,63 @@ +import { Component, Inject, OnInit } from '@angular/core'; +import { Comment } from '../../../../models/comment'; +import { NotificationService } from '../../../../services/util/notification.service'; +import { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material'; +import { TranslateService } from '@ngx-translate/core'; +import { FormControl, Validators } from '@angular/forms'; +import { User } from '../../../../models/user'; +import { CommentListComponent } from '../../comment-list/comment-list.component'; + + +@Component({ + selector: 'app-submit-comment', + templateUrl: './submit-comment.component.html', + styleUrls: ['./submit-comment.component.scss'] +}) +export class SubmitCommentComponent implements OnInit { + + comment: Comment; + + user: User; + roomId: string; + + bodyForm = new FormControl('', [Validators.required]); + + constructor( + private notification: NotificationService, + public dialogRef: MatDialogRef<CommentListComponent>, + private translateService: TranslateService, + public dialog: MatDialog, + private translationService: TranslateService, + @Inject(MAT_DIALOG_DATA) public data: any) { + } + + ngOnInit() { + this.translateService.use(localStorage.getItem('currentLang')); + } + + onNoClick(): void { + this.dialogRef.close(); + } + + checkInputData(body: string): boolean { + body = body.trim(); + if (!body) { + this.translationService.get('comment-page.error-comment').subscribe(message => { + this.notification.show(message); + }); + return false; + } + return true; + } + + closeDialog(body: string) { + if (this.checkInputData(body) === true) { + const comment = new Comment(); + comment.roomId = localStorage.getItem(`roomId`); + comment.body = body; + comment.userId = this.user.id; + comment.createdFromLecturer = this.user.role === 1; + this.dialogRef.close(comment); + } + } +} diff --git a/src/app/components/shared/comment-list/comment-list.component.html b/src/app/components/shared/comment-list/comment-list.component.html index 79ade9f83af464774ab782a49b871ec9917f8937..886f34baf99903c51dea2c4c29dfa201a309b555 100644 --- a/src/app/components/shared/comment-list/comment-list.component.html +++ b/src/app/components/shared/comment-list/comment-list.component.html @@ -1,37 +1,65 @@ -<mat-card *ngFor="let comment of comments"> - <mat-card-header> - <mat-card-title>{{comment.subject}}</mat-card-title> - <mat-card-subtitle> - <span class="mat-caption">Submitted on {{ comment.creationTimestamp | date:'dd-MM-yyyy HH:mm:ss' }}</span> - </mat-card-subtitle> - </mat-card-header> - <mat-divider></mat-divider> - <mat-card-content> - <p>{{comment.body}}</p> - </mat-card-content> - <mat-divider></mat-divider> - <mat-card-actions *ngIf="userRole === userRoleTemp"> - <button mat-icon-button *ngIf="comment.read" color="primary" matTooltip="Mark as read" - (click)="setRead(comment)"> - <mat-icon>speaker_notes</mat-icon> - </button> - <button mat-icon-button *ngIf="!comment.read" color="warn" matTooltip="Mark as unread" - (click)="setRead(comment)"> - <mat-icon>speaker_notes_off</mat-icon> - </button> - <button mat-icon-button color="warn" matTooltip="Delete comment" - (click)="delete(comment)"> - <mat-icon>delete</mat-icon> - </button> - </mat-card-actions> - <mat-card-actions *ngIf="userRole !== userRoleTemp"> - <button mat-icon-button *ngIf="comment.read" color="primary" matTooltip="Mark as read" - (click)="setRead(comment)" disabled> - <mat-icon>speaker_notes</mat-icon> - </button> - <button mat-icon-button *ngIf="!comment.read" color="warn" matTooltip="Mark as unread" - (click)="setRead(comment)" disabled> - <mat-icon>speaker_notes_off</mat-icon> - </button> - </mat-card-actions> +<div fxLayout="row" id="search-container"> + <mat-label fxLayoutAlign="center center"> + <mat-icon class="search-icon">search</mat-icon> + </mat-label> + <input #searchBox placeholder="{{ 'comment-list-page.search' | translate }}" + (input)="searchComments(searchBox.value)"> + <button mat-icon-button class="searchBarButton close" *ngIf="searchBox.value || isIconHide" + (click)="hideCommentsList=false; searchBox.value=''; isIconHide=false"> + <mat-icon>close</mat-icon> + </button> + <span class="fill-remaining-space"></span> + <button mat-icon-button class="searchBarButton" *ngIf="!searchBox.value && userRole === 1 && comments.length > 0 && !isIconHide" + [matTooltip]="'Export comments'" (click)="openExportDialog()"> + <mat-icon class="searchBarIcon" color="accent">cloud_download</mat-icon> + </button> + + <button mat-icon-button class="searchBarButton" *ngIf="!searchBox.value && !isIconHide" + color="accent" (click)="openSubmitDialog()"> + <mat-icon class="searchBarIcon">add_circle</mat-icon> + </button> + + <button mat-icon-button class="searchBarButton" *ngIf="!searchBox.value && !isIconHide" + color="accent" [matMenuTriggerFor]="filterMenu"> + <mat-icon class="searchBarIcon">sort</mat-icon> + </button> + + <mat-menu #filterMenu="matMenu" xPosition="before"> + <div id="filterIcon"> + <button mat-icon-button (focus)="hideCommentsList=true" (click)="filterMarkAsCorrect(); isIconHide=true"> + <mat-icon color="primary">check_circle</mat-icon> + </button> + + <button mat-icon-button (focus)="hideCommentsList=true" (click)="filterFavorite(); isIconHide=true"> + <mat-icon color="primary">star</mat-icon> + </button> + + <button mat-icon-button (focus)="hideCommentsList=true" (click)="filterMarkAsRead(); isIconHide=true"> + <mat-icon color="primary">visibility</mat-icon> + </button> + + <button mat-icon-button (focus)="hideCommentsList=false" (click)="sortVoteDesc()"> + <mat-icon color="primary">keyboard_arrow_up</mat-icon> + </button> + + <button mat-icon-button (focus)="hideCommentsList=false" (click)="sortVote()"> + <mat-icon color="primary">keyboard_arrow_down</mat-icon> + </button> + + <button mat-icon-button (focus)="hideCommentsList=false" (click)="sortTimeStamp()"> + <mat-icon color="primary">remove</mat-icon> + </button> + <button mat-icon-button *ngIf="userRole === 1" (focus)="hideCommentsList=false" (click)="deleteComments()"> + <mat-icon color="primary">delete</mat-icon> + </button> + </div> + </mat-menu> +</div> + +<mat-card class="outer-card" *ngIf="user.role === 0"> + <app-comment *ngFor="let current of getCommentsParticipant()" [comment]="current"></app-comment> </mat-card> +<mat-card class="outer-card" *ngIf="user.role === 1"> + <app-comment *ngFor="let current of getCommentsCreator()" [comment]="current"></app-comment> +</mat-card> + diff --git a/src/app/components/shared/comment-list/comment-list.component.scss b/src/app/components/shared/comment-list/comment-list.component.scss index 54dc90c341033023d58d89f8c1089584866fb5c3..838f23a98519a6db69f48f25676fa44b21fcb598 100644 --- a/src/app/components/shared/comment-list/comment-list.component.scss +++ b/src/app/components/shared/comment-list/comment-list.component.scss @@ -1,7 +1,55 @@ -mat-card { - margin-bottom: 20px; +.outer-card { + margin-bottom: 10px; + background-color: var(--primary); } -mat-card-content>:first-child { - margin-top: 20px; +app-comment { + overflow: auto; + overflow-wrap: break-word; +} + +.mat-form-field { + float: left; + padding-left: 10px; +} + +input { + box-sizing: border-box; + padding: 0 10px 0 5px; + width: 50%; + background-color: var(--light); + border: none; + outline: none; + min-height: 60px; + font-size: large; + border-radius: 5px; +} + +#search-container { + border-radius: 5px; + background-color: var(--light); + margin-bottom: 10px; +} + +.search-icon { + padding: 10px; +} + +.searchBarButton { + width: 45px !important; + height: 45px !important; + text-align: center; + min-width: 50px; + margin: 10px 2% 0 0; +} + +.close { + margin: 5px 0 5px 0; +} + +.searchBarIcon { + font-size: 45px; + height: 45px; + width: 45px; + line-height: 100% !important; } diff --git a/src/app/components/shared/comment-list/comment-list.component.ts b/src/app/components/shared/comment-list/comment-list.component.ts index f30897d8513d15bf34e5246fef3b70101edde015..8914b6d9362814552b4f6190c2937fa3f311eeb5 100644 --- a/src/app/components/shared/comment-list/comment-list.component.ts +++ b/src/app/components/shared/comment-list/comment-list.component.ts @@ -1,15 +1,18 @@ -import { Component, OnInit } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; -import { Location } from '@angular/common'; +import { Component, Input, OnInit } from '@angular/core'; import { Comment } from '../../../models/comment'; import { CommentService } from '../../../services/http/comment.service'; -import { RoomService } from '../../../services/http/room.service'; -import { NotificationService } from '../../../services/util/notification.service'; -import { AuthenticationService } from '../../../services/http/authentication.service'; -import { UserRole } from '../../../models/user-roles.enum'; -import { User } from '../../../models/user'; import { TranslateService } from '@ngx-translate/core'; import { LanguageService } from '../../../services/util/language.service'; +import { Message } from '@stomp/stompjs'; +import { SubmitCommentComponent } from '../_dialogs/submit-comment/submit-comment.component'; +import { MatDialog } from '@angular/material'; +import { WsCommentServiceService } from '../../../services/websockets/ws-comment-service.service'; +import { User } from '../../../models/user'; +import { UserRole } from '../../../models/user-roles.enum'; +import { AuthenticationService } from '../../../services/http/authentication.service'; +import { Room } from '../../../models/room'; +import { RoomService } from '../../../services/http/room.service'; +import { CommentExportComponent } from '../../creator/_dialogs/comment-export/comment-export.component'; @Component({ selector: 'app-comment-list', @@ -17,51 +20,195 @@ import { LanguageService } from '../../../services/util/language.service'; styleUrls: ['./comment-list.component.scss'] }) export class CommentListComponent implements OnInit { - userRoleTemp: any = UserRole.CREATOR; - userRole: UserRole; - user: User; + @Input() user: User; + @Input() roomId: string; + room: Room; comments: Comment[]; isLoading = true; - roomId: string; - roomShortId: string; - - constructor(protected authenticationService: AuthenticationService, - private route: ActivatedRoute, - private roomService: RoomService, - private location: Location, - private commentService: CommentService, - private notification: NotificationService, - private translateService: TranslateService, - protected langService: LanguageService) { + hideCommentsList = false; + isIconHide: boolean; + filteredComments: Comment[]; + userRole: UserRole; + + constructor(private commentService: CommentService, + private translateService: TranslateService, + public dialog: MatDialog, + protected langService: LanguageService, + private authenticationService: AuthenticationService, + private wsCommentService: WsCommentServiceService, + protected roomService: RoomService + ) { langService.langEmitter.subscribe(lang => translateService.use(lang)); } ngOnInit() { - this.userRole = this.authenticationService.getRole(); - this.user = this.authenticationService.getUser(); - this.roomShortId = this.route.snapshot.paramMap.get('roomId'); this.roomId = localStorage.getItem(`roomId`); + this.roomService.getRoom(this.roomId).subscribe( room => this.room = room); + this.comments = []; + this.hideCommentsList = false; + this.wsCommentService.getCommentStream(this.roomId).subscribe((message: Message) => { + this.parseIncomingMessage(message); + }); this.getComments(); this.translateService.use(localStorage.getItem('currentLang')); + this.userRole = this.authenticationService.getRole(); } getComments(): void { - this.commentService.getComments(this.roomId) - .subscribe(comments => { - this.comments = comments; - this.isLoading = false; - }); + this.commentService.getComments(this.roomId) + .subscribe(comments => { + this.comments = comments; + this.isLoading = false; + }); + } + + searchComments(term: string): void { + if (term && term.length > 2) { + this.hideCommentsList = true; + this.filteredComments = this.comments.filter(c => c.body.toLowerCase().includes(term.toLowerCase())); + } else { + this.hideCommentsList = false; + } + } + + getCommentsCreator(): Comment[] { + let commentThreshold = -10; + if (this.room.extensions && this.room.extensions['comments']) { + commentThreshold = this.room.extensions['comments'].commentThreshold; + if (this.hideCommentsList) { + return this.filteredComments.filter( x => x.score >= commentThreshold ); + } else { + return this.comments.filter( x => x.score >= commentThreshold ); + } + } else { + if (this.hideCommentsList) { + return this.filteredComments; + } else { + return this.comments; + } + } + } + + getCommentsParticipant(): Comment[] { + if (this.hideCommentsList) { + return this.filteredComments; + } else { + return this.comments; + } + } + + parseIncomingMessage(message: Message) { + const msg = JSON.parse(message.body); + const payload = msg.payload; + switch (msg.type) { + case 'CommentCreated': + const c = new Comment(); + c.roomId = this.roomId; + c.body = payload.body; + c.id = payload.id; + c.timestamp = payload.timestamp; + this.comments = this.comments.concat(c); + break; + case 'CommentPatched': + // ToDo: Use a map for comments w/ key = commentId + for (let i = 0; i < this.comments.length; i++) { + if (payload.id === this.comments[i].id) { + for (const [key, value] of Object.entries(payload.changes)) { + switch (key) { + case 'read': + this.comments[i].read = <boolean>value; + break; + case 'correct': + this.comments[i].correct = <boolean>value; + break; + case 'favorite': + this.comments[i].favorite = <boolean>value; + break; + case 'score': + this.comments[i].score = <number>value; + break; + } + } + } + } + break; + case 'CommentHighlighted': + // ToDo: Use a map for comments w/ key = commentId + for (let i = 0; i < this.comments.length; i++) { + if (payload.id === this.comments[i].id) { + this.comments[i].highlighted = <boolean>payload.lights; + } + } + break; + case 'CommentDeleted': + for (let i = 0; i < this.comments.length; i++) { + this.comments = this.comments.filter(function (el) { + return el.id !== payload.id; + }); + } + break; + } + } + + openSubmitDialog(): void { + const dialogRef = this.dialog.open(SubmitCommentComponent, { + width: '400px' + }); + dialogRef.componentInstance.user = this.user; + dialogRef.componentInstance.roomId = this.roomId; + dialogRef.afterClosed() + .subscribe(result => { + if (result) { + this.send(result); + } else { + return; + } + }); } - setRead(comment: Comment): void { - this.comments.find(c => c.id === comment.id).read = !comment.read; - this.commentService.updateComment(comment).subscribe(); + send(comment: Comment): void { + this.wsCommentService.add(comment); } - delete(comment: Comment): void { - this.comments = this.comments.filter(c => c !== comment); - this.commentService.deleteComment(comment.id).subscribe(room => { - this.notification.show(`Comment '${comment.subject}' successfully deleted.`); + openExportDialog(): void { + const dialogRef = this.dialog.open(CommentExportComponent, { + width: '400px' }); + dialogRef.componentInstance.comments = this.comments; + } + + filterFavorite(): void { + this.filteredComments = this.comments.filter(c => c.favorite); + } + + filterMarkAsRead(): void { + this.filteredComments = this.comments.filter(c => c.read); + } + + filterMarkAsCorrect(): void { + this.filteredComments = this.comments.filter(c => c.correct); + } + + sortVote(): void { + this.comments.sort((a, b) => { + return a.score - b.score; + }); + } + + sortVoteDesc(): void { + this.comments.sort((a, b) => { + return b.score - a.score; + }); + } + + sortTimeStamp(): void { + this.comments.sort((a, b) => { + const dateA = new Date(a.timestamp), dateB = new Date(b.timestamp); + return +dateB - +dateA; + }); + } + + deleteComments(): void { + this.commentService.deleteCommentsByRoomId(this.roomId).subscribe(); } } diff --git a/src/app/components/shared/comment-page/comment-page.component.html b/src/app/components/shared/comment-page/comment-page.component.html new file mode 100644 index 0000000000000000000000000000000000000000..44f9d6b44659f93e633ed89748bd90770abf62ce --- /dev/null +++ b/src/app/components/shared/comment-page/comment-page.component.html @@ -0,0 +1,6 @@ +<div fxLayout="column" fxLayoutAlign="center" fxLayoutGap="20px"> + <div fxLayout="row" fxLayoutAlign="center"> + <app-comment-list [user]="user" [roomId]="roomId"></app-comment-list> + </div> +</div> + diff --git a/src/app/components/shared/comment-page/comment-page.component.scss b/src/app/components/shared/comment-page/comment-page.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..501394eb496b8c96db882589073de268cfcb434a --- /dev/null +++ b/src/app/components/shared/comment-page/comment-page.component.scss @@ -0,0 +1,4 @@ +app-comment-list { + width: 100%; + max-width: 800px; +} diff --git a/src/app/components/participant/comment-create-page/comment-create-page.component.spec.ts b/src/app/components/shared/comment-page/comment-page.component.spec.ts similarity index 51% rename from src/app/components/participant/comment-create-page/comment-create-page.component.spec.ts rename to src/app/components/shared/comment-page/comment-page.component.spec.ts index 5db9a7cbab98cfbc030de539c2b687a12c506703..de9e0a549095b50aebd1bcd4d020a2a1b99510ca 100644 --- a/src/app/components/participant/comment-create-page/comment-create-page.component.spec.ts +++ b/src/app/components/shared/comment-page/comment-page.component.spec.ts @@ -1,20 +1,20 @@ /* import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import { CommentCreatePageComponent } from './comment-create-page.component'; +import { CommentPageComponent } from './comment-page.component'; -describe('CommentCreatePageComponent', () => { - let component: CommentCreatePageComponent; - let fixture: ComponentFixture<CommentCreatePageComponent>; +describe('CommentPageComponent', () => { + let component: CommentPageComponent; + let fixture: ComponentFixture<CommentPageComponent>; beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ CommentCreatePageComponent ] + declarations: [ CommentPageComponent ] }) .compileComponents(); })); beforeEach(() => { - fixture = TestBed.createComponent(CommentCreatePageComponent); + fixture = TestBed.createComponent(CommentPageComponent); component = fixture.componentInstance; fixture.detectChanges(); }); diff --git a/src/app/components/shared/comment-page/comment-page.component.ts b/src/app/components/shared/comment-page/comment-page.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..725fc8800b5bee1039f167bd72cd7a67c7d2e52f --- /dev/null +++ b/src/app/components/shared/comment-page/comment-page.component.ts @@ -0,0 +1,24 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; +import { User } from '../../../models/user'; +import { NotificationService } from '../../../services/util/notification.service'; +import { AuthenticationService } from '../../../services/http/authentication.service'; + +@Component({ + selector: 'app-comment-page', + templateUrl: './comment-page.component.html', + styleUrls: ['./comment-page.component.scss'] +}) +export class CommentPageComponent implements OnInit { + roomId: string; + user: User; + + constructor(private route: ActivatedRoute, + private notification: NotificationService, + private authenticationService: AuthenticationService) { } + + ngOnInit(): void { + this.roomId = localStorage.getItem('roomId'); + this.user = this.authenticationService.getUser(); + } +} diff --git a/src/app/components/shared/comment/comment.component.html b/src/app/components/shared/comment/comment.component.html new file mode 100644 index 0000000000000000000000000000000000000000..a6146daeac83fdcca50b475c4917afea6f2bfb2b --- /dev/null +++ b/src/app/components/shared/comment/comment.component.html @@ -0,0 +1,37 @@ +<mat-card id="comment-card" [ngClass]="{true : 'highlighted', false: ''}[comment.highlighted]" [@slide]> + <div fxLayout="column"> + <div fxLayout="row"> + <span class="fill-remaining-space"></span> + <div id="date"> + <div *ngIf="language === 'de'; else englishDate"> + {{comment.timestamp | date: ' HH:mm:ss '}}Uhr,{{comment.timestamp | date: ' M.d.yy'}} + </div> + <ng-template #englishDate> + {{comment.timestamp | date: 'h:mm:ss a, M/d/yy'}} + </ng-template> + </div> + <button mat-icon-button *ngIf="comment.correct || !isStudent" [disabled]="isStudent" (click)="setCorrect(comment)" [matTooltip]="comment.correct ? 'Unmark as correct' : 'Mark as correct'"> + <mat-icon [ngClass]="{true : 'correct-icon', false: 'not-marked'}[comment.correct]">check_circle</mat-icon> + </button> + <button mat-icon-button *ngIf="comment.favorite || !isStudent" [disabled]="isStudent" (click)="setFavorite(comment)" [matTooltip]="comment.favorite ? 'Mark as not favorite' : 'Mark as favorite'"> + <mat-icon [ngClass]="{true: 'favorite-icon', false: 'not-marked'}[comment.favorite]">favorite_border</mat-icon> + </button> + <button mat-icon-button [disabled]="isStudent" (click)="setRead(comment)" [matTooltip]="comment.read ? 'Mark as unread' : 'Mark as read'"> + <mat-icon class="icon" [ngClass]="{true: 'read-icon', false: 'not-marked'}[comment.read]">visibility</mat-icon> + </button> + </div> + <div fxLayout="row"> + <div class="body" (click)="openPresentDialog(comment)">{{comment.body}}</div> + <span class="fill-remaining-space" (click)="openPresentDialog(comment)"></span> + <div fxLayout="column" (tap)="startAnimation('rubberBand')" [@rubberBand]="animationState" (@rubberBand.done)="resetAnimationState()"> + <button mat-icon-button [disabled]="!isStudent" (click)="voteUp(comment)" > + <mat-icon class="voting-icon" [ngClass]="{'upVoted' : hasVoted === 1}">keyboard_arrow_up</mat-icon> + </button> + <h2>{{comment.score}}</h2> + <button mat-icon-button [disabled]="!isStudent" (click)="voteDown(comment)"> + <mat-icon class="voting-icon" [ngClass]="{'downVoted' : hasVoted === -1}">keyboard_arrow_down</mat-icon> + </button> + </div> + </div> + </div> + </mat-card> diff --git a/src/app/components/shared/comment/comment.component.scss b/src/app/components/shared/comment/comment.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..cda2a043d60b9cf796ad8546d1240c75e4cf31af --- /dev/null +++ b/src/app/components/shared/comment/comment.component.scss @@ -0,0 +1,83 @@ +#comment-card { + margin-bottom: 20px; + background-color: var(--background-2); + cursor: pointer; + padding-bottom: 10px; + padding-top: 10px; + padding-right: 5px; + transition: background-color 1s linear; +} + +mat-card-content > :first-child { + margin-top: 20px; +} + +.voting-icon { + width: 35px; + height: 35px; + font-size: 35px; + line-height: 100% !important; +} + +.upVoted { + color: var(--green); +} + +.downVoted { + color: var(--red); +} + +.not-marked { + color: var(--grey); +} + +.correct-icon { + color: var(--green); +} + +.read-icon { + color: var(--blue); +} + +.favorite-icon { + color: var(--yellow); +} + +h2 { + text-align: center; + margin: 0; +} + +.body { + min-width: 200px; + min-height: 100px; + text-align: start; + font-size: 140%; + max-height: 120px; + overflow: auto; + padding-left: 2%; + padding-right: 2%; +} + +.mat-icon { + transform: scale(1.2); +} + +#date { + padding-top: 10px; + margin-left: 2%; + opacity: 0.4; + position: absolute; +} + +.date { + position: fixed; + bottom: 0; + left: 0; +} + +.highlighted { + background-color: var(--highlighted)!important; + transition: background-color 1s linear; +} + diff --git a/src/app/components/shared/comment/comment.component.spec.ts b/src/app/components/shared/comment/comment.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..5d05159bb6d681d54e8586e27b3ccccf1fb82289 --- /dev/null +++ b/src/app/components/shared/comment/comment.component.spec.ts @@ -0,0 +1,26 @@ +/*import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { CommentComponent } from './comment.component'; + +describe('CommentComponent', () => { + let component: CommentComponent; + let fixture: ComponentFixture<CommentComponent>; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ CommentComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(CommentComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); +*/ diff --git a/src/app/components/shared/comment/comment.component.ts b/src/app/components/shared/comment/comment.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..b9f315b9591c01e23adbd190345e8020aeb4a949 --- /dev/null +++ b/src/app/components/shared/comment/comment.component.ts @@ -0,0 +1,150 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { Comment } from '../../../models/comment'; +import { AuthenticationService } from '../../../services/http/authentication.service'; +import { ActivatedRoute } from '@angular/router'; +import { Location } from '@angular/common'; +import { CommentService } from '../../../services/http/comment.service'; +import { NotificationService } from '../../../services/util/notification.service'; +import { TranslateService } from '@ngx-translate/core'; +import { LanguageService } from '../../../services/util/language.service'; +import { WsCommentServiceService } from '../../../services/websockets/ws-comment-service.service'; +import { PresentCommentComponent } from '../_dialogs/present-comment/present-comment.component'; +import { MatDialog } from '@angular/material'; +import { trigger, transition, style, animate, state, keyframes } from '@angular/animations'; + +export const rubberBand = [ + style({ transform: 'scale3d(1, 1, 1)', offset: 0 }), + style({ transform: 'scale3d(1.05, 0.75, 1)', offset: 0.3 }), + style({ transform: 'scale3d(0.75, 1.05, 1)', offset: 0.4 }), + style({ transform: 'scale3d(1.05, 0.95, 1)', offset: 0.5 }), + style({ transform: 'scale3d(0.95, 1.05, 1)', offset: 0.65 }), + style({ transform: 'scale3d(1.05, 0.95, 1)', offset: 0.75 }), + style({ transform: 'scale3d(1, 1, 1)', offset: 1 }) +]; + +@Component({ + selector: 'app-comment', + templateUrl: './comment.component.html', + styleUrls: ['./comment.component.scss'], + animations: [ + trigger('slide', [ + state('void', style({ opacity: 0, transform: 'translateY(-10px)' })), + transition('void <=> *', animate(700)), + ]), + trigger('rubberBand', [ + transition('* => rubberBand', animate(1000, keyframes(rubberBand))), + ]) + ] +}) + +export class CommentComponent implements OnInit { + @Input() comment: Comment; + isStudent = false; + isLoading = true; + hasVoted = 0; + language: string; + animationState: string; + + constructor(protected authenticationService: AuthenticationService, + private route: ActivatedRoute, + private location: Location, + private commentService: CommentService, + private notification: NotificationService, + private translateService: TranslateService, + public dialog: MatDialog, + protected langService: LanguageService, + private wsCommentService: WsCommentServiceService) { + langService.langEmitter.subscribe(lang => { + translateService.use(lang); + this.language = lang; + } ); + } + + ngOnInit() { + if (this.authenticationService.getRole() === 0) { + this.isStudent = true; + } + this.language = localStorage.getItem('currentLang'); + this.translateService.use(this.language); + } + + startAnimation(state_: any): void { + if (!this.animationState) { + this.animationState = state_; + } + } + + resetAnimationState(): void { + this.animationState = ''; + } + + setRead(comment: Comment): void { + this.comment = this.wsCommentService.toggleRead(comment); + } + + setCorrect(comment: Comment): void { + this.comment = this.wsCommentService.toggleCorrect(comment); + } + + setFavorite(comment: Comment): void { + this.comment = this.wsCommentService.toggleFavorite(comment); + } + + voteUp(comment: Comment): void { + const userId = this.authenticationService.getUser().id; + if (this.hasVoted !== 1) { + this.wsCommentService.voteUp(comment, userId); + this.hasVoted = 1; + } + } + + voteDown(comment: Comment): void { + const userId = this.authenticationService.getUser().id; + if (this.hasVoted !== -1) { + this.wsCommentService.voteDown(comment, userId); + this.hasVoted = -1; + } + } + + delete(comment: Comment): void { + this.commentService.deleteComment(comment.id).subscribe(room => { + this.notification.show(`Comment '${comment.body}' successfully deleted.`); + }); + } + + goToFullScreen(element: Element): void { + if (element.requestFullscreen) { + element.requestFullscreen(); + } + } + + exitFullScreen(): void { + if (document.exitFullscreen) { + document.exitFullscreen(); + } + } + + openPresentDialog(comment: Comment): void { + this.goToFullScreen(document.documentElement); + if (this.isStudent === false) { + this.wsCommentService.highlight(comment); + } + const dialogRef = this.dialog.open(PresentCommentComponent, { + position: { + left: '10px', + right: '10px' + }, + maxWidth: '100vw', + maxHeight: '100vh', + height: '100%', + width: '100%' + }); + dialogRef.componentInstance.body = comment.body; + dialogRef.afterClosed() + .subscribe(result => { + this.wsCommentService.lowlight(comment); + this.exitFullScreen(); + + }); + } +} diff --git a/src/app/components/shared/content-groups/content-groups.component.html b/src/app/components/shared/content-groups/content-groups.component.html index 5e3f715c19ea95d13c8c6f8c22e720e411bcb2e8..9f29f380bd59352f2d1ddd3b5bbd14c933c32760 100644 --- a/src/app/components/shared/content-groups/content-groups.component.html +++ b/src/app/components/shared/content-groups/content-groups.component.html @@ -1,4 +1,4 @@ -<mat-card *ngFor="let contentGroup of contentGroups" (click)="viewContents(contentGroup)"> +<mat-card id="contentGroup" *ngFor="let contentGroup of contentGroups" (click)="viewContents(contentGroup)"> <mat-card-header> <mat-card-title *ngIf="contentGroup.name === 'Default'"> {{'room-page.default-content-group' | translate}} diff --git a/src/app/components/shared/content-groups/content-groups.component.scss b/src/app/components/shared/content-groups/content-groups.component.scss index 4d3c7ce2830ac92e6fae567a70b8593a9508bdd1..3feaad67d10d8986ec94a22d00ea52802abbd351 100644 --- a/src/app/components/shared/content-groups/content-groups.component.scss +++ b/src/app/components/shared/content-groups/content-groups.component.scss @@ -1,20 +1,20 @@ -@import '../../../../theme/_variables.scss'; +@import '../../../../theme/default-Theme/_variables.scss'; -.mat-card { - background-color: #bbdefb; +#contentGroup { + background-color: var(--background-2); box-shadow: 0 2px 2px rgba(0, 0, 0, 0.2); overflow: hidden; position: relative; top: 0; text-align: center; - transition: all 0.5; + transition: all 0.5s; margin-top: 10px; max-height: 50px; padding: 5px; &:hover { cursor: pointer; - background-color: mat-color($arsnova-primary, 200); + background-color: var(--primary); transform: translateZ(20px); transform: translateY(-5px); transform: scaleY(1.1); diff --git a/src/app/components/shared/feedback-barometer-page/feedback-barometer-page.component.ts b/src/app/components/shared/feedback-barometer-page/feedback-barometer-page.component.ts index 3305628f67143578ef89083581a8ff0d301341e2..4be55a5e1ad307728e11ce53787fa1448674688e 100644 --- a/src/app/components/shared/feedback-barometer-page/feedback-barometer-page.component.ts +++ b/src/app/components/shared/feedback-barometer-page/feedback-barometer-page.component.ts @@ -5,8 +5,7 @@ import { UserRole } from '../../../models/user-roles.enum'; import { NotificationService } from '../../../services/util/notification.service'; import { RxStompService } from '@stomp/ng2-stompjs'; import { Message } from '@stomp/stompjs'; -import { CreateFeedback } from '../../../models/messages/create-feedback'; -import { GetFeedback } from '../../../models/messages/get-feedback'; +import { WsFeedbackService } from '../../../services/websockets/ws-feedback.service'; /* ToDo: Use TranslateService */ @@ -29,6 +28,7 @@ export class FeedbackBarometerPageComponent implements OnInit { private authenticationService: AuthenticationService, private notification: NotificationService, private rxStompService: RxStompService, + private wsFeedbackService: WsFeedbackService, private route: ActivatedRoute, ) { this.roomId = localStorage.getItem(`roomId`); } @@ -36,16 +36,11 @@ export class FeedbackBarometerPageComponent implements OnInit { ngOnInit() { this.userRole = this.authenticationService.getRole(); - this.rxStompService.watch(`/room/${this.roomId}/feedback.stream`).subscribe((message: Message) => { + this.rxStompService.watch(`/topic/${this.roomId}.feedback.stream`).subscribe((message: Message) => { this.parseIncomingMessage(message); }); - const getFeedback = new GetFeedback(); - - this.rxStompService.publish({ - destination: `/backend/room/${this.roomId}/feedback.query`, - body: JSON.stringify(getFeedback) - }); + this.wsFeedbackService.get(this.roomId); } private updateFeedback(data) { @@ -57,11 +52,7 @@ export class FeedbackBarometerPageComponent implements OnInit { } submitFeedback(state: number) { - const createFeedback = new CreateFeedback(state); - this.rxStompService.publish({ - destination: `/backend/room/${this.roomId}/feedback.command`, - body: JSON.stringify(createFeedback) - }); + this.wsFeedbackService.send(state, this.roomId); } toggle() { diff --git a/src/app/components/shared/footer/footer.component.html b/src/app/components/shared/footer/footer.component.html index 88fad08f0c25bcf9ccc8a49cb586bbebf49c4ffa..de5fb87f9d45054f73ed516ea3c65e2f43c8b34b 100644 --- a/src/app/components/shared/footer/footer.component.html +++ b/src/app/components/shared/footer/footer.component.html @@ -1,5 +1,5 @@ <footer> - <mat-toolbar> + <mat-toolbar id="footer-toolbar"> <button mat-button (click)="navToBlog()"> <mat-icon>notes</mat-icon> Blog diff --git a/src/app/components/shared/footer/footer.component.scss b/src/app/components/shared/footer/footer.component.scss index d3f2b1f8f7451107895b9c9204abadd9d8b23356..12f631a965bf22c774e601f4a425209f5ca04fe9 100644 --- a/src/app/components/shared/footer/footer.component.scss +++ b/src/app/components/shared/footer/footer.component.scss @@ -1,22 +1,24 @@ footer { - overflow-y: auto; + overflow-y: auto; } -mat-toolbar { - background-color: rgb(240, 240, 240); +#footer-toolbar { + background-color: var(--grey-light); height: auto; + &:first-child { - padding-left: 0px; + padding-left: 0; } + &:last-child { - padding-right: 0px; + padding-right: 0; } } -button { +.mat-button { min-height: 28px; font-size: 12px; - color: #80cbc4; + color: var(--text-1); } mat-icon { diff --git a/src/app/components/shared/header/header.component.html b/src/app/components/shared/header/header.component.html index ad321a5fe44d21a6d4337bdceb91751121a81ad7..3630af2b2935c661916fc3e413dd6e54eac4c785 100644 --- a/src/app/components/shared/header/header.component.html +++ b/src/app/components/shared/header/header.component.html @@ -1,4 +1,4 @@ -<mat-toolbar color="primary"> +<mat-toolbar> <mat-toolbar-row> <button *ngIf="router.url !== '/home'" (click)="goBack()" mat-icon-button> <mat-icon aria-label="Go back">keyboard_arrow_left</mat-icon> @@ -7,6 +7,15 @@ <span *ngIf="router.url !== '/home'" class="app-title" (click)="goToHomepage()">ARSnova</span> <span class="fill-remaining-space"></span> + <mat-menu #themeMenu="matMenu" [overlapTrigger]="false"> + <button mat-menu-item (click)="changeTheme('')">{{ 'header.default' | translate }}</button> + <button mat-menu-item (click)="changeTheme('dark')">{{ 'header.dark' | translate }}</button> + </mat-menu> + + <button mat-icon-button [matMenuTriggerFor]="themeMenu"> + <mat-icon>palette</mat-icon> + </button> + <mat-menu #langMenu="matMenu" [overlapTrigger]="false"> <button mat-menu-item (click)="useLanguage('de')">{{ 'header.german' | translate }}</button> <button mat-menu-item (click)="useLanguage('en')">{{ 'header.english' | translate }}</button> @@ -46,8 +55,7 @@ <mat-icon>account_box</mat-icon> </button> <button mat-icon-button *ngIf="user" [matMenuTriggerFor]="appMenu"> - <mat-icon *ngIf="user.role === 1" aria-label="Example icon-button with a heart icon" color="accent">record_voice_over</mat-icon> - <mat-icon *ngIf="user.role === 0" aria-label="Example icon-button with a heart icon" color="accent">supervisor_account</mat-icon> + <mat-icon>account_box</mat-icon> </button> </mat-toolbar-row> </mat-toolbar> diff --git a/src/app/components/shared/header/header.component.scss b/src/app/components/shared/header/header.component.scss index b6d58aaad2779116a99d1597954c9743fd4a7d61..b1e7f6dd49fe4fc4dad6b91ec68414a23837343c 100644 --- a/src/app/components/shared/header/header.component.scss +++ b/src/app/components/shared/header/header.component.scss @@ -2,3 +2,7 @@ cursor: pointer; margin: 0 auto; } + +mat-toolbar { + background-color: var(--primary); +} diff --git a/src/app/components/shared/header/header.component.ts b/src/app/components/shared/header/header.component.ts index b3bb28fb8b2d72159f3b96d4ca444239d73bbfcc..af51e148a7973d11febe35b944d733dc985ff716 100644 --- a/src/app/components/shared/header/header.component.ts +++ b/src/app/components/shared/header/header.component.ts @@ -9,6 +9,7 @@ import { TranslateService } from '@ngx-translate/core'; import { LanguageService } from '../../../services/util/language.service'; import { MatDialog } from '@angular/material'; import { LoginComponent } from '../login/login.component'; +import { ThemeService } from '../../../../theme/theme.service'; @Component({ selector: 'app-header', @@ -17,6 +18,7 @@ import { LoginComponent } from '../login/login.component'; }) export class HeaderComponent implements OnInit { user: User; + themeClass = localStorage.getItem('classNameOfTheme'); constructor(public location: Location, private authenticationService: AuthenticationService, @@ -24,7 +26,9 @@ export class HeaderComponent implements OnInit { public router: Router, private translationService: TranslateService, private langService: LanguageService, - public dialog: MatDialog) { + public dialog: MatDialog, + private themeService: ThemeService + ) { } ngOnInit() { @@ -61,12 +65,21 @@ export class HeaderComponent implements OnInit { this.langService.langEmitter.emit(language); } - login(isDozent: boolean) { + changeTheme(theme) { + this.themeClass = theme; + localStorage.setItem('classNameOfTheme', theme); + if (theme === '') { + this.themeService.setActiveThem('arsnovaTheme'); + } else { + this.themeService.setActiveThem(theme); + } + } + + login(isLecturer: boolean) { const dialogRef = this.dialog.open(LoginComponent, { width: '350px' }); - const role = (isDozent === true) ? UserRole.CREATOR : UserRole.PARTICIPANT; - dialogRef.componentInstance.role = role; + dialogRef.componentInstance.role = (isLecturer === true) ? UserRole.CREATOR : UserRole.PARTICIPANT; dialogRef.componentInstance.isStandard = true; } diff --git a/src/app/components/shared/list-statistic/list-statistic.component.scss b/src/app/components/shared/list-statistic/list-statistic.component.scss index fba3ef597b72d78b67351919e6edaf288748d76a..9b037ced37ed9539b22f932fb55619a40a4010c6 100644 --- a/src/app/components/shared/list-statistic/list-statistic.component.scss +++ b/src/app/components/shared/list-statistic/list-statistic.component.scss @@ -1,4 +1,4 @@ -table{ +table { width: 100%; } @@ -24,50 +24,51 @@ table{ } mat-header-cell { - color: #4db6ac; - background-color: #e0e0e0; + color: black!important; + background-color: var(--grey); } mat-cell { - background-color: #E0E0E0; + color: black!important; + background-color: var(--grey-light); } mat-toolbar { height: 20px; - background-color: #fff8e1; + background-color: var(--card)!important; } .positiveC { - background-color: #AED581; + background-color: var(--green); } .negativeC { - background-color: #FF8A65; + background-color: var(--red); } .okayC { - background-color: #FFD54F; + background-color: var(--red); } .positiveP { - background-color: #AED581 !important; + background-color: var(--green)!important; } .negativeP { - background-color: #FF8A65 !important; + background-color: var(--red)!important; } .okayP { - background-color: #FFB74D !important; + background-color: var(--yellow)!important; } .emptyC { - color: #E0E0E0; - background: #E0E0E0; + color: var(--grey)!important; + background: var(--grey); pointer-events: none; } .emptyCC { - background: #E0E0E0; + background: var(--grey) ; pointer-events: none; } diff --git a/src/app/components/shared/login/login.component.html b/src/app/components/shared/login/login.component.html index 01e85e02defd5f7310021b121909e18c0ef8323a..055c6116efc7da46d691af798b4cbf498c27a8bb 100644 --- a/src/app/components/shared/login/login.component.html +++ b/src/app/components/shared/login/login.component.html @@ -24,7 +24,7 @@ </button> </div> <div fxLayout="row"> - <p>Noch keinen Account?</p> + <p>{{ 'login-page.not-registered' | translate }}</p> <button mat-button color="primary" class="regButton" (click)="openRegisterDialog()"> {{ 'login-page.register' | translate }} </button> diff --git a/src/app/components/shared/login/login.component.scss b/src/app/components/shared/login/login.component.scss index bdb5da25a13399581499b15b859b333f9d59bbbc..979c20185f30306a2ad7c51b03a80c348936bd6a 100644 --- a/src/app/components/shared/login/login.component.scss +++ b/src/app/components/shared/login/login.component.scss @@ -1,16 +1,21 @@ .pwReset { - padding-left: 0px; + padding-left: 0; } .regButton { margin-top: 20px; - padding: 0px; + padding: 0; } p { font-size: small; - margin-bottom: 0px; - margin-top: 30px; - margin-left: 30px; - margin-right: 5px; -} \ No newline at end of file + margin: 30px 5px 0 30px; +} + +input:-webkit-autofill { + background-color: var(--dialog); + -webkit-box-shadow: 0 0 0 1000px var(--dialog) inset; +} + + + diff --git a/src/app/components/shared/login/login.component.ts b/src/app/components/shared/login/login.component.ts index e05319c1590dc2c6799ea78eba4d9d11f3b508de..9bda7d3ea12443308ec89a4d841200805ffda5b5 100644 --- a/src/app/components/shared/login/login.component.ts +++ b/src/app/components/shared/login/login.component.ts @@ -9,6 +9,7 @@ import { TranslateService } from '@ngx-translate/core'; import { UserActivationComponent } from '../../home/_dialogs/user-activation/user-activation.component'; import { PasswordResetComponent } from '../../home/_dialogs/password-reset/password-reset.component'; import { RegisterComponent } from '../../home/_dialogs/register/register.component'; +import { ThemeService } from '../../../../theme/theme.service'; export class LoginErrorStateMatcher implements ErrorStateMatcher { isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean { @@ -40,6 +41,7 @@ export class LoginComponent implements OnInit, OnChanges { public router: Router, private translationService: TranslateService, public notificationService: NotificationService, + private themeService: ThemeService, public dialog: MatDialog, @Inject(MAT_DIALOG_DATA) public data: any) { } @@ -105,6 +107,7 @@ export class LoginComponent implements OnInit, OnChanges { if (this.isStandard) { if (this.role === UserRole.CREATOR) { this.router.navigate(['creator']); + this.themeService.setActiveThem('dark'); } else { this.router.navigate(['participant']); } diff --git a/src/app/components/shared/room-list/room-list.component.html b/src/app/components/shared/room-list/room-list.component.html index 6b7c0dffe8f87dbec1bffcdefd7148092f96f790..cc6dbe0a5acd5927d3cd19c0f98505c9d0311d85 100644 --- a/src/app/components/shared/room-list/room-list.component.html +++ b/src/app/components/shared/room-list/room-list.component.html @@ -1,26 +1,29 @@ -<mat-expansion-panel [disabled]="true" class="matPanelHeader"> - <mat-expansion-panel-header> - <mat-panel-title class="headerTitle">Name</mat-panel-title> - <mat-panel-description>Session-Id</mat-panel-description> - </mat-expansion-panel-header> -</mat-expansion-panel> -<mat-expansion-panel *ngFor="let room of rooms" class="matPanel"> - <mat-expansion-panel-header class="matPanelListHeader"> - <button mat-button color="primary" routerLink="/{{ baseUrl }}/room/{{ room.shortId }}"> - <mat-icon>input</mat-icon> - </button> - <mat-panel-title> - {{ room.name }} - </mat-panel-title> - <mat-panel-description> - {{ room.shortId.slice(0,4) }} {{ room.shortId.slice(4,8) }} - </mat-panel-description> - </mat-expansion-panel-header> - <p> - {{ room.description }} - </p> -</mat-expansion-panel> -<mat-card *ngIf="rooms && rooms.length === 0"> +<div *ngIf="rooms && rooms.length != 0"> + <mat-expansion-panel [disabled]="true" id="matPanelHeader"> + <mat-expansion-panel-header> + <mat-panel-title class="headerTitle">Name</mat-panel-title> + <mat-panel-description class="headerTitle">Session-Id</mat-panel-description> + </mat-expansion-panel-header> + </mat-expansion-panel> + <mat-expansion-panel *ngFor="let room of rooms" class="matPanel"> + <mat-expansion-panel-header class="matPanelListHeader"> + <button mat-button routerLink="/{{ baseUrl }}/room/{{ room.shortId }}"> + <mat-icon>input</mat-icon> + </button> + <mat-panel-title class="panelTitle"> + {{ room.name }} + </mat-panel-title> + <mat-panel-description class="panelTitle"> + {{ room.shortId.slice(0,4) }} {{ room.shortId.slice(4,8) }} + </mat-panel-description> + </mat-expansion-panel-header> + <p> + {{ room.description }} + </p> + </mat-expansion-panel> +</div> + +<mat-card id="no-sessions-card" *ngIf="rooms && rooms.length === 0"> <mat-card-header> <mat-card-title *ngIf="baseUrl === 'creator'">Sie haben noch keine Sessions erstellt!</mat-card-title> <mat-card-title *ngIf="baseUrl === 'participant'">Sie sind noch keiner Session beigetreten!</mat-card-title> diff --git a/src/app/components/shared/room-list/room-list.component.scss b/src/app/components/shared/room-list/room-list.component.scss index a269ce031e7103581728d800bf1c3eee57b7cedd..476d30188f17d8d945c76b08b24ffcd4fbe87360 100644 --- a/src/app/components/shared/room-list/room-list.component.scss +++ b/src/app/components/shared/room-list/room-list.component.scss @@ -1,5 +1,6 @@ button { margin-right: 10px; + color: var(--primary); } .mat-expansion-panel-header-description { @@ -7,18 +8,21 @@ button { align-items: center; } + .matPanel { - background-color: #cfd8dc; + background-color: var(--grey); margin-bottom: 5px; + color: black!important; } -.matPanelHeader { - background-color: #bbdefb; +#matPanelHeader { + background-color: var(--grey-light); margin-bottom: 5px; + color: white; } .matPanelListHeader { - background-color: #cfd8dc !important; + background-color: var(--grey) !important; } mat-panel-title { @@ -28,14 +32,21 @@ mat-panel-title { } .headerTitle { - width: 8%!important; + width: 8%; + color: var(--primary)!important; +} + +.panelTitle { + width: 8%; + color: black!important; } + mat-card-title { text-align: center; } -mat-card { - background-color: #cfd8dc; - color: #4db6ac; +#no-sessions-card { + background-color: var(--grey); + color: var(--primary); } diff --git a/src/app/components/shared/shared.module.ts b/src/app/components/shared/shared.module.ts index e10dbff2d52e6f3bbfcc9f0b2d12db1bfd8e9351..13a09ef9f2f855eedc99ec50854a9fa60a48de42 100644 --- a/src/app/components/shared/shared.module.ts +++ b/src/app/components/shared/shared.module.ts @@ -11,7 +11,7 @@ import { RoomPageComponent } from './room-page/room-page.component'; import { StatisticsPageComponent } from './statistics-page/statistics-page.component'; import { AnswerEditComponent } from '../creator/_dialogs/answer-edit/answer-edit.component'; import { ContentDeleteComponent } from '../creator/_dialogs/content-delete/content-delete.component'; -import { CommentCreatePageComponent } from '../participant/comment-create-page/comment-create-page.component'; +import { CommentPageComponent } from './comment-page/comment-page.component'; import { EssentialsModule } from '../essentials/essentials.module'; import { SharedRoutingModule } from './shared-routing.module'; import { ListStatisticComponent } from './list-statistic/list-statistic.component'; @@ -21,6 +21,9 @@ import { RoomJoinComponent } from './room-join/room-join.component'; import { RoomCreateComponent } from './_dialogs/room-create/room-create.component'; import { LoginComponent } from './login/login.component'; import { StatisticHelpComponent } from './_dialogs/statistic-help/statistic-help.component'; +import { CommentComponent } from './comment/comment.component'; +import { SubmitCommentComponent } from './_dialogs/submit-comment/submit-comment.component'; +import { PresentCommentComponent } from './_dialogs/present-comment/present-comment.component'; @NgModule({ imports: [ @@ -41,14 +44,17 @@ import { StatisticHelpComponent } from './_dialogs/statistic-help/statistic-help FeedbackBarometerPageComponent, FooterComponent, FeedbackBarometerPageComponent, - CommentCreatePageComponent, + CommentPageComponent, CommentListComponent, StatisticsPageComponent, ListStatisticComponent, StatisticComponent, RoomCreateComponent, LoginComponent, - StatisticHelpComponent + StatisticHelpComponent, + CommentComponent, + SubmitCommentComponent, + PresentCommentComponent ], exports: [ RoomJoinComponent, @@ -62,14 +68,18 @@ import { StatisticHelpComponent } from './_dialogs/statistic-help/statistic-help FeedbackBarometerPageComponent, FooterComponent, FeedbackBarometerPageComponent, - CommentCreatePageComponent, + CommentPageComponent, CommentListComponent, - StatisticsPageComponent + StatisticsPageComponent, + SubmitCommentComponent, + PresentCommentComponent ], entryComponents: [ RoomCreateComponent, LoginComponent, - StatisticHelpComponent + StatisticHelpComponent, + SubmitCommentComponent, + PresentCommentComponent ] }) export class SharedModule { diff --git a/src/app/components/shared/statistic/statistic.component.scss b/src/app/components/shared/statistic/statistic.component.scss index d07ab6d241c8f65ef921219580f790812601080f..b3d28b34419822d0923029c4b87479996438430e 100644 --- a/src/app/components/shared/statistic/statistic.component.scss +++ b/src/app/components/shared/statistic/statistic.component.scss @@ -1,12 +1,12 @@ mat-card { width: 800px; max-width: 90%; - background-color: #fff8e1 !important; + background-color: var(--card)!important; } mat-toolbar { height: 15px; - background-color: #fff8e1; + background-color: var(--card)!important; } .mat-icon-button { @@ -21,3 +21,11 @@ mat-icon { width: 40px; line-height: 100%!important; } + +h4 { + color: var(--text-1); +} + +mat-list-item { + color: var(--text-1)!important; +} diff --git a/src/app/components/shared/statistics-page/statistics-page.component.scss b/src/app/components/shared/statistics-page/statistics-page.component.scss index 08972d1c030798333897c9ba181b91bf0b267b91..632a4b0da76dfbe912a359a0936d0af532abe3e2 100644 --- a/src/app/components/shared/statistics-page/statistics-page.component.scss +++ b/src/app/components/shared/statistics-page/statistics-page.component.scss @@ -2,5 +2,9 @@ mat-card { width: 800px; max-width: 90%; min-height: 300px; - background-color: #fff8e1 !important; + background-color: var(--card)!important; +} + +h2 { + color: var(--text-1); } diff --git a/src/app/models/comment.ts b/src/app/models/comment.ts index aed78ce9a3d621aaf7524545b47ab305c579a924..17e3a638a94abb4e5562f2c0241b0da49f1f6cd2 100644 --- a/src/app/models/comment.ts +++ b/src/app/models/comment.ts @@ -3,8 +3,36 @@ export class Comment { roomId: string; userId: string; revision: string; - subject: string; body: string; read: boolean; - creationTimestamp: number; + correct: boolean; + favorite: boolean; + timestamp: Date; + score: number; + createdFromLecturer: boolean; + highlighted: boolean; + + constructor(roomId: string = '', + userId: string = '', + body: string = '', + read: boolean = false, + correct: boolean = false, + favorite: boolean = false, + creationTimestamp: Date = null, + score: number = 0, + createdFromLecturer = false, + highlighted: boolean = false) { + this.id = ''; + this.roomId = roomId; + this.userId = userId; + this.revision = ''; + this.body = body; + this.read = read; + this.correct = correct; + this.favorite = favorite; + this.timestamp = creationTimestamp; + this.score = score; + this.createdFromLecturer = createdFromLecturer; + this.highlighted = highlighted; + } } diff --git a/src/app/models/messages/abstract-vote.ts b/src/app/models/messages/abstract-vote.ts new file mode 100644 index 0000000000000000000000000000000000000000..655ab105d2905c998728ab929be812aded446668 --- /dev/null +++ b/src/app/models/messages/abstract-vote.ts @@ -0,0 +1,17 @@ +export abstract class AbstractVote { + type: string; + payload: { + userId: string; + commentId: string; + vote: number; + }; + + protected constructor(type: string, userId: string, commentId: string, vote: number) { + this.type = type; + this.payload = { + userId: userId, + commentId: commentId, + vote: vote + }; + } +} diff --git a/src/app/models/messages/create-comment.ts b/src/app/models/messages/create-comment.ts new file mode 100644 index 0000000000000000000000000000000000000000..ca7c5fa54fa4f92461aea73de49b1906f4b2b26a --- /dev/null +++ b/src/app/models/messages/create-comment.ts @@ -0,0 +1,17 @@ +export class CreateComment { + type: string; + payload: { + roomId: string; + creatorId: string; + body: string; + }; + + constructor(roomId: string, creatorId: string, body: string) { + this.type = 'CreateComment'; + this.payload = { + roomId: roomId, + creatorId: creatorId, + body: body + }; + } +} diff --git a/src/app/models/messages/down-vote.ts b/src/app/models/messages/down-vote.ts new file mode 100644 index 0000000000000000000000000000000000000000..5dc52ab375931fc77edc33cb6e9162727767f490 --- /dev/null +++ b/src/app/models/messages/down-vote.ts @@ -0,0 +1,14 @@ +import { AbstractVote } from './abstract-vote'; + +export class DownVote extends AbstractVote { + type: string; + payload: { + userId: string; + commentId: string; + vote: number; + }; + + constructor(userId: string, commentId: string) { + super('Downvote', userId, commentId, -1); + } +} diff --git a/src/app/models/messages/highlight-comment.ts b/src/app/models/messages/highlight-comment.ts new file mode 100644 index 0000000000000000000000000000000000000000..8c884ef2b3ad70bb2a16bed780e35d7b28fbcdba --- /dev/null +++ b/src/app/models/messages/highlight-comment.ts @@ -0,0 +1,15 @@ +export class HighlightComment { + type: string; + payload: { + id: string; + lights: boolean; + }; + + constructor(id: string, lights: boolean) { + this.type = 'HighlightComment'; + this.payload = { + id: id, + lights: lights + }; + } +} diff --git a/src/app/models/messages/patch-comment.ts b/src/app/models/messages/patch-comment.ts new file mode 100644 index 0000000000000000000000000000000000000000..faec58f4e2d9685438749606abb7b352606140b0 --- /dev/null +++ b/src/app/models/messages/patch-comment.ts @@ -0,0 +1,17 @@ +import { TSMap } from 'typescript-map'; + +export class PatchComment { + type: string; + payload: { + id: string; + changes: TSMap<string, any>; + }; + + constructor(id: string, changes: TSMap<string, any>) { + this.type = 'PatchComment'; + this.payload = { + id: id, + changes: changes + }; + } +} diff --git a/src/app/models/messages/up-vote.ts b/src/app/models/messages/up-vote.ts new file mode 100644 index 0000000000000000000000000000000000000000..eef91a512f030870eb7e92492289772de1adb1fe --- /dev/null +++ b/src/app/models/messages/up-vote.ts @@ -0,0 +1,14 @@ +import { AbstractVote } from './abstract-vote'; + +export class UpVote extends AbstractVote { + type: string; + payload: { + userId: string; + commentId: string; + vote: number; + }; + + constructor(userId: string, commentId: string) { + super('Upvote', userId, commentId, 1); + } +} diff --git a/src/app/models/room.ts b/src/app/models/room.ts index e657ecd236f482c25c1272098e2145ab38083a07..1ce435e6e64017bea7e59d6953d8ac4728fb4cbb 100644 --- a/src/app/models/room.ts +++ b/src/app/models/room.ts @@ -1,12 +1,36 @@ import { ContentGroup } from './content-group'; +import { TSMap } from 'typescript-map'; export class Room { id: string; revision: string; + ownerId: string; shortId: string; abbreviation: string; name: string; description: string; closed: boolean; contentGroups: ContentGroup[]; + extensions: TSMap<string, TSMap<string, any>>; + + constructor( + ownerId: string = '', + shortId: string = '', + abbreviation: string = '', + name: string = '', + description: string = '', + closed: boolean = false, + contentGroups: ContentGroup[] = [], + extensions: TSMap<string, TSMap<string, any>> = new TSMap() + ) { + this.id = '', + this.ownerId = ownerId; + this.shortId = shortId; + this.abbreviation = abbreviation; + this.name = name, + this.description = description; + this.closed = closed; + this.contentGroups = contentGroups; + this.extensions = extensions; + } } diff --git a/src/app/models/vote.ts b/src/app/models/vote.ts new file mode 100644 index 0000000000000000000000000000000000000000..74e0b39fef99919830e07790549e3aa44911aa6f --- /dev/null +++ b/src/app/models/vote.ts @@ -0,0 +1,15 @@ +export class Vote { + private id: string; + private userId: string; + private commentId: string; + private vote: number; + + constructor(userId: string , + commentId: string, + vote: number) { + this.id = ''; + this.userId = userId; + this.commentId = commentId; + this.vote = vote; + } +} diff --git a/src/app/rx-stomp.config.ts b/src/app/rx-stomp.config.ts index 70326222a0d4eb3bb8de6041633a864871acfda1..139561d1ffe74f664ac97b9bbea5f2883b9d88a3 100644 --- a/src/app/rx-stomp.config.ts +++ b/src/app/rx-stomp.config.ts @@ -1,9 +1,14 @@ -import { InjectableRxStompConfig } from '@stomp/ng2-stompjs'; +import { RxStompConfig } from '@stomp/rx-stomp'; -export const myRxStompConfig: InjectableRxStompConfig = { +export const ARSRxStompConfig: RxStompConfig = { // Which server? brokerURL: `ws://${window.location.hostname}:8080/ws/websocket`, + connectHeaders: { + login: 'guest', + password: 'guest' + }, + // How often to heartbeat? // Interval in milliseconds, set to 0 to disable heartbeatIncoming: 0, // Typical value 0 - disabled @@ -18,6 +23,6 @@ export const myRxStompConfig: InjectableRxStompConfig = { // It can be quite verbose, not recommended in production // Skip this key to stop logging to console debug: (msg: string): void => { - // console.log(new Date(), 'STOMP debug: ' + msg); + console.log(new Date(), 'STOMP debug: ' + msg); } }; diff --git a/src/app/services/http/authentication.service.ts b/src/app/services/http/authentication.service.ts index 2ac6be1b6f48bbb74a695c8675540d5d2d394a14..32896f412ac95f7bcf050064e2841e7d7681ef40 100644 --- a/src/app/services/http/authentication.service.ts +++ b/src/app/services/http/authentication.service.ts @@ -130,4 +130,8 @@ export class AuthenticationService { get watchUser() { return this.user.asObservable(); } + + getUserAsSubject(): BehaviorSubject<User> { + return this.user; + } } diff --git a/src/app/services/http/comment.service.ts b/src/app/services/http/comment.service.ts index 8f404e05bb18e0a4f0f36e2dea2378cca370fba5..df643a7db61f9f15b3497c94ff7bcc1ee4820c68 100644 --- a/src/app/services/http/comment.service.ts +++ b/src/app/services/http/comment.service.ts @@ -17,14 +17,14 @@ export class CommentService extends BaseHttpService { find: '/find' }; - constructor( private http: HttpClient ) { + constructor(private http: HttpClient) { super(); } getComment(commentId: string): Observable<Comment> { - const connectionUrl = `${ this.apiUrl.base }${ this.apiUrl.comment }/~${ commentId }`; + const connectionUrl = `${this.apiUrl.base}${this.apiUrl.comment}/~${commentId}`; return this.http.get<Comment>(connectionUrl, httpOptions).pipe( - tap (_ => ''), + tap(_ => ''), catchError(this.handleError<Comment>('addComment')) ); } @@ -32,18 +32,18 @@ export class CommentService extends BaseHttpService { addComment(comment: Comment): Observable<Comment> { const connectionUrl = this.apiUrl.base + this.apiUrl.comment + '/'; return this.http.post<Comment>(connectionUrl, - { roomId: comment.roomId, subject: comment.subject, body: comment.body, - read: comment.read, creationTimestamp: comment.creationTimestamp + { roomId: comment.roomId, body: comment.body, + read: comment.read, creationTimestamp: comment.timestamp }, httpOptions).pipe( - tap (_ => ''), - catchError(this.handleError<Comment>('addComment')) - ); + tap(_ => ''), + catchError(this.handleError<Comment>('addComment')) + ); } deleteComment(commentId: string): Observable<Comment> { - const connectionUrl = `${ this.apiUrl.base + this.apiUrl.comment }/${ commentId }`; + const connectionUrl = `${this.apiUrl.base + this.apiUrl.comment}/${commentId}`; return this.http.delete<Comment>(connectionUrl, httpOptions).pipe( - tap (_ => ''), + tap(_ => ''), catchError(this.handleError<Comment>('deleteComment')) ); } @@ -54,16 +54,24 @@ export class CommentService extends BaseHttpService { properties: { roomId: roomId }, externalFilters: {} }, httpOptions).pipe( - tap (_ => ''), + tap(_ => ''), catchError(this.handleError<Comment[]>('getComments', [])) ); } updateComment(comment: Comment): Observable<any> { - const connectionUrl = this.apiUrl + this.apiUrl.comment + '/' + comment.id; + const connectionUrl = this.apiUrl.base + this.apiUrl.comment + '/' + comment.id; return this.http.put(connectionUrl, comment, httpOptions).pipe( tap(_ => ''), catchError(this.handleError<any>('updateComment')) ); } + + deleteCommentsByRoomId(roomId: string): Observable<Comment> { + const connectionUrl = `${this.apiUrl.base + this.apiUrl.comment}/byRoom?roomId=${roomId}`; + return this.http.delete<Comment>(connectionUrl, httpOptions).pipe( + tap(_ => ''), + catchError(this.handleError<Comment>('deleteComment')) + ); + } } diff --git a/src/app/services/http/room.service.ts b/src/app/services/http/room.service.ts index 3ab13d5ae45ded893b7e6885d841135dadeb473c..610f5bc7b267b1a77f3ae36f7eed857f16e4ad81 100644 --- a/src/app/services/http/room.service.ts +++ b/src/app/services/http/room.service.ts @@ -5,6 +5,7 @@ import { Observable } from 'rxjs'; import { catchError, tap, map } from 'rxjs/operators'; import { AuthenticationService } from './authentication.service'; import { BaseHttpService } from './base-http.service'; +import { TSMap } from 'typescript-map'; const httpOptions = { headers: new HttpHeaders({}) @@ -48,16 +49,17 @@ export class RoomService extends BaseHttpService { } addRoom(room: Room): Observable<Room> { + delete room.id; + delete room.revision; const connectionUrl = this.apiUrl.base + this.apiUrl.rooms + '/'; - return this.http.post<Room>(connectionUrl, { - ownerId: this.authService.getUser().id, - abbreviation: room.abbreviation, name: room.name, closed: room.closed, description: room.description - }, httpOptions); + room.ownerId = this.authService.getUser().id; + return this.http.post<Room>(connectionUrl, room, httpOptions); } getRoom(id: string): Observable<Room> { const connectionUrl = `${ this.apiUrl.base + this.apiUrl.rooms }/${ id }`; return this.http.get<Room>(connectionUrl).pipe( + map(room => this.parseExtensions(room)), map(room => this.parseDefaultContentGroup(room)), tap(room => this.setRoomId(room)), catchError(this.handleError<Room>(`getRoom keyword=${ id }`)) @@ -105,6 +107,15 @@ export class RoomService extends BaseHttpService { return room; } + parseExtensions(room: Room): Room { + if (room.extensions) { + let extensions: TSMap<string, TSMap<string, any>> = new TSMap(); + extensions = room.extensions; + room.extensions = extensions; + } + return room; + } + setRoomId(room: Room): void { localStorage.setItem('roomId', room.id); } diff --git a/src/app/services/websockets/ws-comment-service.service.spec.ts b/src/app/services/websockets/ws-comment-service.service.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..02c67cb49c83d3beda7ce75f172f69541436b821 --- /dev/null +++ b/src/app/services/websockets/ws-comment-service.service.spec.ts @@ -0,0 +1,13 @@ +/* import { TestBed } from '@angular/core/testing'; + +import { WsCommentServiceService } from './ws-comment-service.service'; + +describe('WsCommentServiceService', () => { + beforeEach(() => TestBed.configureTestingModule({})); + + it('should be created', () => { + const service: WsCommentServiceService = TestBed.get(WsCommentServiceService); + expect(service).toBeTruthy(); + }); +}); +*/ diff --git a/src/app/services/websockets/ws-comment-service.service.ts b/src/app/services/websockets/ws-comment-service.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..43f47fd68b5d1a206bf8dd8ea8e303586c5a9865 --- /dev/null +++ b/src/app/services/websockets/ws-comment-service.service.ts @@ -0,0 +1,79 @@ +import { Injectable } from '@angular/core'; +import { Comment } from '../../models/comment'; +import { WsConnectorService } from '../../services/websockets/ws-connector.service'; +import { CreateComment } from '../../models/messages/create-comment'; +import { PatchComment } from '../../models/messages/patch-comment'; +import { HighlightComment } from '../../models/messages/highlight-comment'; +import { TSMap } from 'typescript-map'; +import { UpVote } from '../../models/messages/up-vote'; +import { DownVote } from '../../models/messages/down-vote'; +import { Observable } from 'rxjs'; +import { IMessage } from '@stomp/stompjs'; + + +@Injectable({ + providedIn: 'root' +}) +export class WsCommentServiceService { + + constructor(private wsConnector: WsConnectorService) { } + + add(comment: Comment): void { + const message = new CreateComment(comment.roomId, comment.userId, comment.body); + this.wsConnector.send(`/queue/comment.command.create`, JSON.stringify(message)); + } + + toggleRead(comment: Comment): Comment { + console.log(comment); + comment.read = !comment.read; + const changes = new TSMap<string, any>(); + changes.set('read', comment.read); + this.patchComment(comment, changes); + return comment; + } + + toggleFavorite(comment: Comment): Comment { + comment.favorite = !comment.favorite; + const changes = new TSMap<string, any>(); + changes.set('favorite', comment.favorite); + this.patchComment(comment, changes); + return comment; + } + + toggleCorrect(comment: Comment): Comment { + comment.correct = !comment.correct; + const changes = new TSMap<string, any>(); + changes.set('correct', comment.correct); + this.patchComment(comment, changes); + return comment; + } + + voteUp(comment: Comment, userId: string): void { + const message = new UpVote(userId, comment.id); + this.wsConnector.send(`/queue/vote.command.upvote`, JSON.stringify(message)); + } + + voteDown(comment: Comment, userId: string): void { + const message = new DownVote(userId, comment.id); + this.wsConnector.send(`/queue/vote.command.downvote`, JSON.stringify(message)); + } + + private patchComment(comment: Comment, changes: TSMap<string, any>): void { + const message = new PatchComment(comment.id, changes); + this.wsConnector.send(`/queue/comment.command.patch`, JSON.stringify(message)); + } + + highlight(comment: Comment) { + const message = new HighlightComment(comment.id, true); + this.wsConnector.send(`/queue/comment.command.highlight`, JSON.stringify(message)); + } + + lowlight(comment: Comment) { + const message = new HighlightComment(comment.id, false); + this.wsConnector.send(`/queue/comment.command.highlight`, JSON.stringify(message)); + } + + getCommentStream(roomId: string): Observable<IMessage> { + return this.wsConnector.getWatcher(`/topic/${roomId}.comment.stream`); + } +} diff --git a/src/app/services/websockets/ws-connector.service.ts b/src/app/services/websockets/ws-connector.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..32007e8a96be1b532b7f186c53bae1e303201157 --- /dev/null +++ b/src/app/services/websockets/ws-connector.service.ts @@ -0,0 +1,58 @@ +import { Injectable } from '@angular/core'; +import { RxStomp } from '@stomp/rx-stomp'; +import { AuthenticationService } from '../http/authentication.service'; +import { User } from '../../models/user'; +import { ARSRxStompConfig } from '../../rx-stomp.config'; +import { Observable } from 'rxjs'; +import { IMessage, StompHeaders } from '@stomp/stompjs'; + +@Injectable({ + providedIn: 'root' +}) +export class WsConnectorService { + private client: RxStomp; + + private headers = { + 'content-type': 'application/json', + 'ars-user-id': '' + }; + + constructor( + private authService: AuthenticationService + ) { + this.client = new RxStomp(); + const userSubject = authService.getUserAsSubject(); + userSubject.subscribe((user: User) => { + if (this.client.connected) { + this.client.deactivate(); + } + + if (user && user.id) { + const copiedConf = ARSRxStompConfig; + copiedConf.connectHeaders.token = user.token; + this.headers = { + 'content-type': 'application/json', + 'ars-user-id': '' + user.id + }; + this.client.configure(copiedConf); + this.client.activate(); + } + }); + } + + public send(destination: string, body: string): void { + if (this.client.connected) { + this.client.publish({ + destination: destination, + body: body, + headers: this.headers + }); + } + } + + public getWatcher(topic: string): Observable<IMessage> { + if (this.client.connected) { + return this.client.watch(topic, this.headers); + } + } +} diff --git a/src/app/services/websockets/ws-feedback.service.ts b/src/app/services/websockets/ws-feedback.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..668095d1c8ca16d28261c50c2f1697374b838fb0 --- /dev/null +++ b/src/app/services/websockets/ws-feedback.service.ts @@ -0,0 +1,22 @@ +import { Injectable } from '@angular/core'; +import { WsConnectorService } from '../../services/websockets/ws-connector.service'; +import { CreateFeedback } from '../../models/messages/create-feedback'; +import { GetFeedback } from '../../models/messages/get-feedback'; + +@Injectable({ + providedIn: 'root' +}) +export class WsFeedbackService { + constructor(private wsConnector: WsConnectorService) {} + + send(feedback: number, roomId: string) { + const createFeedback = new CreateFeedback(feedback); + this.wsConnector.send(`/backend/queue/${roomId}.feedback.command`, JSON.stringify(createFeedback)); + } + + get(roomId: string) { + const getFeedback = new GetFeedback(); + + this.wsConnector.send(`/backend/queue/${roomId}.feedback.query`, JSON.stringify(getFeedback)); + } +} diff --git a/src/assets/i18n/creator/de.json b/src/assets/i18n/creator/de.json index bbae8df7d3c87e69c4451049b6fed64d86d015c2..33ff55162314538d6e44f3c5c537f38b0bbf12b9 100644 --- a/src/assets/i18n/creator/de.json +++ b/src/assets/i18n/creator/de.json @@ -10,17 +10,21 @@ "create-content": "Frage erstellen", "live-feedback": "Live Feedback", "answer-statistics": "Statistiken", - "edit-room": "Session bearbeiten", "delete-room": "Session löschen", "sure": "Sind Sie sicher?", "reallySession": "Wollen Sie die Session ", "reallyContent": "Wollen Sie die Frage ", "really2": " wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.", + "deleted": " erfolgreich gelöscht.", "abort": "Abbrechen", "update": "Update", + "changes-successful": "Änderungen erfolgreich.", "default-content-group": "Standard", "description": "Beschreibung", - "present": "Präsentieren" + "present": "Präsentieren", + "session-settings": "Session Einstellungen", + "general": "Allgemein", + "threshold": "Schwellenwert für sichtbare Kommentare: " }, "content": { "content": "Frage", @@ -74,5 +78,22 @@ "good": "Gut", "improvable": "Luft nach oben", "no-answers": "Keine Antworten" + }, + "comment-page": { + "enter-title": "Titel", + "enter-comment": "Kommentar", + "send": "Senden", + "abort": "Abbrechen", + "error-comment": "Bitte geben Sie einen Kommentar ein.", + "error-title": "Bitte geben Sie einen Titel ein.", + "error-both-fields": "Bitte füllen Sie alle Felder aus.", + "delimiter": "Bitte wählen Sie ein Format!", + "comma": "Microsoft Excel", + "semicolon": "Standard CSV", + "export": "Exportieren" + }, + "comment-list-page": { + "search": "Suchen", + "cancel": "Abbrechen" } } diff --git a/src/assets/i18n/creator/en.json b/src/assets/i18n/creator/en.json index f1c72bc9b22e65b458c19675a2e15d55cc1d9fc5..cc25158a4f28fd20ad4a0c2ffbed41a6aa8dbacb 100644 --- a/src/assets/i18n/creator/en.json +++ b/src/assets/i18n/creator/en.json @@ -10,17 +10,21 @@ "create-content": "Create content", "live-feedback": "Live feedback", "answer-statistics": "Statistics", - "edit-room": "Edit session", "delete-room": "Delete session", "sure": "Are you sure?", "reallySession": "Do you really want to delete session ", "reallyContent": "Do you really want to delete content ", "really2": "? This action can not be undone.", + "deleted": " successfully deleted.", "abort": "Abort", "update": "Update", + "changes-successful": "Successfully updated.", "default-content-group": "Default", "description": "Description", - "present": "Present" + "present": "Present", + "session-settings": "Session settings", + "general": "General", + "threshold": "Threshold for visible comments: " }, "content": { "content": "Content", @@ -74,5 +78,22 @@ "good": "Good", "improvable": "Improvable", "no-answers": "No answers" + }, + "comment-page": { + "enter-title": "Title", + "enter-comment": "Comment", + "send": "Send", + "abort": "Cancel", + "error-title": "Please enter a title.", + "error-comment": "Please enter a comment.", + "error-both-fields": "Please fill in all fields.", + "delimiter": "Please choose a format!", + "comma": "Microsoft Excel", + "semicolon": "Standard CSV", + "export": "Export" + }, + "comment-list-page": { + "search": "Search", + "cancel": "Cancel" } } diff --git a/src/assets/i18n/home/de.json b/src/assets/i18n/home/de.json index 8919680494729e3ecb2043798351dbc36f69162a..9638bf1b60bd44a6c957e04ca235b6c809cf8b28 100644 --- a/src/assets/i18n/home/de.json +++ b/src/assets/i18n/home/de.json @@ -7,36 +7,39 @@ "logged-out": "Ausloggen erfolgreich.", "back": "Zurück", "my-sessions": "Meine Sessions", - "visited-sessions": "Besuchte Sessions" + "visited-sessions": "Besuchte Sessions", + "default": "ARSnova", + "dark": "Nacht" }, "login-page": { "creator": "Dozent/in", "participant": "Student/in", "password-reset": "Passwort vergessen?", + "not-registered": "Noch keinen Account?", "register": "Registrieren", "welcome": "Willkommen bei" }, "home-page": { "join-demo-session": "Demo-Session betreten", - "session-id": "Session-Id", - "no-room-found": "Es wurde keine Session mit dieser ID gefunden.", - "please-enter": "Bitte geben Sie eine Session-ID ein.", - "exactly-8": "Eine Session-ID hat genau 8 Ziffern.", + "session-id": "Session-ID", + "no-room-found": "Es wurde keine Session mit dieser ID gefunden", + "please-enter": "Bitte geben Sie eine Session-ID ein", + "exactly-8": "Eine Session-ID hat genau 8 Ziffern", "create-session": "Session erstellen", - "no-empty-name": "Bitte geben Sie einen Namen ein.", + "no-empty-name": "Bitte geben Sie einen Namen ein", "created-1": "Session '", - "created-2": "' erfolgreich erstellt.", - "only-numbers": "Eine Session-Id besteht aus Nummern." + "created-2": "' erfolgreich erstellt", + "only-numbers": "Eine Session-ID besteht aus Ziffern" }, "login": { - "email": "E-Mail", - "email-invalid": "E-Mail Adresse ist ungültig", - "email-required": "E-Mail Adresse ist erforderlich", + "email": "E-mail", + "email-invalid": "E-mail Adresse ist ungültig", + "email-required": "E-mail Adresse ist erforderlich", "guest-login": "Anmelden als Gast", - "input-incorrect": "Bitte prüfen Sie Ihre Eingaben.", - "login-successful": "Login erfolgreich.", + "input-incorrect": "Bitte prüfen Sie Ihre Eingaben", + "login-successful": "Login erfolgreich", "login": "Anmelden", - "login-data-incorrect": "Benutzername oder Passwort nicht korrekt.", + "login-data-incorrect": "Benutzername oder Passwort nicht korrekt", "password": "Passwort", "password-required": "Passwort ist erforderlich", "activate": "Aktivieren", @@ -45,26 +48,26 @@ "activation-key-incorrect": "Aktivierungsschlüssel falsch" }, "password-reset": { - "email": "E-Mail", - "email-invalid": "E-Mail Adresse ist nicht gültig.", - "email-required": "E-Mail Adresse ist erforderlich.", - "input-incorrect": "Bitte prüfen Sie Ihre Eingabe.", + "email": "E-mail", + "email-invalid": "E-mail Adresse ist ungültig.", + "email-required": "E-mail Adresse ist erforderlich.", + "input-incorrect": "Bitte prüfen Sie Ihre Eingaben", "reset-password": "Passwort zurücksetzen", - "reset-successful": "Passwort wurde zurückgesetzt. Bitte prüfen Sie Ihre E-Mails" + "reset-successful": "Passwort wurde zurückgesetzt. Bitte prüfen Sie Ihre E-mails" }, "register": { - "email": "E-Mail", - "email-verify": "E-Mail bestätigen", - "email-invalid": "E-Mail Adresse ist nicht gültig", - "email-required": "E-Mail Adresse ist erforderlich", - "email-unmatch": "E-Mail Adressen stimmen nicht überein", + "email": "E-mail", + "email-verify": "E-mail bestätigen", + "email-invalid": "E-mail Adresse ist ungültig", + "email-required": "E-mail Adresse ist erforderlich", + "email-unmatch": "E-mail Adressen stimmen nicht überein", "password": "Passwort", "password-required": "Passwort ist erforderlich", "password-unmatch": "Passwörter stimmen nicht überein", "password-verify": "Passwort bestätigen", "register": "Registrieren", - "register-successful": "Erfolgreich registriert. Bitte prüfen Sie Ihre E-Mails", - "register-unsuccessful": "Bitte prüfen Sie Ihre Eingaben." + "register-successful": "Erfolgreich registriert. Bitte prüfen Sie Ihre E-mails", + "register-unsuccessful": "Bitte prüfen Sie Ihre Eingaben" }, "session": { "session-name": "Name der Session", @@ -75,7 +78,7 @@ "footer": { "dsgvo": "DSGVO", "imprint": "Impressum", - "will-open": " wird in einem neuen Fenster geöffnet..", + "will-open": " wird in einem neuen Fenster geöffnet...", "open": "Öffnen" } } diff --git a/src/assets/i18n/home/en.json b/src/assets/i18n/home/en.json index dcb2f0c79cef3d82800d07f8fd4479b2e36942d0..490d70df728be33625961ac47bf500751a9087e2 100644 --- a/src/assets/i18n/home/en.json +++ b/src/assets/i18n/home/en.json @@ -4,78 +4,81 @@ "german": "German", "logout": "Logout", "guest": "Guest", - "logged-out": "Logout successful.", + "logged-out": "Logout successful", "back": "Back", "my-sessions": "My Sessions", - "visited-sessions": "Visited Sessions" + "visited-sessions": "Visited Sessions", + "default": "ARSnova", + "dark": "Night" }, "login-page": { "creator": "Lecturer", "participant": "Student", "password-reset": "Forgot your password?", + "not-registered": "Don't have an account yet?", "register": "Register", "welcome": "Welcome to" }, "home-page": { "join-demo-session": "Join demo-session", - "session-id": "Session-Id", - "no-room-found": "No session was found with this id.", - "please-enter": "Please enter a session-id.", - "exactly-8": "A session-id has exactly 8 digits.", + "session-id": "Session-ID", + "no-room-found": "No session was found with this ID", + "please-enter": "Please enter a session-ID", + "exactly-8": "A session-ID has exactly 8 digits", "create-session": "Create session", "no-empty-name": "Please enter a name.", "created-1": "Session '", - "created-2": "' successfully created.", - "only-numbers": "A session-id only contains numbers." + "created-2": "' successfully created", + "only-numbers": "A session-ID only contains digits" }, "login": { - "email": "E-Mail", - "email-invalid": "E-Mail is invalid", - "email-required": "E-Mail is required", + "email": "E-mail", + "email-invalid": "E-mail is invalid", + "email-required": "E-mail required", "guest-login": "Guest login", - "input-incorrect": "Please check your data.", - "login-successful": "Login successful.", + "input-incorrect": "Please check your data", + "login-successful": "Login successful", "login": "Login", - "login-data-incorrect": "Username or password incorrect.", + "login-data-incorrect": "Username or password incorrect", "password": "Password", - "password-required": "Password is required", + "password-required": "Password required", "activate": "Activate", "activation-key": "Activation key", "activation-key-required": "Activation key required", - "activation-key-incorrect": "Activation key is wrong" + "activation-key-incorrect": "Activation key is incorrect" }, "password-reset": { - "email": "E-Mail", - "email-invalid": "E-Mail is not valid", - "email-required": "E-Mail is required", - "input-incorrect": "Please check your data.", + "email": "E-mail", + "email-invalid": "E-mail is invalid", + "email-required": "E-mail required", + "input-incorrect": "Please check your data", "reset-password": "Reset password", - "reset-successful": "Password was reset. Please check your mail." + "reset-successful": "Password was reset. Please check your mail" }, "register": { - "email": "E-Mail", - "email-verify": "Verify E-Mail", - "email-invalid": "E-Mail is not valid", - "email-required": "E-Mail is required", - "email-unmatch": "E-Mails do not match", + "email": "E-mail", + "email-verify": "Verify E-mail", + "email-invalid": "E-mail is invalid", + "email-required": "E-mail required", + "email-unmatch": "E-mails do not match", "password": "Password", - "password-required": "Password is required", + "password-required": "Password required", "password-unmatch": "Passwords do not match", "password-verify": "Verify password", "register": "Register", - "register-successful": "Successfully registered. Please check your mail.", - "register-unsuccessful": "Please check your data." + "register-successful": "Successfully registered. Please check your mail", + "register-unsuccessful": "Please check your data" }, "session": { "session-name": "Session name", "description": "Description", - "max-ls": "Max. letters / signs:", + "max-ls": "Max. characters:", "create-session": "Create session" }, "footer": { "dsgvo": "GDPR", "imprint": "Imprint", - "will-open": " will be opened in a new tab..", + "will-open": " will be opened in a new tab...", "open": "Open" } } diff --git a/src/assets/i18n/participant/de.json b/src/assets/i18n/participant/de.json index da12eb490bd66baddf309cb46c5639a94285c16c..db81bfab034356a7a44cbe481aecbfdec928bb16 100644 --- a/src/assets/i18n/participant/de.json +++ b/src/assets/i18n/participant/de.json @@ -15,15 +15,23 @@ "description": "Beschreibung" }, "comment-page": { - "enter-title": "Geben Sie einen Titel ein", - "back": "Zurück", - "send": "Senden" + "enter-title": "Titel", + "enter-comment": "Kommentar", + "send": "Senden", + "abort": "Abbrechen", + "error-comment": "Bitte geben Sie einen Kommentartext ein.", + "error-title": "Bitte geben Sie einen Titel ein.", + "error-both-fields": "Bitte füllen Sie alle Felder aus." + }, + "comment-list-page": { + "search": "Suchen", + "cancel": "Abbrechen" }, "answer": { "submit": "Absenden", "abstain": "Enthalten", - "sent": "Antwort gesendet.", - "abstention-sent": "Enthaltung gesendet.", + "sent": "Antwort gesendet", + "abstention-sent": "Enthaltung gesendet", "your-answer": "Ihre Antwort", "at-least-one": "Bitte wählen sie mindestens eine Antwort.", "please-one": "Bitte wählen sie eine Antwort.", diff --git a/src/assets/i18n/participant/en.json b/src/assets/i18n/participant/en.json index fd8c912e9f950fa353804be70fc41ed0d95b03c5..33772d28f99604bf7925427865ba5a8cdb4a8702 100644 --- a/src/assets/i18n/participant/en.json +++ b/src/assets/i18n/participant/en.json @@ -1,8 +1,8 @@ { "home-page": { - "no-room-found": "No session was found with this id.", - "please-enter": "Please enter a session-id.", - "exactly-8": "A session-id has exactly 8 digits." + "no-room-found": "No session was found with this ID.", + "please-enter": "Please enter a session-ID.", + "exactly-8": "A session-ID has exactly 8 digits." }, "room-page": { "comments": "Comments", @@ -15,15 +15,23 @@ "description": "Description" }, "comment-page": { - "enter-title": "Enter a title", - "back": "Back", - "send": "Send" + "enter-title": "Title", + "enter-comment": "Comment", + "send": "Send", + "abort": "Cancel", + "error-title": "Please enter a title.", + "error-comment": "Please enter a comment-text.", + "error-both-fields": "Please fill in all fields." + }, + "comment-list-page": { + "search": "Search", + "cancel": "Cancel" }, "answer": { "submit": "Submit", "abstain": "Abstain", - "sent": "Answer sent.", - "abstention-sent": "Abstention sent.", + "sent": "Answer sent", + "abstention-sent": "Abstention sent", "your-answer": "Your answer", "at-least-one": "Please select at least one answer.", "please-one": "Please select an answer.", diff --git a/src/styles.scss b/src/styles.scss index 7186b2044d95fd612daac9f466ab94aa6c52e436..9d8295a06c48b3922ec958e59e8adce73ab08a6a 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -1,4 +1,5 @@ -@import 'theme/_variables.scss'; +@import 'theme/default-Theme/_variables.scss'; +@import "theme/dark-Theme/dark-theme"; // Plus imports for other components in your app. // Include the common styles for Angular Material. We include this here so that you only @@ -11,4 +12,10 @@ // that you are using. @include angular-material-theme($arsnova-theme); -@import 'theme/_theme.scss'; + +.dark { + @include angular-material-theme($dark-theme); +} + + +@import 'theme/default-Theme/theme'; diff --git a/src/theme/_theme.scss b/src/theme/_theme.scss deleted file mode 100644 index a13ef7ac2dd270b6882f904fe2be6102b6f6ad46..0000000000000000000000000000000000000000 --- a/src/theme/_theme.scss +++ /dev/null @@ -1,22 +0,0 @@ -@import '~@angular/material/theming'; - -html, body { - font-family: 'Roboto', 'Helvetica Neue', sans-serif; - margin: 0; - padding: 0; - width: 100%; - height: 100%; -} - -@import '_util.scss'; -@import '_form.scss'; - -.progress-theme { - $progress-primary: mat-palette($mat-light-green, 300); - $progress-accent: mat-palette($mat-amber, 300); - $progress-warn: mat-palette($mat-deep-orange, 300); - - $progress-theme: mat-light-theme($progress-primary, $progress-accent, $progress-warn); - - @include angular-material-theme($progress-theme); -} diff --git a/src/theme/arsnova-theme.const.ts b/src/theme/arsnova-theme.const.ts new file mode 100644 index 0000000000000000000000000000000000000000..91ae0b442be2a92a93b2d6e64badcc28573556b0 --- /dev/null +++ b/src/theme/arsnova-theme.const.ts @@ -0,0 +1,7 @@ +import { dark } from './dark-Theme/darkTheme.const'; +import { defaultTheme } from './default-Theme/defaultTheme.const'; + +export const themes = { + arsnovaTheme: defaultTheme, + dark: dark +}; diff --git a/src/theme/dark-Theme/_dark-theme.scss b/src/theme/dark-Theme/_dark-theme.scss new file mode 100644 index 0000000000000000000000000000000000000000..052a6d3e6a35cf9fafc1211cdfeb8f18748f0545 --- /dev/null +++ b/src/theme/dark-Theme/_dark-theme.scss @@ -0,0 +1,39 @@ +@import '../../../node_modules/@angular/material/theming'; + +html, body { + font-family: 'Roboto', 'Helvetica Neue', sans-serif; + margin: 0; + padding: 0; + width: 100%; + height: 100%; +} + +.fill-remaining-space { + /* This fills the remaining space, by using flexbox. + Every toolbar row uses a flexbox row layout. */ + flex: 1 1 auto; +} + +mat-form-field.input-block { + display: block; +} + +.mat-fab .mat-button-wrapper { + padding: 0!important; +} + +.mat-dialog-container { + background-color: white; +} + +.mat-tab-header { + border-bottom-style: none!important; +} + + +$dark-primary: mat-palette($mat-blue-gray, 800); +$dark-accent: mat-palette($mat-orange, 200); +$dark-warn: mat-palette($mat-red, A200); + +$dark-theme: mat-dark-theme($dark-primary, $dark-accent, $dark-warn); + diff --git a/src/theme/dark-Theme/darkTheme.const.ts b/src/theme/dark-Theme/darkTheme.const.ts new file mode 100644 index 0000000000000000000000000000000000000000..e1264499221262b81123d7d857d5da5eefa41aad --- /dev/null +++ b/src/theme/dark-Theme/darkTheme.const.ts @@ -0,0 +1,24 @@ +export const dark = { + + '--primary' : '#37474F', + '--light': '#455a64', + + '--accent': '#FFE0B2', + + '--background': '#616161', + '--background-2': '#757575', + '--card': '#bdbdbd', + + '--green': '#AED581', + '--red': '#FF8A65', + '--yellow': '#FFD54F', + '--blue': '#1E88E5', + '--grey': '#E0E0E0', + '--grey-light': '#9E9E9E', + + '--text-1': '#37474f', + '--text-2': '#004d40', + '--text-3': '#78909c', + '--dialog': '#78909c', + '--highlighted' : '#005F63' +}; diff --git a/src/theme/_form.scss b/src/theme/default-Theme/_form.scss similarity index 84% rename from src/theme/_form.scss rename to src/theme/default-Theme/_form.scss index 25c4c8d605fcc88327bdcd7bfb355f71f8ee189c..bd6b5901d8dd1af6a3dcdfa956da26735fe16945 100644 --- a/src/theme/_form.scss +++ b/src/theme/default-Theme/_form.scss @@ -7,7 +7,7 @@ mat-form-field.input-block { } .mat-dialog-container { - background-color: #e0f2f1; + background-color: var(--dialog); } .mat-tab-header { diff --git a/src/theme/default-Theme/_theme.scss b/src/theme/default-Theme/_theme.scss new file mode 100644 index 0000000000000000000000000000000000000000..58ebcc5b6910cda421e4a5a8d0927beebad1b64b --- /dev/null +++ b/src/theme/default-Theme/_theme.scss @@ -0,0 +1,13 @@ +@import './../../../node_modules/@angular/material/theming'; + +html, body { + font-family: 'Roboto', 'Helvetica Neue', sans-serif; + margin: 0; + padding: 0; + width: 100%; + height: 100%; +} + +@import 'util'; +@import 'form'; + diff --git a/src/theme/_util.scss b/src/theme/default-Theme/_util.scss similarity index 100% rename from src/theme/_util.scss rename to src/theme/default-Theme/_util.scss diff --git a/src/theme/_variables.scss b/src/theme/default-Theme/_variables.scss similarity index 91% rename from src/theme/_variables.scss rename to src/theme/default-Theme/_variables.scss index a4a274efc2e5a2aafd32c402519f349708e76619..81c04ab7cabcc8da8e4943ebbe24fcba8ae5185d 100644 --- a/src/theme/_variables.scss +++ b/src/theme/default-Theme/_variables.scss @@ -1,4 +1,4 @@ -@import '~@angular/material/theming'; +@import './../../../node_modules/@angular/material/theming'; // Define the palettes for your theme using the Material Design palettes available in palette.scss // (imported above). For each palette, you can optionally specify a default, lighter, and darker // hue. Available color palettes: https://www.google.com/design/spec/style/color.html @@ -10,3 +10,4 @@ $arsnova-warn: mat-palette($mat-red, A100); // Create the theme object (a Sass map containing all of the palettes). $arsnova-theme: mat-light-theme($arsnova-primary, $arsnova-accent, $arsnova-warn); + diff --git a/src/theme/default-Theme/defaultTheme.const.ts b/src/theme/default-Theme/defaultTheme.const.ts new file mode 100644 index 0000000000000000000000000000000000000000..b12428a946c1da534f4526d6af96b590c37a8d74 --- /dev/null +++ b/src/theme/default-Theme/defaultTheme.const.ts @@ -0,0 +1,24 @@ +export const defaultTheme = { + + '--primary' : '#4DB6AC', + '--light': '#80cbc4', + + '--accent': '#FFE0B2', + + '--background': '#B2DFDB', + '--background-2': '#BBDEFB', + '--card': '#fff8e1', + + '--green': '#AED581', + '--red': '#FF8A65', + '--yellow': '#FFD54F', + '--blue': '#1E88E5', + '--grey': '#BDBDBD', + '--grey-light': '#EEEEEE', + + '--text-1': '#37474f', // could be used for all texts !!!!!!!!!!1 + '--text-2': '#004d40', // could be used for all texts !!!!!!11111 + '--text-3': '#37474f', // could be used for all texts !!!!!!!!!1 + '--dialog': '#B2DFDB', + '--highlighted' : '#FFE082' +}; diff --git a/src/theme/theme.directive.ts b/src/theme/theme.directive.ts new file mode 100644 index 0000000000000000000000000000000000000000..41a493da22e7284bc882e9fc6285ac0c9b217db4 --- /dev/null +++ b/src/theme/theme.directive.ts @@ -0,0 +1,46 @@ +import { Directive, ElementRef, Inject, OnDestroy, OnInit, Renderer2 } from '@angular/core'; +import { DOCUMENT } from '@angular/common'; +import { themes } from './arsnova-theme.const'; +import { ThemeService } from './theme.service'; +import { Subscription } from 'rxjs'; + +@Directive({ + selector: '[appTheme]' +}) + +export class ThemeDirective implements OnInit, OnDestroy { + + private themeName = 'arsnovaTheme'; + private themServiceSubscription: Subscription; + + constructor(private elementRef: ElementRef, + private renderer: Renderer2, + @Inject(DOCUMENT) private document: any, + private themService: ThemeService) { + } + + ngOnInit() { + this.updateTheme(this.themeName); + this.themService.getActiveTheme() + .subscribe(themeName => { + this.themeName = themeName; + this.updateTheme(this.themeName); + }); + } + + updateTheme(themeName: string) { + const them = themes[ themeName ]; + for (const key in them) { + if (them.hasOwnProperty(key)) { + this.renderer.setProperty(this.elementRef.nativeElement, key, them[key]); + this.document.body.style.setProperty(key, them[key]); + } + } + } + + ngOnDestroy() { + if (this.themServiceSubscription) { + this.themServiceSubscription.unsubscribe(); + } + } +} diff --git a/src/theme/theme.module.ts b/src/theme/theme.module.ts new file mode 100644 index 0000000000000000000000000000000000000000..af6d3e09bbdfe23c709e90d26264f87d749fb2a1 --- /dev/null +++ b/src/theme/theme.module.ts @@ -0,0 +1,14 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule } from '@angular/forms'; +import { ThemeDirective } from './theme.directive'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule + ], + declarations: [ThemeDirective], + exports: [ThemeDirective], +}) +export class ThemeModule { } diff --git a/src/theme/theme.service.ts b/src/theme/theme.service.ts new file mode 100644 index 0000000000000000000000000000000000000000..9c56dfb379aacc5f0df11e7ea62560038d9838e3 --- /dev/null +++ b/src/theme/theme.service.ts @@ -0,0 +1,20 @@ +import { Injectable } from '@angular/core'; +import { BehaviorSubject } from 'rxjs'; + +@Injectable({ + providedIn: 'root' +}) +export class ThemeService { + themeName = localStorage.getItem('classNameOfTheme'); + private activeThem = new BehaviorSubject(this.themeName); + + constructor() { } + + public getActiveTheme() { + return this.activeThem.asObservable(); + } + + public setActiveThem(name) { + this.activeThem.next(name); + } +}