lutaml-xmi 0.1.4 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/lib/lutaml/xmi/parsers/xml.rb +146 -32
 - data/lib/lutaml/xmi/version.rb +1 -1
 - data/lutaml-xmi.gemspec +2 -1
 - data/spec/fixtures/ea-xmi-2.4.2.xmi +128 -0
 - data/spec/lutaml/parsers/xmi_spec.rb +8 -7
 - metadata +26 -12
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 63fbe7f09179853abdedd141e18e2f66fbcb8f6018a8bed99a3128170d7a25bb
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 874323dcf8ad23d86f83037382b2190b372aa747c768807f3b9f29999365b76c
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 9a5844111850226727b714da4cde2ec8ca51ff50d0abdbf5980a78b280888b88492ba00a839d369a8f8df2c2549b40b6456a01243fe08142a1d6da5d366e3a1e
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 1d348e32bf2b2ac4f3b6642e52e698b3f43cf4e4edebd9bd92b65b0a94f77cbb65dae9c9861eb2de916407f7ebae763735f3f29d4283290acd17a912e03ed700
         
     | 
| 
         @@ -1,4 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require "nokogiri"
         
     | 
| 
      
 2 
     | 
    
         
            +
            require "htmlentities"
         
     | 
| 
       2 
3 
     | 
    
         
             
            require "lutaml/uml/has_attributes"
         
     | 
| 
       3 
4 
     | 
    
         
             
            require "lutaml/uml/document"
         
     | 
| 
       4 
5 
     | 
    
         | 
| 
         @@ -7,7 +8,7 @@ module Lutaml 
     | 
|
| 
       7 
8 
     | 
    
         
             
                module Parsers
         
     | 
| 
       8 
9 
     | 
    
         
             
                  # Class for parsing .xmi schema files into ::Lutaml::Uml::Document
         
     | 
| 
       9 
10 
     | 
    
         
             
                  class XML
         
     | 
| 
       10 
     | 
    
         
            -
                     
     | 
| 
      
 11 
     | 
    
         
            +
                    LOWER_VALUE_MAPPINGS = {
         
     | 
| 
       11 
12 
     | 
    
         
             
                      "0" => "C",
         
     | 
| 
       12 
13 
     | 
    
         
             
                      "1" => "M",
         
     | 
| 
       13 
14 
     | 
    
         
             
                    }.freeze
         
     | 
| 
         @@ -34,33 +35,40 @@ module Lutaml 
     | 
|
| 
       34 
35 
     | 
    
         
             
                      model = xmi_doc.xpath('//uml:Model[@xmi:type="uml:Model"]').first
         
     | 
| 
       35 
36 
     | 
    
         
             
                      {
         
     | 
| 
       36 
37 
     | 
    
         
             
                        name: model["name"],
         
     | 
| 
       37 
     | 
    
         
            -
                        packages: serialize_model_packages(model) 
     | 
| 
      
 38 
     | 
    
         
            +
                        packages: serialize_model_packages(model)
         
     | 
| 
       38 
39 
     | 
    
         
             
                      }
         
     | 
| 
       39 
40 
     | 
    
         
             
                    end
         
     | 
| 
       40 
41 
     | 
    
         | 
| 
       41 
42 
     | 
    
         
             
                    def serialize_model_packages(model)
         
     | 
| 
       42 
43 
     | 
    
         
             
                      model.xpath('./packagedElement[@xmi:type="uml:Package"]').map do |package|
         
     | 
| 
       43 
44 
     | 
    
         
             
                        {
         
     | 
| 
      
 45 
     | 
    
         
            +
                          xmi_id: package["xmi:id"],
         
     | 
| 
       44 
46 
     | 
    
         
             
                          name: package["name"],
         
     | 
| 
       45 
     | 
    
         
            -
                          packages: serialize_model_packages(package),
         
     | 
| 
       46 
47 
     | 
    
         
             
                          classes: serialize_model_classes(package),
         
     | 
| 
       47 
48 
     | 
    
         
             
                          enums: serialize_model_enums(package),
         
     | 
| 
      
 49 
     | 
    
         
            +
                          data_types: serialize_model_data_types(package),
         
     | 
| 
      
 50 
     | 
    
         
            +
                          diagrams: serialize_model_diagrams(package),
         
     | 
| 
      
 51 
     | 
    
         
            +
                          packages: serialize_model_packages(package),
         
     | 
| 
      
 52 
     | 
    
         
            +
                          definition: doc_node_attribute_value(package, "documentation"),
         
     | 
| 
      
 53 
     | 
    
         
            +
                          stereotype: doc_node_attribute_value(package, "stereotype")
         
     | 
| 
       48 
54 
     | 
    
         
             
                        }
         
     | 
| 
       49 
55 
     | 
    
         
             
                      end
         
     | 
| 
       50 
56 
     | 
    
         
             
                    end
         
     | 
| 
       51 
57 
     | 
    
         | 
| 
       52 
58 
     | 
    
         
             
                    def serialize_model_classes(model)
         
     | 
| 
       53 
     | 
    
         
            -
                      model.xpath('./packagedElement[@xmi:type="uml:Class"]').map do |klass|
         
     | 
| 
      
 59 
     | 
    
         
            +
                      model.xpath('./packagedElement[@xmi:type="uml:Class" or @xmi:type="uml:AssociationClass"]').map do |klass|
         
     | 
| 
       54 
60 
     | 
    
         
             
                        {
         
     | 
| 
       55 
61 
     | 
    
         
             
                          xmi_id: klass["xmi:id"],
         
     | 
| 
       56 
62 
     | 
    
         
             
                          xmi_uuid: klass["xmi:uuid"],
         
     | 
| 
       57 
63 
     | 
    
         
             
                          name: klass["name"],
         
     | 
| 
      
 64 
     | 
    
         
            +
                          package: model,
         
     | 
| 
       58 
65 
     | 
    
         
             
                          attributes: serialize_class_attributes(klass),
         
     | 
| 
       59 
66 
     | 
    
         
             
                          associations: serialize_model_associations(klass),
         
     | 
| 
      
 67 
     | 
    
         
            +
                          operations: serialize_class_operations(klass),
         
     | 
| 
       60 
68 
     | 
    
         
             
                          constraints: serialize_class_constraints(klass),
         
     | 
| 
       61 
69 
     | 
    
         
             
                          is_abstract: doc_node_attribute_value(klass, "isAbstract"),
         
     | 
| 
       62 
70 
     | 
    
         
             
                          definition: doc_node_attribute_value(klass, "documentation"),
         
     | 
| 
       63 
     | 
    
         
            -
                          stereotype: doc_node_attribute_value(klass, "stereotype") 
     | 
| 
      
 71 
     | 
    
         
            +
                          stereotype: doc_node_attribute_value(klass, "stereotype")
         
     | 
| 
       64 
72 
     | 
    
         
             
                        }
         
     | 
| 
       65 
73 
     | 
    
         
             
                      end
         
     | 
| 
       66 
74 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -69,38 +77,90 @@ module Lutaml 
     | 
|
| 
       69 
77 
     | 
    
         
             
                      model.xpath('./packagedElement[@xmi:type="uml:Enumeration"]').map do |enum|
         
     | 
| 
       70 
78 
     | 
    
         
             
                        attributes = enum
         
     | 
| 
       71 
79 
     | 
    
         
             
                          .xpath('.//ownedLiteral[@xmi:type="uml:EnumerationLiteral"]')
         
     | 
| 
       72 
     | 
    
         
            -
                          .map do | 
     | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
       74 
     | 
    
         
            -
                             
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
      
 80 
     | 
    
         
            +
                          .map do |value|
         
     | 
| 
      
 81 
     | 
    
         
            +
                            type = value.xpath(".//type").first || {}
         
     | 
| 
      
 82 
     | 
    
         
            +
                            {
         
     | 
| 
      
 83 
     | 
    
         
            +
                              name: value["name"],
         
     | 
| 
      
 84 
     | 
    
         
            +
                              type: lookup_entity_name(type["xmi:idref"]) || type["xmi:idref"],
         
     | 
| 
      
 85 
     | 
    
         
            +
                              definition: lookup_attribute_definition(value),
         
     | 
| 
      
 86 
     | 
    
         
            +
                            }
         
     | 
| 
      
 87 
     | 
    
         
            +
                          end
         
     | 
| 
       79 
88 
     | 
    
         
             
                        {
         
     | 
| 
       80 
89 
     | 
    
         
             
                          xmi_id: enum["xmi:id"],
         
     | 
| 
       81 
90 
     | 
    
         
             
                          xmi_uuid: enum["xmi:uuid"],
         
     | 
| 
       82 
91 
     | 
    
         
             
                          name: enum["name"],
         
     | 
| 
       83 
     | 
    
         
            -
                           
     | 
| 
      
 92 
     | 
    
         
            +
                          values: attributes,
         
     | 
| 
       84 
93 
     | 
    
         
             
                          definition: doc_node_attribute_value(enum, "documentation"),
         
     | 
| 
       85 
94 
     | 
    
         
             
                          stereotype: doc_node_attribute_value(enum, "stereotype"),
         
     | 
| 
       86 
95 
     | 
    
         
             
                        }
         
     | 
| 
       87 
96 
     | 
    
         
             
                      end
         
     | 
| 
       88 
97 
     | 
    
         
             
                    end
         
     | 
| 
       89 
98 
     | 
    
         | 
| 
      
 99 
     | 
    
         
            +
                    def serialize_model_data_types(model)
         
     | 
| 
      
 100 
     | 
    
         
            +
                      model.xpath('./packagedElement[@xmi:type="uml:DataType"]').map do |klass|
         
     | 
| 
      
 101 
     | 
    
         
            +
                        {
         
     | 
| 
      
 102 
     | 
    
         
            +
                          xmi_id: klass["xmi:id"],
         
     | 
| 
      
 103 
     | 
    
         
            +
                          xmi_uuid: klass["xmi:uuid"],
         
     | 
| 
      
 104 
     | 
    
         
            +
                          name: klass["name"],
         
     | 
| 
      
 105 
     | 
    
         
            +
                          attributes: serialize_class_attributes(klass),
         
     | 
| 
      
 106 
     | 
    
         
            +
                          operations: serialize_class_operations(klass),
         
     | 
| 
      
 107 
     | 
    
         
            +
                          associations: serialize_model_associations(klass),
         
     | 
| 
      
 108 
     | 
    
         
            +
                          constraints: serialize_class_constraints(klass),
         
     | 
| 
      
 109 
     | 
    
         
            +
                          is_abstract: doc_node_attribute_value(klass, "isAbstract"),
         
     | 
| 
      
 110 
     | 
    
         
            +
                          definition: doc_node_attribute_value(klass, "documentation"),
         
     | 
| 
      
 111 
     | 
    
         
            +
                          stereotype: doc_node_attribute_value(klass, "stereotype"),
         
     | 
| 
      
 112 
     | 
    
         
            +
                        }
         
     | 
| 
      
 113 
     | 
    
         
            +
                      end
         
     | 
| 
      
 114 
     | 
    
         
            +
                    end
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
                    def serialize_model_diagrams(node)
         
     | 
| 
      
 117 
     | 
    
         
            +
                      main_model.xpath(%(//diagrams/diagram/model[@package="#{node['xmi:id']}"])).map do |diagram_model|
         
     | 
| 
      
 118 
     | 
    
         
            +
                        diagram = diagram_model.parent
         
     | 
| 
      
 119 
     | 
    
         
            +
                        properties = diagram.children.find {|n| n.name == 'properties' }
         
     | 
| 
      
 120 
     | 
    
         
            +
                        {
         
     | 
| 
      
 121 
     | 
    
         
            +
                          xmi_id: diagram["xmi:id"],
         
     | 
| 
      
 122 
     | 
    
         
            +
                          name: properties["name"],
         
     | 
| 
      
 123 
     | 
    
         
            +
                          definition: properties.attributes['documentation']&.value
         
     | 
| 
      
 124 
     | 
    
         
            +
                        }
         
     | 
| 
      
 125 
     | 
    
         
            +
                      end
         
     | 
| 
      
 126 
     | 
    
         
            +
                    end
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
       90 
128 
     | 
    
         
             
                    def serialize_model_associations(klass)
         
     | 
| 
       91 
129 
     | 
    
         
             
                      xmi_id = klass["xmi:id"]
         
     | 
| 
       92 
130 
     | 
    
         
             
                      main_model.xpath(%(//element[@xmi:idref="#{xmi_id}"]/links/*)).map do |link|
         
     | 
| 
       93 
     | 
    
         
            -
                         
     | 
| 
      
 131 
     | 
    
         
            +
                        link_member_name = link.attributes["start"].value == xmi_id ? "end" : "start"
         
     | 
| 
      
 132 
     | 
    
         
            +
                        linke_owner_name = link_member_name == "start" ? "end" : "start"
         
     | 
| 
      
 133 
     | 
    
         
            +
                        member_end, member_end_type, member_end_cardinality, member_end_attribute_name = serialize_member_type(xmi_id, link, link_member_name)
         
     | 
| 
      
 134 
     | 
    
         
            +
                        owner_end, owner_end_cardinality, owner_end_attribute_name = serialize_owned_type(xmi_id, link, linke_owner_name)
         
     | 
| 
       94 
135 
     | 
    
         
             
                        if member_end && ((member_end_type != 'aggregation') || (member_end_type == 'aggregation' && member_end_attribute_name))
         
     | 
| 
      
 136 
     | 
    
         
            +
                          doc_node_name = link_member_name == "start" ? "source" : "target"
         
     | 
| 
      
 137 
     | 
    
         
            +
                          definition_node = main_model.xpath(%(//connector[@xmi:idref="#{link['xmi:id']}"]/#{doc_node_name}/documentation)).first
         
     | 
| 
      
 138 
     | 
    
         
            +
                          definition = definition_node.attributes['value']&.value if definition_node
         
     | 
| 
       95 
139 
     | 
    
         
             
                          {
         
     | 
| 
       96 
140 
     | 
    
         
             
                            xmi_id: link["xmi:id"],
         
     | 
| 
       97 
141 
     | 
    
         
             
                            member_end: member_end,
         
     | 
| 
       98 
142 
     | 
    
         
             
                            member_end_type: member_end_type,
         
     | 
| 
       99 
143 
     | 
    
         
             
                            member_end_cardinality: member_end_cardinality,
         
     | 
| 
       100 
144 
     | 
    
         
             
                            member_end_attribute_name: member_end_attribute_name,
         
     | 
| 
      
 145 
     | 
    
         
            +
                            owner_end: owner_end,
         
     | 
| 
      
 146 
     | 
    
         
            +
                            definition: definition
         
     | 
| 
       101 
147 
     | 
    
         
             
                          }
         
     | 
| 
       102 
148 
     | 
    
         
             
                        end
         
     | 
| 
       103 
     | 
    
         
            -
                      end
         
     | 
| 
      
 149 
     | 
    
         
            +
                      end.uniq
         
     | 
| 
      
 150 
     | 
    
         
            +
                    end
         
     | 
| 
      
 151 
     | 
    
         
            +
             
     | 
| 
      
 152 
     | 
    
         
            +
                    def serialize_class_operations(klass)
         
     | 
| 
      
 153 
     | 
    
         
            +
                      klass.xpath('.//ownedOperation').map do |attribute|
         
     | 
| 
      
 154 
     | 
    
         
            +
                        type = attribute.xpath(".//type").first || {}
         
     | 
| 
      
 155 
     | 
    
         
            +
                        if attribute.attributes["association"].nil?
         
     | 
| 
      
 156 
     | 
    
         
            +
                          {
         
     | 
| 
      
 157 
     | 
    
         
            +
                            # TODO: xmi_id
         
     | 
| 
      
 158 
     | 
    
         
            +
                            # xmi_id: klass['xmi:id'],
         
     | 
| 
      
 159 
     | 
    
         
            +
                            name: attribute["name"],
         
     | 
| 
      
 160 
     | 
    
         
            +
                            definition: lookup_attribute_definition(attribute),
         
     | 
| 
      
 161 
     | 
    
         
            +
                          }
         
     | 
| 
      
 162 
     | 
    
         
            +
                        end
         
     | 
| 
      
 163 
     | 
    
         
            +
                      end.compact
         
     | 
| 
       104 
164 
     | 
    
         
             
                    end
         
     | 
| 
       105 
165 
     | 
    
         | 
| 
       106 
166 
     | 
    
         
             
                    def serialize_class_constraints(klass)
         
     | 
| 
         @@ -108,34 +168,88 @@ module Lutaml 
     | 
|
| 
       108 
168 
     | 
    
         
             
                        {
         
     | 
| 
       109 
169 
     | 
    
         
             
                          xmi_id: constraint["xmi:id"],
         
     | 
| 
       110 
170 
     | 
    
         
             
                          body: constraint["name"],
         
     | 
| 
      
 171 
     | 
    
         
            +
                          definition: HTMLEntities.new.decode(constraint["description"])
         
     | 
| 
       111 
172 
     | 
    
         
             
                        }
         
     | 
| 
       112 
173 
     | 
    
         
             
                      end
         
     | 
| 
       113 
174 
     | 
    
         
             
                    end
         
     | 
| 
       114 
175 
     | 
    
         | 
| 
       115 
     | 
    
         
            -
                    def  
     | 
| 
      
 176 
     | 
    
         
            +
                    def serialize_owned_type(owner_xmi_id, link, linke_owner_name)
         
     | 
| 
       116 
177 
     | 
    
         
             
                      return if link.name == 'NoteLink'
         
     | 
| 
       117 
     | 
    
         
            -
                      return generalization_association( 
     | 
| 
      
 178 
     | 
    
         
            +
                      return generalization_association(owner_xmi_id, link) if link.name == "Generalization"
         
     | 
| 
      
 179 
     | 
    
         
            +
             
     | 
| 
      
 180 
     | 
    
         
            +
                      xmi_id = link.attributes[linke_owner_name].value
         
     | 
| 
      
 181 
     | 
    
         
            +
                      owner_end = lookup_entity_name(xmi_id) || connector_source_name(xmi_id)
         
     | 
| 
      
 182 
     | 
    
         
            +
             
     | 
| 
      
 183 
     | 
    
         
            +
                      if link.name == "Association"
         
     | 
| 
      
 184 
     | 
    
         
            +
                        assoc_connector = main_model.xpath(%(//connector[@xmi:idref="#{link['xmi:id']}"]/source)).first
         
     | 
| 
      
 185 
     | 
    
         
            +
                        if assoc_connector
         
     | 
| 
      
 186 
     | 
    
         
            +
                          connector_type = assoc_connector.children.find { |node| node.name == 'type' }
         
     | 
| 
      
 187 
     | 
    
         
            +
                          if connector_type && connector_type.attributes['multiplicity']
         
     | 
| 
      
 188 
     | 
    
         
            +
                            cardinality = connector_type.attributes['multiplicity']&.value&.split('..')
         
     | 
| 
      
 189 
     | 
    
         
            +
                            cardinality.unshift('1') if cardinality.length == 1
         
     | 
| 
      
 190 
     | 
    
         
            +
                            min, max = cardinality
         
     | 
| 
      
 191 
     | 
    
         
            +
                          end
         
     | 
| 
      
 192 
     | 
    
         
            +
                          connector_role = assoc_connector.children.find { |node| node.name == 'role' }
         
     | 
| 
      
 193 
     | 
    
         
            +
                          if connector_role
         
     | 
| 
      
 194 
     | 
    
         
            +
                            owned_attribute_name = connector_role.attributes["name"]&.value
         
     | 
| 
      
 195 
     | 
    
         
            +
                          end
         
     | 
| 
      
 196 
     | 
    
         
            +
                          owned_cardinality = { "min" => LOWER_VALUE_MAPPINGS[min], "max" => max }
         
     | 
| 
      
 197 
     | 
    
         
            +
                        end
         
     | 
| 
      
 198 
     | 
    
         
            +
                      else
         
     | 
| 
      
 199 
     | 
    
         
            +
                        owned_node = main_model.xpath(%(//ownedAttribute[@association]/type[@xmi:idref="#{xmi_id}"])).first
         
     | 
| 
      
 200 
     | 
    
         
            +
                        if owned_node
         
     | 
| 
      
 201 
     | 
    
         
            +
                          assoc = owned_node.parent
         
     | 
| 
      
 202 
     | 
    
         
            +
                          owned_cardinality = { "min" => cardinality_min_value(assoc), "max" => cardinality_max_value(assoc) }
         
     | 
| 
      
 203 
     | 
    
         
            +
                          owned_attribute_name = assoc.attributes["name"]&.value
         
     | 
| 
      
 204 
     | 
    
         
            +
                        end
         
     | 
| 
      
 205 
     | 
    
         
            +
                      end
         
     | 
| 
       118 
206 
     | 
    
         | 
| 
       119 
     | 
    
         
            -
                       
     | 
| 
       120 
     | 
    
         
            -
             
     | 
| 
      
 207 
     | 
    
         
            +
                      [owner_end, owned_cardinality, owned_attribute_name]
         
     | 
| 
      
 208 
     | 
    
         
            +
                    end
         
     | 
| 
       121 
209 
     | 
    
         | 
| 
       122 
     | 
    
         
            -
             
     | 
| 
       123 
     | 
    
         
            -
             
     | 
| 
       124 
     | 
    
         
            -
             
     | 
| 
       125 
     | 
    
         
            -
             
     | 
| 
       126 
     | 
    
         
            -
             
     | 
| 
       127 
     | 
    
         
            -
             
     | 
| 
       128 
     | 
    
         
            -
             
     | 
| 
       129 
     | 
    
         
            -
                         
     | 
| 
       130 
     | 
    
         
            -
             
     | 
| 
       131 
     | 
    
         
            -
                         
     | 
| 
      
 210 
     | 
    
         
            +
                    def serialize_member_type(owner_xmi_id, link, link_member_name)
         
     | 
| 
      
 211 
     | 
    
         
            +
                      return if link.name == 'NoteLink'
         
     | 
| 
      
 212 
     | 
    
         
            +
                      return generalization_association(owner_xmi_id, link) if link.name == "Generalization"
         
     | 
| 
      
 213 
     | 
    
         
            +
             
     | 
| 
      
 214 
     | 
    
         
            +
                      xmi_id = link.attributes[link_member_name].value
         
     | 
| 
      
 215 
     | 
    
         
            +
                      if link.attributes["start"].value == owner_xmi_id
         
     | 
| 
      
 216 
     | 
    
         
            +
                        xmi_id = link.attributes["end"].value
         
     | 
| 
      
 217 
     | 
    
         
            +
                        member_end = lookup_entity_name(xmi_id) || connector_target_name(xmi_id)
         
     | 
| 
      
 218 
     | 
    
         
            +
                      else
         
     | 
| 
      
 219 
     | 
    
         
            +
                        xmi_id = link.attributes["start"].value
         
     | 
| 
      
 220 
     | 
    
         
            +
                        member_end = lookup_entity_name(xmi_id) || connector_source_name(xmi_id)
         
     | 
| 
      
 221 
     | 
    
         
            +
                      end
         
     | 
| 
      
 222 
     | 
    
         
            +
             
     | 
| 
      
 223 
     | 
    
         
            +
                      if link.name == "Association"
         
     | 
| 
      
 224 
     | 
    
         
            +
                        connector_type = link_member_name == "start" ? "source" : "target"
         
     | 
| 
      
 225 
     | 
    
         
            +
                        assoc_connector = main_model.xpath(%(//connector[@xmi:idref="#{link['xmi:id']}"]/#{connector_type})).first
         
     | 
| 
      
 226 
     | 
    
         
            +
                        if assoc_connector
         
     | 
| 
      
 227 
     | 
    
         
            +
                          connector_type = assoc_connector.children.find { |node| node.name == 'type' }
         
     | 
| 
      
 228 
     | 
    
         
            +
                          if connector_type && connector_type.attributes['multiplicity']
         
     | 
| 
      
 229 
     | 
    
         
            +
                            cardinality = connector_type.attributes['multiplicity']&.value&.split('..')
         
     | 
| 
      
 230 
     | 
    
         
            +
                            cardinality.unshift('1') if cardinality.length == 1
         
     | 
| 
      
 231 
     | 
    
         
            +
                            min, max = cardinality
         
     | 
| 
      
 232 
     | 
    
         
            +
                          end
         
     | 
| 
      
 233 
     | 
    
         
            +
                          connector_role = assoc_connector.children.find { |node| node.name == 'role' }
         
     | 
| 
      
 234 
     | 
    
         
            +
                          if connector_role
         
     | 
| 
      
 235 
     | 
    
         
            +
                            member_end_attribute_name = connector_role.attributes["name"]&.value
         
     | 
| 
      
 236 
     | 
    
         
            +
                          end
         
     | 
| 
      
 237 
     | 
    
         
            +
                          member_end_cardinality = { "min" => LOWER_VALUE_MAPPINGS[min], "max" => max }
         
     | 
| 
      
 238 
     | 
    
         
            +
                        end
         
     | 
| 
      
 239 
     | 
    
         
            +
                      else
         
     | 
| 
      
 240 
     | 
    
         
            +
                        member_end_node = main_model.xpath(%(//ownedAttribute[@association]/type[@xmi:idref="#{xmi_id}"])).first
         
     | 
| 
      
 241 
     | 
    
         
            +
                        if member_end_node
         
     | 
| 
      
 242 
     | 
    
         
            +
                          assoc = member_end_node.parent
         
     | 
| 
      
 243 
     | 
    
         
            +
                          member_end_cardinality = { "min" => cardinality_min_value(assoc), "max" => cardinality_max_value(assoc) }
         
     | 
| 
      
 244 
     | 
    
         
            +
                          member_end_attribute_name = assoc.attributes["name"]&.value
         
     | 
| 
      
 245 
     | 
    
         
            +
                        end
         
     | 
| 
       132 
246 
     | 
    
         
             
                      end
         
     | 
| 
       133 
247 
     | 
    
         | 
| 
       134 
248 
     | 
    
         
             
                      [member_end, "aggregation", member_end_cardinality, member_end_attribute_name]
         
     | 
| 
       135 
249 
     | 
    
         
             
                    end
         
     | 
| 
       136 
250 
     | 
    
         | 
| 
       137 
     | 
    
         
            -
                    def generalization_association( 
     | 
| 
       138 
     | 
    
         
            -
                      if link.attributes["start"].value ==  
     | 
| 
      
 251 
     | 
    
         
            +
                    def generalization_association(owner_xmi_id, link)
         
     | 
| 
      
 252 
     | 
    
         
            +
                      if link.attributes["start"].value == owner_xmi_id
         
     | 
| 
       139 
253 
     | 
    
         
             
                        xmi_id = link.attributes["end"].value
         
     | 
| 
       140 
254 
     | 
    
         
             
                        member_end_type = "inheritance"
         
     | 
| 
       141 
255 
     | 
    
         
             
                        member_end = lookup_entity_name(xmi_id) || connector_target_name(xmi_id)
         
     | 
| 
         @@ -180,7 +294,7 @@ module Lutaml 
     | 
|
| 
       180 
294 
     | 
    
         
             
                      return unless lower_value_node
         
     | 
| 
       181 
295 
     | 
    
         | 
| 
       182 
296 
     | 
    
         
             
                      lower_value = lower_value_node.attributes["value"]&.value
         
     | 
| 
       183 
     | 
    
         
            -
                       
     | 
| 
      
 297 
     | 
    
         
            +
                      LOWER_VALUE_MAPPINGS[lower_value]
         
     | 
| 
       184 
298 
     | 
    
         
             
                    end
         
     | 
| 
       185 
299 
     | 
    
         | 
| 
       186 
300 
     | 
    
         
             
                    def cardinality_max_value(node)
         
     | 
    
        data/lib/lutaml/xmi/version.rb
    CHANGED
    
    
    
        data/lutaml-xmi.gemspec
    CHANGED
    
    | 
         @@ -26,10 +26,11 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       26 
26 
     | 
    
         
             
              spec.add_runtime_dependency "hashie", "~> 4.1.0"
         
     | 
| 
       27 
27 
     | 
    
         
             
              spec.add_runtime_dependency "thor", "~> 1.0"
         
     | 
| 
       28 
28 
     | 
    
         
             
              spec.add_runtime_dependency "lutaml-uml"
         
     | 
| 
      
 29 
     | 
    
         
            +
              spec.add_runtime_dependency "nokogiri", "~> 1.10"
         
     | 
| 
      
 30 
     | 
    
         
            +
              spec.add_runtime_dependency "htmlentities"
         
     | 
| 
       29 
31 
     | 
    
         | 
| 
       30 
32 
     | 
    
         
             
              spec.add_development_dependency "bundler", "~> 2.0"
         
     | 
| 
       31 
33 
     | 
    
         
             
              spec.add_development_dependency "byebug"
         
     | 
| 
       32 
     | 
    
         
            -
              spec.add_development_dependency "nokogiri", "~> 1.10"
         
     | 
| 
       33 
34 
     | 
    
         
             
              spec.add_development_dependency "pry", "~> 0.12.2"
         
     | 
| 
       34 
35 
     | 
    
         
             
              spec.add_development_dependency "rake", "~> 10.0"
         
     | 
| 
       35 
36 
     | 
    
         
             
              spec.add_development_dependency "rspec", "~> 3.0"
         
     | 
| 
         @@ -1493,6 +1493,134 @@ 
     | 
|
| 
       1493 
1493 
     | 
    
         
             
            			<xrefs/>
         
     | 
| 
       1494 
1494 
     | 
    
         
             
            			<tags/>
         
     | 
| 
       1495 
1495 
     | 
    
         
             
            		</connector>
         
     | 
| 
      
 1496 
     | 
    
         
            +
            		<diagrams>
         
     | 
| 
      
 1497 
     | 
    
         
            +
            			<diagram xmi:id="EAID_E9201FDF_B8D6_48cb_B683_3A3FE2170BDD">
         
     | 
| 
      
 1498 
     | 
    
         
            +
            				<model package="EAPK_04AA6D68_5225_400f_818D_4772E5A132EB" localID="1" owner="EAPK_04AA6D68_5225_400f_818D_4772E5A132EB" tpos="0"/>
         
     | 
| 
      
 1499 
     | 
    
         
            +
            				<properties name="Fig: DGGS Package Diagram" type="Logical" documentation="this is a documentation"/>
         
     | 
| 
      
 1500 
     | 
    
         
            +
            				<project author="Robert Gibb" version="2019" created="2019-10-21 16:18:34" modified="2020-12-05 23:55:38"/>
         
     | 
| 
      
 1501 
     | 
    
         
            +
            				<style1 value="ShowPrivate=1;ShowProtected=1;ShowPublic=1;HideRelationships=0;Locked=0;Border=0;HighlightForeign=1;PackageContents=0;SequenceNotes=0;ScalePrintImage=0;PPgs.cx=0;PPgs.cy=0;DocSize.cx=795;DocSize.cy=1138;ShowDetails=0;Orientation=P;Zoom=100;ShowTags=0;OpParams=1;VisibleAttributeDetail=0;ShowOpRetType=1;ShowIcons=1;CollabNums=0;HideProps=0;ShowReqs=0;ShowCons=0;PaperSize=9;HideParents=0;UseAlias=0;HideAtts=1;HideOps=1;HideStereo=1;HideElemStereo=1;ShowTests=0;ShowMaint=0;ConnectorNotation=UML 2.1;ExplicitNavigability=0;ShowShape=1;AllDockable=0;AdvancedElementProps=1;AdvancedFeatureProps=1;AdvancedConnectorProps=0;m_bElementClassifier=1;SPT=1;ShowNotes=0;SuppressBrackets=0;SuppConnectorLabels=0;PrintPageHeadFoot=0;ShowAsList=0;HideConnStereotype=1;ShowFQN=1;"/>
         
     | 
| 
      
 1502 
     | 
    
         
            +
            				<style2 value="ExcludeRTF=0;DocAll=0;HideQuals=0;AttPkg=1;ShowTests=0;ShowMaint=0;SuppressFOC=1;MatrixActive=0;SwimlanesActive=1;KanbanActive=0;MatrixLineWidth=1;MatrixLineClr=0;MatrixLocked=0;TConnectorNotation=UML 2.1;TExplicitNavigability=0;AdvancedElementProps=1;AdvancedFeatureProps=1;AdvancedConnectorProps=0;m_bElementClassifier=1;SPT=1;MDGDgm=;STBLDgm=;ShowNotes=0;VisibleAttributeDetail=0;ShowOpRetType=1;SuppressBrackets=0;SuppConnectorLabels=0;PrintPageHeadFoot=0;ShowAsList=0;HideConnStereotype=1;ShowFQN=1;SuppressedCompartments=;Theme=Monochrome for printing:119;HideFeatLink=1;SaveTag=FF8D95FE;"/>
         
     | 
| 
      
 1503 
     | 
    
         
            +
            				<swimlanes value="locked=false;orientation=0;width=0;inbar=false;names=false;color=0;bold=false;fcol=0;tcol=16777215;ofCol=-1;ufCol=-1;hl=0;ufh=0;hh=0;cls=0;bw=0;hli=0;SwimlaneFont=lfh:-10,lfw:0,lfi:0,lfu:0,lfs:0,lfface:Carlito,lfe:0,lfo:0,lfchar:1,lfop:0,lfcp:0,lfq:0,lfpf=0,lfWidth=0;"/>
         
     | 
| 
      
 1504 
     | 
    
         
            +
            				<matrixitems value="locked=false;matrixactive=false;swimlanesactive=true;kanbanactive=false;width=1;clrLine=0;"/>
         
     | 
| 
      
 1505 
     | 
    
         
            +
            				<extendedProperties/>
         
     | 
| 
      
 1506 
     | 
    
         
            +
            				<elements>
         
     | 
| 
      
 1507 
     | 
    
         
            +
            					<element geometry="Left=90;Top=890;Right=195;Bottom=949;imgL=98;imgT=906;imgR=203;imgB=965;" subject="EAID_D87CFCD1_E6FA_40b1_8DF4_582457AAE03E" seqno="1" style="NSL=0;BCol=-1;BFol=-1;LCol=-1;LWth=-1;fontsz=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=0;DUID=A614872E;"/>
         
     | 
| 
      
 1508 
     | 
    
         
            +
            					<element geometry="Left=600;Top=890;Right=686;Bottom=947;imgL=608;imgT=906;imgR=694;imgB=963;" subject="EAID_AC202A78_2895_4f28_B947_B92AF0AD3051" seqno="2" style="NSL=0;BCol=-1;BFol=-1;LCol=-1;LWth=-1;fontsz=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=0;DUID=99DF6365;"/>
         
     | 
| 
      
 1509 
     | 
    
         
            +
            					<element geometry="Left=715;Top=890;Right=809;Bottom=949;imgL=723;imgT=906;imgR=817;imgB=965;" subject="EAID_0D462D6E_4097_44ae_AAEC_FA91FD6F6988" seqno="3" style="NSL=0;BCol=-1;BFol=-1;LCol=-1;fontsz=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=0;LWth=0;DUID=56F0EC08;"/>
         
     | 
| 
      
 1510 
     | 
    
         
            +
            					<element geometry="Left=73;Top=283;Right=322;Bottom=324;imgL=81;imgT=299;imgR=330;imgB=340;" subject="EAID_91372B9D_392D_4e8f_8935_AF840790A1D3" seqno="4" style=" DUID=A2D3ACE3;NSL=0;bold=0;black=0;italic=0;ul=0;charset=0;LCol=3329330;BFol=0;font=Calibri;BCol=16777215;LWth=2;fontsz=90;pitch=34;DUID=414AD010;"/>
         
     | 
| 
      
 1511 
     | 
    
         
            +
            					<element geometry="Left=465;Top=706;Right=753;Bottom=746;imgL=473;imgT=722;imgR=761;imgB=762;" subject="EAID_AC035E38_542D_4eca_87EB_CE687A3C69D7" seqno="5" style=" DUID=EC55C00E;NSL=0;BCol=-1;BFol=-1;LCol=-1;bold=0;black=0;italic=0;ul=0;charset=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;RzO=1;LWth=0;font=Calibri;fontsz=90;pitch=34;DUID=F8049856;"/>
         
     | 
| 
      
 1512 
     | 
    
         
            +
            					<element geometry="Left=90;Top=560;Right=347;Bottom=601;imgL=98;imgT=576;imgR=355;imgB=617;" subject="EAID_C93A8CD8_53C7_4d95_8BC7_591AE2BB7563" seqno="6" style=" DUID=7C7D5F0D;NSL=0;BCol=-1;BFol=-1;LCol=-1;bold=0;black=0;italic=0;ul=0;charset=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;RzO=1;pitch=34;font=Calibri;LWth=2;fontsz=90;DUID=9AA052D2;"/>
         
     | 
| 
      
 1513 
     | 
    
         
            +
            					<element geometry="Left=90;Top=460;Right=347;Bottom=501;imgL=98;imgT=476;imgR=355;imgB=517;" subject="EAID_308C1C4A_8DC9_4e2c_88CD_2B08506CABF6" seqno="7" style=" DUID=D015E04E;NSL=0;BCol=-1;BFol=-1;LCol=-1;bold=0;black=0;italic=0;ul=0;charset=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;RzO=1;pitch=34;font=Calibri;LWth=2;fontsz=90;DUID=1BDF6B75;"/>
         
     | 
| 
      
 1514 
     | 
    
         
            +
            					<element geometry="Left=60;Top=411;Right=376;Bottom=651;imgL=68;imgT=427;imgR=384;imgB=667;" subject="EAID_6FEDD31A_6F40_4ed8_9230_600BB66D2296" seqno="8" style=" DUID=28200C96;NSL=0;BCol=-1;LCol=-1;bold=0;black=0;italic=0;ul=0;charset=0;BFol=0;font=Calibri;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;RzO=1;LWth=0;fontsz=90;pitch=34;DUID=225AD012;"/>
         
     | 
| 
      
 1515 
     | 
    
         
            +
            					<element geometry="Left=462;Top=524;Right=774;Bottom=587;imgL=470;imgT=540;imgR=782;imgB=603;" subject="EAID_48946985_6B5B_4ed9_B66D_C3AE45D93CA2" seqno="9" style=" DUID=FBD0AD13;NSL=0;BCol=-1;BFol=-1;LCol=-1;bold=0;black=0;italic=0;ul=0;charset=0;LWth=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;pitch=34;RzO=2;font=Calibri;fontsz=90;DUID=46FDB905;"/>
         
     | 
| 
      
 1516 
     | 
    
         
            +
            					<element geometry="Left=485;Top=19;Right=790;Bottom=60;imgL=493;imgT=35;imgR=798;imgB=76;" subject="EAID_6F4DCF8C_E51D_4645_B579_A802BF70796D" seqno="10" style=" DUID=1DCA28CD;NSL=0;bold=0;black=0;italic=0;ul=0;charset=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;PType=0;RzO=1;BCol=16777215;BFol=0;LWth=2;pitch=34;font=Calibri;LCol=3107669;fontsz=90;DUID=AED27AB9;"/>
         
     | 
| 
      
 1517 
     | 
    
         
            +
            					<element geometry="Left=466;Top=780;Right=754;Bottom=822;imgL=474;imgT=796;imgR=762;imgB=838;" subject="EAID_7C88ECAD_27B4_4211_83D4_ED24E5CF4E84" seqno="11" style=" DUID=1D3BA107;NSL=0;BCol=-1;BFol=-1;LCol=-1;LWth=-1;bold=0;black=0;italic=0;ul=0;charset=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;PType=0;RzO=1;pitch=34;font=Calibri;fontsz=90;DUID=C0A13AD6;"/>
         
     | 
| 
      
 1518 
     | 
    
         
            +
            					<element geometry="Left=465;Top=630;Right=753;Bottom=671;imgL=473;imgT=646;imgR=761;imgB=687;" subject="EAID_8EBFE6FE_6049_4b85_9A81_1EF5B098BAFB" seqno="12" style=" DUID=A705F8CF;NSL=0;BCol=-1;BFol=-1;LCol=-1;bold=0;black=0;italic=0;ul=0;charset=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;PType=0;RzO=1;pitch=34;LWth=0;font=Calibri;fontsz=90;DUID=36F9BF02;"/>
         
     | 
| 
      
 1519 
     | 
    
         
            +
            					<element geometry="Left=430;Top=483;Right=791;Bottom=859;imgL=438;imgT=499;imgR=799;imgB=875;" subject="EAID_30110D27_B617_47d1_B6F0_6F1A3E9D9AA4" seqno="13" style=" DUID=65DCE573;NSL=0;BCol=-1;BFol=-1;LCol=-1;bold=0;black=0;italic=0;ul=0;charset=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;PType=0;RzO=1;pitch=34;LWth=2;font=Calibri;fontsz=90;DUID=641BB11A;"/>
         
     | 
| 
      
 1520 
     | 
    
         
            +
            					<element geometry="Left=73;Top=186;Right=322;Bottom=227;imgL=81;imgT=202;imgR=330;imgB=243;" subject="EAID_A6E1BC79_B072_451f_AAD5_D914E44B941A" seqno="14" style=" DUID=FD6FF5AF;NSL=0;bold=0;black=0;italic=0;ul=0;charset=0;BFol=0;LWth=2;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;PType=0;RzO=1;LCol=6717674;pitch=34;font=Calibri;BCol=16777215;fontsz=90;DUID=89C9883D;"/>
         
     | 
| 
      
 1521 
     | 
    
         
            +
            					<element geometry="Left=73;Top=102;Right=322;Bottom=143;imgL=81;imgT=118;imgR=330;imgB=159;" subject="EAID_1BD723DA_7A8F_4092_8396_B9AB3C916ADE" seqno="15" style=" NSL=0;bold=0;black=0;italic=0;ul=0;charset=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;PType=0;RzO=1;LCol=16734039;BFol=0;pitch=34;font=Calibri;BCol=16777215;LWth=2;fontsz=90;DUID=A8EB1B43;"/>
         
     | 
| 
      
 1522 
     | 
    
         
            +
            					<element geometry="Left=485;Top=102;Right=790;Bottom=143;imgL=493;imgT=118;imgR=798;imgB=159;" subject="EAID_877217FC_8B39_4d2d_87D9_B7116CA4109E" seqno="16" style="NSL=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;PType=0;RzO=1;LCol=3329330;BFol=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=34;font=Calibri;BCol=16777215;LWth=2;fontsz=90;DUID=26308E53;"/>
         
     | 
| 
      
 1523 
     | 
    
         
            +
            					<element geometry="Left=485;Top=185;Right=790;Bottom=226;imgL=493;imgT=201;imgR=798;imgB=242;" subject="EAID_E1339BBA_2C02_4df1_ABA9_EB9DE78622CE" seqno="17" style="NSL=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;PType=0;RzO=1;LCol=3329330;BFol=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=34;font=Calibri;BCol=16777215;LWth=2;fontsz=90;DUID=29194FDD;"/>
         
     | 
| 
      
 1524 
     | 
    
         
            +
            					<element geometry="Left=73;Top=19;Right=322;Bottom=60;imgL=81;imgT=35;imgR=330;imgB=76;" subject="EAID_BACD4C75_AA34_4201_B129_E5D8533F8DC8" seqno="18" style="NSL=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;PType=0;RzO=1;LCol=3329330;BFol=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=34;font=Calibri;BCol=16777215;LWth=2;fontsz=90;DUID=16290BBA;"/>
         
     | 
| 
      
 1525 
     | 
    
         
            +
            					<element geometry="Left=485;Top=267;Right=790;Bottom=324;imgL=493;imgT=283;imgR=798;imgB=340;" subject="EAID_97DF41C5_745A_4794_8FA4_288EF531AD7D" seqno="19" style=" DUID=DFF9D1D0;NSL=0;bold=0;black=0;italic=0;ul=0;charset=0;BFol=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;PType=0;RzO=1;LCol=-1;BCol=5301246;pitch=34;font=Calibri;fontsz=90;LWth=0;DUID=E17F0DCC;"/>
         
     | 
| 
      
 1526 
     | 
    
         
            +
            					<element geometry="Left=485;Top=407;Right=792;Bottom=466;imgL=493;imgT=423;imgR=800;imgB=482;" subject="EAID_A603DED3_3EF2_4ad5_AD2C_E724773DA860" seqno="20" style=" DUID=78DE671C;bold=0;black=0;italic=0;ul=0;charset=0;pitch=34;BFol=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;OpPro=0;OpPri=0;OpPub=0;OpPkg=0;AttCustom=0;OpCustom=0;PType=0;RzO=1;LWth=2;font=Calibri;fontsz=90;DUID=E878E011;"/>
         
     | 
| 
      
 1527 
     | 
    
         
            +
            					<element geometry="Left=45;Top=366;Right=810;Bottom=880;imgL=53;imgT=382;imgR=818;imgB=896;" subject="EAID_04AA6D68_5225_400f_818D_4772E5A132EB" seqno="21" style=" DUID=407A9D7B;NSL=0;BCol=-1;BFol=-1;LCol=-1;bold=0;black=0;italic=0;ul=0;charset=0;AttPro=0;AttPri=0;AttPub=0;AttPkg=0;AttCustom=0;OpCustom=0;RzO=1;pitch=34;font=Calibri;LWth=4;fontsz=90;DUID=84120163;"/>
         
     | 
| 
      
 1528 
     | 
    
         
            +
            					<element geometry="Left=224;Top=890;Right=329;Bottom=949;imgL=232;imgT=906;imgR=337;imgB=965;" subject="EAID_1CB40178_1C4B_4fe9_9164_60277DDBE8C9" seqno="22" style="NSL=0;BCol=-1;BFol=-1;LCol=-1;LWth=-1;fontsz=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=0;DUID=0313BEC0;"/>
         
     | 
| 
      
 1529 
     | 
    
         
            +
            					<element geometry="Left=358;Top=890;Right=446;Bottom=949;imgL=366;imgT=906;imgR=454;imgB=965;" subject="EAID_83CE8700_5125_43f8_A2AC_732E0332D8B0" seqno="23" style="NSL=0;BCol=-1;BFol=-1;LCol=-1;LWth=-1;fontsz=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=0;DUID=CFADB72C;"/>
         
     | 
| 
      
 1530 
     | 
    
         
            +
            					<element geometry="Left=475;Top=890;Right=571;Bottom=949;imgL=483;imgT=906;imgR=579;imgB=965;" subject="EAID_D585DDCF_D101_47de_ABA6_1DEDFD2781FF" seqno="24" style="NSL=0;BCol=-1;BFol=-1;LCol=-1;LWth=-1;fontsz=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=0;DUID=B1095BCA;"/>
         
     | 
| 
      
 1531 
     | 
    
         
            +
            					<element geometry="Left=50;Top=909;Right=190;Bottom=949;imgL=58;imgT=925;imgR=198;imgB=965;" subject="EAID_84245574_3005_4626_89CE_CAF1B29F159A" seqno="25" style="LCol=16777215;DUID=57E555C3;"/>
         
     | 
| 
      
 1532 
     | 
    
         
            +
            					<element geometry=" 1908, 611, 54, 661,;EDGE=3;SX=31;SY=-5;EX=31;EY=-5;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_C7D219C2_5DDC_4e27_9DF7_C5B9AAD61BAA" style="Mode=2;Color=-1;LWidth=0;SOID=29194FDD;EOID=26308E53;Hidden=1;"/>
         
     | 
| 
      
 1533 
     | 
    
         
            +
            					<element geometry="SX=0;SY=-7;EX=0;EY=-13;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=27:-587$27:-316$;" subject="EAID_79BA4C65_14E1_4545_82D1_B940BE09BBD8" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=9AA052D2;EOID=414AD010;Hidden=0;"/>
         
     | 
| 
      
 1534 
     | 
    
         
            +
            					<element geometry="SX=0;SY=-3;EX=0;EY=-13;EDGE=2;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=380:-483$380:-316$;" subject="EAID_68020FA0_9BD2_409d_9B77_A4A79729E6CC" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=1BDF6B75;EOID=414AD010;Hidden=0;"/>
         
     | 
| 
      
 1535 
     | 
    
         
            +
            					<element geometry="SX=-1;SY=-16;EX=-2;EY=8;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=401:-579$401:-570$;" subject="EAID_60D5446C_1B6E_42f3_80CC_1DA77A7D6098" style="Mode=1;Color=-1;LWidth=0;SOID=46FDB905;EOID=9AA052D2;Hidden=0;"/>
         
     | 
| 
      
 1536 
     | 
    
         
            +
            					<element geometry="SX=0;SY=-11;EX=0;EY=-16;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=402:-566$402:-496$;" subject="EAID_859DDADE_39C5_4448_A842_DE38F9F6924A" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=46FDB905;EOID=1BDF6B75;Hidden=0;"/>
         
     | 
| 
      
 1537 
     | 
    
         
            +
            					<element geometry="SX=0;SY=-4;EX=0;EY=-11;EDGE=2;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=781:-654$781:-566$;" subject="EAID_ADD4CE1F_C175_410d_8653_DC9FEF4BCCA2" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=36F9BF02;EOID=46FDB905;Hidden=0;"/>
         
     | 
| 
      
 1538 
     | 
    
         
            +
            					<element geometry="SX=-168;SY=0;EX=0;EY=-15;EDGE=1;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=603:-561$;" subject="EAID_A66E48D5_955B_4163_82F7_53F3F5B8DC2D" style="Mode=3;Color=0;LWidth=0;TREE=OS;SOID=641BB11A;EOID=46FDB905;Hidden=1;"/>
         
     | 
| 
      
 1539 
     | 
    
         
            +
            					<element geometry="SX=0;SY=-9;EX=0;EY=-24;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=437:-735$437:-579$;" subject="EAID_BBD43D58_63B4_447c_8112_AFE932D329AF" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=F8049856;EOID=46FDB905;Hidden=0;"/>
         
     | 
| 
      
 1540 
     | 
    
         
            +
            					<element geometry="SX=23;SY=1;EX=-35;EY=-16;EDGE=3;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_2D0A8A53_1233_43d0_AC93_AEE320786982" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=E878E011;EOID=46FDB905;Hidden=0;"/>
         
     | 
| 
      
 1541 
     | 
    
         
            +
            					<element geometry="SX=0;SY=3;EX=0;EY=-12;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=419:-552$419:-51$;" subject="EAID_AD2F75AD_A76F_4a42_A12A_A5B0D004A57F" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=46FDB905;EOID=AED27AB9;Hidden=0;"/>
         
     | 
| 
      
 1542 
     | 
    
         
            +
            					<element geometry="SX=0;SY=-7;EX=0;EY=-10;EDGE=2;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=385:-487$385:-216$;" subject="EAID_831A9407_E7B2_41af_80EF_2B7E4C8860F0" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=1BDF6B75;EOID=89C9883D;Hidden=0;"/>
         
     | 
| 
      
 1543 
     | 
    
         
            +
            					<element geometry="SX=0;SY=-15;EX=0;EY=-7;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=17:-741$17:-129$;" subject="EAID_8349BC7D_5A79_4813_A9C8_7CA791416343" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=F8049856;EOID=A8EB1B43;Hidden=0;"/>
         
     | 
| 
      
 1544 
     | 
    
         
            +
            					<element geometry="EDGE=3;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_9BE0DFD4_BEA9_465a_B70C_A22E35136D6F" style="Mode=3;Color=-1;LWidth=0;SOID=16290BBA;EOID=414AD010;Hidden=1;"/>
         
     | 
| 
      
 1545 
     | 
    
         
            +
            					<element geometry="SX=0;SY=-12;EX=0;EY=-14;EDGE=2;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=389:-492$389:-136$;" subject="EAID_FC1C2A04_5C04_4483_BD6F_316B63C1D961" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=1BDF6B75;EOID=A8EB1B43;Hidden=0;"/>
         
     | 
| 
      
 1546 
     | 
    
         
            +
            					<element geometry="EDGE=4;EX=-76;EY=0;SX=0;SY=-8;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=333:-781$;" subject="EAID_30995DCB_E854_4993_8DEE_99E0B0ABFD39" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=C0A13AD6;EOID=641BB11A;Hidden=1;"/>
         
     | 
| 
      
 1547 
     | 
    
         
            +
            					<element geometry="SX=0;SY=-13;EX=0;EY=-10;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=451:-449$451:-132$;" subject="EAID_1BACFF38_7714_4ba6_A560_D5DA1E9BBD0E" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=E878E011;EOID=26308E53;Hidden=0;"/>
         
     | 
| 
      
 1548 
     | 
    
         
            +
            					<element geometry=" 1434, 611, 696, 661,;EDGE=3;SX=-1;SY=0;EX=0;EY=-1;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=73:-123$;" subject="EAID_8D5F3DB1_4D9D_4fc0_B044_272F36C71167" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=16290BBA;EOID=26308E53;Hidden=1;"/>
         
     | 
| 
      
 1549 
     | 
    
         
            +
            					<element geometry="EDGE=2;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_EA827FFC_A874_459d_8636_4113B59553EE" style="Mode=3;Color=-1;LWidth=0;SOID=414AD010;EOID=26308E53;Hidden=1;"/>
         
     | 
| 
      
 1550 
     | 
    
         
            +
            					<element geometry=" 1488, 218, 410, 54,;EDGE=3;SX=2;SY=9;EX=2;EY=9;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_7D9D4C1B_3E79_49bf_A50C_6E13615C6221" style="Mode=2;Color=-1;LWidth=0;SOID=16290BBA;EOID=29194FDD;Hidden=1;"/>
         
     | 
| 
      
 1551 
     | 
    
         
            +
            					<element geometry="SX=0;SY=-9;EX=0;EY=-11;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=454:-445$454:-216$;" subject="EAID_B0FCE72D_E3D0_4c2e_89E3_89241094B044" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=E878E011;EOID=29194FDD;Hidden=0;"/>
         
     | 
| 
      
 1552 
     | 
    
         
            +
            					<element geometry=" 1488, 218, 410, 54,;SX=2;SY=-7;EX=2;EY=-7;EDGE=1;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_2FD79E8A_8C87_4be2_AE91_ADF297622808" style="Mode=2;Color=-1;LWidth=0;SOID=29194FDD;EOID=16290BBA;Hidden=1;"/>
         
     | 
| 
      
 1553 
     | 
    
         
            +
            					<element geometry="SX=0;SY=-1;EX=0;EY=-13;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=416:-556$416:-52$;" subject="EAID_0C5D0603_FB2C_4b84_AE3A_9A945414BA2C" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=46FDB905;EOID=16290BBA;Hidden=0;"/>
         
     | 
| 
      
 1554 
     | 
    
         
            +
            					<element geometry="SX=0;SY=-11;EX=0;EY=-12;EDGE=2;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=834:-661$834:-307$;" subject="EAID_54F3C9AD_BB0F_4c2e_9B3F_0350EF4CC994" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=36F9BF02;EOID=E17F0DCC;Hidden=0;"/>
         
     | 
| 
      
 1555 
     | 
    
         
            +
            					<element geometry="SX=0;SY=-8;EX=0;EY=2;EDGE=2;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=838:-809$838:-293$;" subject="EAID_7BAD95D2_AC1C_4128_BBFF_362A0C1907EB" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=C0A13AD6;EOID=E17F0DCC;Hidden=0;"/>
         
     | 
| 
      
 1556 
     | 
    
         
            +
            					<element geometry="SX=0;SY=-27;EX=0;EY=-13;EDGE=2;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=823:-322$823:-449$;" subject="EAID_CF7DC355_4D6C_4d92_AAEA_8CC59FBB2726" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=E17F0DCC;EOID=E878E011;Hidden=0;"/>
         
     | 
| 
      
 1557 
     | 
    
         
            +
            					<element geometry="SX=0;SY=-2;EX=0;EY=-19;EDGE=2;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=781:-803$781:-669$;" subject="EAID_16E25BEA_7582_4763_B9E5_D1577608CEC2" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=C0A13AD6;EOID=36F9BF02;Hidden=0;"/>
         
     | 
| 
      
 1558 
     | 
    
         
            +
            					<element geometry="SX=0;SY=-10;EX=-91;EY=0;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=319:-633$;" subject="EAID_15B546ED_EE91_42ce_BFB9_9F12D9528240" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=36F9BF02;EOID=641BB11A;Hidden=1;"/>
         
     | 
| 
      
 1559 
     | 
    
         
            +
            					<element geometry="SX=0;SY=-10;EX=0;EY=-15;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=24:-590$24:-137$;" subject="EAID_79B744E8_144A_4a02_BD1F_84E93F0155B0" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=9AA052D2;EOID=A8EB1B43;Hidden=0;"/>
         
     | 
| 
      
 1560 
     | 
    
         
            +
            				</elements>
         
     | 
| 
      
 1561 
     | 
    
         
            +
            			</diagram>
         
     | 
| 
      
 1562 
     | 
    
         
            +
            			<diagram xmi:id="EAID_9A40024C_98DA_4a01_8F0B_CB65A4208AFA">
         
     | 
| 
      
 1563 
     | 
    
         
            +
            				<model package="EAPK_04AA6D68_5225_400f_818D_4772E5A132EB" localID="2" owner="EAPK_04AA6D68_5225_400f_818D_4772E5A132EB" tpos="1"/>
         
     | 
| 
      
 1564 
     | 
    
         
            +
            				<properties name="Fig: Context for Temporal Geometry and Topology" type="Logical"/>
         
     | 
| 
      
 1565 
     | 
    
         
            +
            				<project author="Gibb Robert" version="2019" created="2020-01-28 10:19:25" modified="2020-11-08 14:14:17"/>
         
     | 
| 
      
 1566 
     | 
    
         
            +
            				<style1 value="ShowPrivate=1;ShowProtected=1;ShowPublic=1;HideRelationships=0;Locked=0;Border=1;HighlightForeign=1;PackageContents=0;SequenceNotes=0;ScalePrintImage=1;PPgs.cx=1;PPgs.cy=1;DocSize.cx=1000;DocSize.cy=1000;ShowDetails=0;Orientation=P;Zoom=100;ShowTags=0;OpParams=1;VisibleAttributeDetail=0;ShowOpRetType=1;ShowIcons=0;CollabNums=1;HideProps=1;ShowReqs=0;ShowCons=0;PaperSize=1;HideParents=1;UseAlias=0;HideAtts=1;HideOps=1;HideStereo=0;HideElemStereo=0;ShowTests=0;ShowMaint=0;ConnectorNotation=UML 2.1;ExplicitNavigability=0;ShowShape=1;AllDockable=0;AdvancedElementProps=1;AdvancedFeatureProps=1;AdvancedConnectorProps=1;m_bElementClassifier=1;SPT=1;ShowNotes=0;SuppressBrackets=0;SuppConnectorLabels=0;PrintPageHeadFoot=0;ShowAsList=0;"/>
         
     | 
| 
      
 1567 
     | 
    
         
            +
            				<style2 value="ExcludeRTF=0;DocAll=0;HideQuals=0;AttPkg=1;ShowTests=0;ShowMaint=0;SuppressFOC=1;MatrixActive=0;SwimlanesActive=1;KanbanActive=0;MatrixLineWidth=1;MatrixLineClr=0;MatrixLocked=0;TConnectorNotation=UML 2.1;TExplicitNavigability=0;AdvancedElementProps=1;AdvancedFeatureProps=1;AdvancedConnectorProps=1;m_bElementClassifier=1;SPT=1;MDGDgm=;STBLDgm=;ShowNotes=0;VisibleAttributeDetail=0;ShowOpRetType=1;SuppressBrackets=0;SuppConnectorLabels=0;PrintPageHeadFoot=0;ShowAsList=0;SuppressedCompartments=;Theme=:119;SaveTag=4C82CA42;"/>
         
     | 
| 
      
 1568 
     | 
    
         
            +
            				<swimlanes value="locked=false;orientation=0;width=0;inbar=false;names=false;color=0;bold=false;fcol=0;tcol=16777215;ofCol=-1;ufCol=-1;hl=1;ufh=0;hh=0;cls=0;bw=0;hli=0;SwimlaneFont=lfh:-10,lfw:0,lfi:0,lfu:0,lfs:0,lfface:Carlito,lfe:0,lfo:0,lfchar:1,lfop:0,lfcp:0,lfq:0,lfpf=0,lfWidth=0;"/>
         
     | 
| 
      
 1569 
     | 
    
         
            +
            				<matrixitems value="locked=false;matrixactive=false;swimlanesactive=true;kanbanactive=false;width=1;clrLine=0;"/>
         
     | 
| 
      
 1570 
     | 
    
         
            +
            				<extendedProperties/>
         
     | 
| 
      
 1571 
     | 
    
         
            +
            				<elements>
         
     | 
| 
      
 1572 
     | 
    
         
            +
            					<element geometry="Left=441;Top=480;Right=535;Bottom=539;imgL=451;imgT=480;imgR=545;imgB=539;" subject="EAID_0D462D6E_4097_44ae_AAEC_FA91FD6F6988" seqno="1" style="NSL=0;DUID=D60311E4;"/>
         
     | 
| 
      
 1573 
     | 
    
         
            +
            					<element geometry="Left=446;Top=274;Right=591;Bottom=314;imgL=456;imgT=274;imgR=601;imgB=314;" subject="EAID_37BF1557_0370_435d_94BB_8FCC4574561B" seqno="2" style="NSL=0;LWth=2;ImageID=0;LCol=-1;BCol=-1;fontsz=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=0;DUID=A3BC5E9A;"/>
         
     | 
| 
      
 1574 
     | 
    
         
            +
            					<element geometry="Left=680;Top=146;Right=825;Bottom=186;imgL=690;imgT=146;imgR=835;imgB=186;" subject="EAID_00ACADD9_EF9A_4ac8_8257_3DB6227AF948" seqno="3" style="NSL=0;LWth=2;ImageID=0;LCol=-1;BCol=-1;fontsz=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=0;DUID=6986BBE2;"/>
         
     | 
| 
      
 1575 
     | 
    
         
            +
            					<element geometry="Left=446;Top=146;Right=591;Bottom=186;imgL=456;imgT=146;imgR=601;imgB=186;" subject="EAID_AE0137BF_A059_4c07_B438_75C5D3A3705D" seqno="4" style="NSL=0;LWth=2;fontsz=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=0;ImageID=0;LCol=-1;BCol=-1;DUID=4763B4B4;"/>
         
     | 
| 
      
 1576 
     | 
    
         
            +
            					<element geometry="Left=680;Top=342;Right=825;Bottom=382;imgL=690;imgT=342;imgR=835;imgB=382;" subject="EAID_66ADAA69_93B4_4837_A00D_1AE9BB6FB53B" seqno="5" style="LWth=2;fontsz=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=0;DUID=6E5CED2A;"/>
         
     | 
| 
      
 1577 
     | 
    
         
            +
            					<element geometry="Left=563;Top=434;Right=708;Bottom=474;imgL=573;imgT=434;imgR=718;imgB=474;" subject="EAID_82DA65AB_212B_44fd_BCDC_232A2AA22542" seqno="6" style="LWth=2;DUID=A81F3A31;"/>
         
     | 
| 
      
 1578 
     | 
    
         
            +
            					<element geometry="Left=680;Top=275;Right=825;Bottom=315;imgL=690;imgT=275;imgR=835;imgB=315;" subject="EAID_60A00B1F_43C3_433b_8060_2EB473EEE6BA" seqno="7" style="LWth=2;DUID=786A6260;"/>
         
     | 
| 
      
 1579 
     | 
    
         
            +
            					<element geometry="Left=23;Top=273;Right=154;Bottom=313;imgL=33;imgT=273;imgR=164;imgB=313;" subject="EAID_01B77106_CDCD_48b5_B2C4_7F7D7BA580B0" seqno="8" style="NSL=0;BCol=-1;BFol=-1;fontsz=0;bold=0;black=0;italic=0;ul=0;charset=0;pitch=0;LCol=13434880;LWth=2;DUID=41A330B2;"/>
         
     | 
| 
      
 1580 
     | 
    
         
            +
            					<element geometry="Left=25;Top=342;Right=156;Bottom=382;imgL=35;imgT=342;imgR=166;imgB=382;" subject="EAID_F6BDF73A_8DA5_46a3_A9A3_2A7FD1A2C8F8" seqno="9" style="NSL=0;LCol=13434880;LWth=2;DUID=E4FF4727;"/>
         
     | 
| 
      
 1581 
     | 
    
         
            +
            					<element geometry="Left=165;Top=42;Right=296;Bottom=82;imgL=175;imgT=42;imgR=306;imgB=82;" subject="EAID_AC45299B_86E2_47eb_927D_7FE310183720" seqno="10" style="LCol=13434880;LWth=2;DUID=2F28AF81;"/>
         
     | 
| 
      
 1582 
     | 
    
         
            +
            					<element geometry="Left=161;Top=434;Right=292;Bottom=474;imgL=171;imgT=434;imgR=302;imgB=474;" subject="EAID_DACE19A6_B083_45f1_94BB_C21991A59743" seqno="11" style="LCol=13434880;LWth=2;DUID=E150D01C;"/>
         
     | 
| 
      
 1583 
     | 
    
         
            +
            					<element geometry="Left=256;Top=146;Right=387;Bottom=186;imgL=266;imgT=146;imgR=397;imgB=186;" subject="EAID_D945EB6B_A750_4c1e_8D82_3887CB767926" seqno="12" style="LCol=13434880;LWth=2;DUID=A06A9902;"/>
         
     | 
| 
      
 1584 
     | 
    
         
            +
            					<element geometry="Left=23;Top=145;Right=154;Bottom=185;imgL=33;imgT=145;imgR=164;imgB=185;" subject="EAID_651CCB2E_D9C9_4f7e_A86C_9F838844FB82" seqno="13" style="LCol=13434880;LWth=2;DUID=8B25BE79;"/>
         
     | 
| 
      
 1585 
     | 
    
         
            +
            					<element geometry="Left=258;Top=274;Right=389;Bottom=314;imgL=268;imgT=274;imgR=399;imgB=314;" subject="EAID_AF08B23A_D40E_4e8a_B258_60C53D27E384" seqno="14" style="LCol=13434880;LWth=2;DUID=7974BD9C;"/>
         
     | 
| 
      
 1586 
     | 
    
         
            +
            					<element geometry="Left=15;Top=35;Right=415;Bottom=482;imgL=25;imgT=35;imgR=425;imgB=482;" subject="EAID_2D12FCDB_B942_481b_B734_C7FCD5A69ED4" seqno="15" style="LCol=13434880;LWth=2;BCol=16777215;DUID=A90123E2;"/>
         
     | 
| 
      
 1587 
     | 
    
         
            +
            					<element geometry="Left=563;Top=41;Right=708;Bottom=81;imgL=573;imgT=41;imgR=718;imgB=81;" subject="EAID_F11508A8_6635_4f8f_B49D_A398A8FEF552" seqno="16" style="LWth=2;DUID=98422238;"/>
         
     | 
| 
      
 1588 
     | 
    
         
            +
            					<element geometry="Left=331;Top=480;Right=436;Bottom=539;imgL=341;imgT=480;imgR=446;imgB=539;" subject="EAID_D87CFCD1_E6FA_40b1_8DF4_582457AAE03E" seqno="17" style="NSL=0;DUID=8DA5B6F0;"/>
         
     | 
| 
      
 1589 
     | 
    
         
            +
            					<element geometry="Left=300;Top=498;Right=436;Bottom=539;imgL=310;imgT=498;imgR=446;imgB=539;" subject="EAID_4BBD93AA_D52B_4dbf_830E_D139E6D357B5" seqno="18" style="NSL=0;LCol=16777215;DUID=42AF37DB;"/>
         
     | 
| 
      
 1590 
     | 
    
         
            +
            					<element geometry="SX=-53;SY=-8;EX=-53;EY=-8;EDGE=3;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_26E10788_3269_4006_81AB_2A129D7712EF" style="Mode=3;Color=-1;LWidth=0;SOID=98422238;EOID=A81F3A31;Hidden=1;"/>
         
     | 
| 
      
 1591 
     | 
    
         
            +
            					<element geometry="SX=7;SY=-1;EX=7;EY=-1;EDGE=3;$LLB=CX=17:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LLT=CX=41:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LMT=CX=44:CY=14:OX=-36:OY=8:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LMB=;LRT=CX=45:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LRB=CX=17:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;IRHS=;ILHS=;Path=;" subject="EAID_25C1510D_9559_406f_867E_2A350C45C8A5" style="Mode=3;Color=-1;LWidth=0;SOID=4763B4B4;EOID=A3BC5E9A;Hidden=0;"/>
         
     | 
| 
      
 1592 
     | 
    
         
            +
            					<element geometry="EDGE=3;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_4F8C2F5C_1CA1_4bef_8D51_3FD8FAB35372" style="Mode=3;Color=-1;LWidth=0;SOID=41A330B2;EOID=E4FF4727;Hidden=0;"/>
         
     | 
| 
      
 1593 
     | 
    
         
            +
            					<element geometry="SX=-8;SY=3;EX=0;EY=0;EDGE=3;$LLB=CX=17:CY=14:OX=-2:OY=-2:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LLT=CX=41:CY=14:OX=-3:OY=-4:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LMT=CX=44:CY=14:OX=-34:OY=14:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LMB=;LRT=CX=45:CY=14:OX=62:OY=1:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LRB=CX=17:CY=14:OX=-32:OY=3:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;IRHS=;ILHS=;Path=;" subject="EAID_418BE1AF_A85D_414f_BFE5_80D5049C6F1F" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=8B25BE79;EOID=41A330B2;Hidden=0;"/>
         
     | 
| 
      
 1594 
     | 
    
         
            +
            					<element geometry="SX=0;SY=0;EDGE=4;$LLB=CX=56:CY=14:OX=-3:OY=3:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LLT=CX=39:CY=14:OX=-3:OY=2:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_E84CD5B2_B1B4_44c9_9A37_84FB39C5D005" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=7974BD9C;EOID=41A330B2;Hidden=0;"/>
         
     | 
| 
      
 1595 
     | 
    
         
            +
            					<element geometry="SCTR=1;SCME=1;SX=0;SY=0;EX=0;EY=0;EDGE=2;SCTR.LEFT=153;SCTR.TOP=-293;SCTR.RIGHT=184;SCTR.BOTTOM=-278;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=154:-293$184:-293$184:-278$154:-278$;" subject="EAID_C6CF49BF_D770_45f3_9987_BB6C45B69CD3" style="Mode=3;Color=-1;LWidth=0;SOID=41A330B2;EOID=41A330B2;Hidden=1;"/>
         
     | 
| 
      
 1596 
     | 
    
         
            +
            					<element geometry="EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_0C675C03_2E90_4df7_9F5E_33654F1BC174" style="Mode=3;Color=-1;LWidth=0;SOID=98422238;EOID=2F28AF81;Hidden=1;"/>
         
     | 
| 
      
 1597 
     | 
    
         
            +
            					<element geometry="SX=0;SY=0;EX=0;EY=0;EDGE=2;$LLB=CX=56:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LLT=CX=39:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_7F310A6F_F068_4c1d_8FFD_B01FE62D6D1C" style="Mode=3;Color=-1;LWidth=0;SOID=A3BC5E9A;EOID=786A6260;Hidden=0;"/>
         
     | 
| 
      
 1598 
     | 
    
         
            +
            					<element geometry="SX=4;SY=0;EX=-3;EY=0;EDGE=1;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=325:-109$227:-109$;" subject="EAID_7DBD7567_3726_49de_B154_DD048B3872A4" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=A06A9902;EOID=2F28AF81;Hidden=0;"/>
         
     | 
| 
      
 1599 
     | 
    
         
            +
            					<element geometry="EX=0;EY=0;SX=7;SY=0;EDGE=3;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=525:-403$635:-403$;" subject="EAID_AD6CE071_3261_4681_B8E1_25AE657BBCD2" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=A3BC5E9A;EOID=A81F3A31;Hidden=0;"/>
         
     | 
| 
      
 1600 
     | 
    
         
            +
            					<element geometry="SX=0;SY=0;EX=1;EY=0;EDGE=3;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=752:-403$636:-403$;" subject="EAID_3B3D9500_1668_4529_A500_03753B605AA9" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=6E5CED2A;EOID=A81F3A31;Hidden=0;"/>
         
     | 
| 
      
 1601 
     | 
    
         
            +
            					<element geometry="SX=0;SY=-1;EX=0;EY=-1;SCME=0;SCTR=0;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=CX=24:CY=14:OX=-5:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LRB=CX=17:CY=14:OX=-4:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;IRHS=;ILHS=;Path=434:-62$434:-455$;" subject="EAID_95DCF977_3EB4_46dd_B0F5_152B18F6B749" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=98422238;EOID=A81F3A31;Hidden=0;"/>
         
     | 
| 
      
 1602 
     | 
    
         
            +
            					<element geometry="SX=0;SY=4;EX=37;EY=0;EDGE=2;$LLB=CX=17:CY=14:OX=18:OY=-2:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LLT=CX=39:CY=14:OX=16:OY=1:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=789:-450$;" subject="EAID_AD3FB2D7_370B_45ea_A98B_40B5B296E946" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=A81F3A31;EOID=6E5CED2A;Hidden=0;"/>
         
     | 
| 
      
 1603 
     | 
    
         
            +
            					<element geometry="SX=-2;SY=0;EX=0;EY=8;EDGE=3;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_FBC084CC_4070_4dd5_8276_8A47DE1A72CD" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=786A6260;EOID=6E5CED2A;Hidden=0;"/>
         
     | 
| 
      
 1604 
     | 
    
         
            +
            					<element geometry="SX=0;SY=0;EX=0;EY=0;EDGE=2;$LLB=CX=17:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LLT=CX=39:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LMT=CX=35:CY=14:OX=20:OY=26:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_BCE15BAC_CC31_4dbd_8D10_5FED82BC83D0" style="Mode=3;Color=-1;LWidth=0;SOID=4763B4B4;EOID=6986BBE2;Hidden=0;"/>
         
     | 
| 
      
 1605 
     | 
    
         
            +
            					<element geometry="SX=0;SY=0;EX=0;EY=0;EDGE=3;$LLB=CX=17:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LLT=CX=41:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LMT=CX=44:CY=14:OX=30:OY=7:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LMB=;LRT=CX=45:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LRB=CX=17:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;IRHS=;ILHS=;Path=;" subject="EAID_7EB3B4C8_5C04_473c_A4D8_DE460008BE7F" style="Mode=3;Color=-1;LWidth=0;SOID=6986BBE2;EOID=786A6260;Hidden=0;"/>
         
     | 
| 
      
 1606 
     | 
    
         
            +
            					<element geometry="SX=0;SY=0;EX=0;EY=0;EDGE=2;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_342FB517_D9A8_493f_84CB_FF20C2C49703" style="Mode=3;Color=-1;LWidth=0;SOID=A06A9902;EOID=A06A9902;Hidden=1;"/>
         
     | 
| 
      
 1607 
     | 
    
         
            +
            					<element geometry="EDGE=1;SX=6;SY=0;EX=1;EY=0;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=524:-113$636:-113$;" subject="EAID_C764348C_3F86_457b_B81A_3CF2A18495A7" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=4763B4B4;EOID=98422238;Hidden=0;"/>
         
     | 
| 
      
 1608 
     | 
    
         
            +
            					<element geometry="SX=0;SY=0;EX=0;EY=0;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_84688F21_D758_44ab_870D_69D890029769" style="Mode=3;Color=-1;LWidth=0;SOID=A3BC5E9A;EOID=7974BD9C;Hidden=1;"/>
         
     | 
| 
      
 1609 
     | 
    
         
            +
            					<element geometry="SCTR=1;SCME=1;SX=0;SY=0;EX=0;EY=0;EDGE=2;SCTR.LEFT=388;SCTR.TOP=-299;SCTR.RIGHT=419;SCTR.BOTTOM=-284;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=389:-299$419:-299$419:-284$389:-284$;" subject="EAID_DDA4933C_60B6_4438_8A66_D43E7E158EEE" style="Mode=3;Color=-1;LWidth=0;SOID=7974BD9C;EOID=7974BD9C;Hidden=1;"/>
         
     | 
| 
      
 1610 
     | 
    
         
            +
            					<element geometry=" 1008, 560, 713, 54,;EDGE=4;SX=0;SY=-1;EX=0;EY=-1;$LLB=CX=17:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=0:DIR=0:ROT=0;LLT=CX=39:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=0:DIR=0:ROT=0;LMT=CX=35:CY=14:OX=-11:OY=15:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=0:DIR=0:ROT=0;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_CCDA7037_E124_4f24_B640_1101A2EAD20B" style="Mode=3;Color=-1;LWidth=0;SOID=A06A9902;EOID=8B25BE79;Hidden=0;"/>
         
     | 
| 
      
 1611 
     | 
    
         
            +
            					<element geometry=" 2245, 544, 525, 166,;EDGE=4;SCTR=1;SCME=1;SX=0;SY=0;EX=0;EY=0;SCTR.LEFT=-72;SCTR.TOP=-170;SCTR.RIGHT=96;SCTR.BOTTOM=-153;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=23:-153$-72:-153$-72:-170$23:-170$;" subject="EAID_25E1654C_081D_40e4_BAD6_D7CFCDA4D7CF" style="Mode=3;Color=-1;LWidth=0;SOID=8B25BE79;EOID=8B25BE79;Hidden=1;"/>
         
     | 
| 
      
 1612 
     | 
    
         
            +
            					<element geometry="SX=0;SY=0;EX=-3;EY=0;EDGE=1;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=88:-109$227:-109$;" subject="EAID_C489F217_9243_4465_A2E7_0031EEE43FF7" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=8B25BE79;EOID=2F28AF81;Hidden=0;"/>
         
     | 
| 
      
 1613 
     | 
    
         
            +
            					<element geometry=" 304, 851, 54, 458,;EDGE=1;SX=1;SY=18;EX=3;EY=-19;$LLB=CX=17:CY=14:OX=-25:OY=2:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=0:DIR=0:ROT=0;LLT=CX=45:CY=14:OX=56:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=0:DIR=0:ROT=0;LMT=CX=44:CY=14:OX=27:OY=9:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=0:DIR=0:ROT=0;LMB=;LRT=CX=41:CY=14:OX=57:OY=-2:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=0:DIR=0:ROT=0;LRB=CX=17:CY=14:OX=-31:OY=-4:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=0:DIR=0:ROT=0;IRHS=;ILHS=;Path=;" subject="EAID_4CD5EE6F_45C8_4128_963A_1E1174556192" style="Mode=3;Color=-1;LWidth=0;SOID=7974BD9C;EOID=A06A9902;Hidden=0;"/>
         
     | 
| 
      
 1614 
     | 
    
         
            +
            					<element geometry="EDGE=1;SX=-3;SY=0;EX=0;EY=0;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=749:-113$635:-113$;" subject="EAID_2DD1F079_8C74_49d3_82B5_984A3AE10DF5" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=6986BBE2;EOID=98422238;Hidden=0;"/>
         
     | 
| 
      
 1615 
     | 
    
         
            +
            					<element geometry="EDGE=2;SX=0;SY=-3;EX=0;EY=1;$LLB=;LLT=;LMT=;LMB=;LRT=CX=37:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;LRB=CX=17:CY=14:OX=0:OY=0:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=1:DIR=0:ROT=0;IRHS=;ILHS=;Path=402:-65$402:-453$;" subject="EAID_ECA16392_6B77_4555_8D79_386CD1E0E920" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=2F28AF81;EOID=E150D01C;Hidden=0;"/>
         
     | 
| 
      
 1616 
     | 
    
         
            +
            					<element geometry="SX=3;SY=0;EX=2;EY=0;EDGE=3;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=326:-405$228:-405$;" subject="EAID_D8EC6DF9_2F7E_4011_8AF9_399FB8FDD5C3" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=7974BD9C;EOID=E150D01C;Hidden=0;"/>
         
     | 
| 
      
 1617 
     | 
    
         
            +
            					<element geometry="SX=0;SY=0;EX=0;EY=0;EDGE=2;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_C745CC59_CA14_4859_9264_F77798F25D24" style="Mode=3;Color=-1;LWidth=0;SOID=E150D01C;EOID=E150D01C;Hidden=1;"/>
         
     | 
| 
      
 1618 
     | 
    
         
            +
            					<element geometry="SX=-22;SY=0;EX=0;EY=2;EDGE=3;$LLB=;LLT=;LMT=;LMB=;LRT=CX=39:CY=14:OX=-13:OY=3:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=0:DIR=0:ROT=0;LRB=CX=17:CY=14:OX=-17:OY=-1:HDN=0:BLD=0:ITA=0:UND=0:CLR=-1:ALN=0:DIR=0:ROT=0;IRHS=;ILHS=;Path=68:-452$;" subject="EAID_BE3E23F1_C488_4145_ABE9_5316AA296387" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=E4FF4727;EOID=E150D01C;Hidden=0;"/>
         
     | 
| 
      
 1619 
     | 
    
         
            +
            					<element geometry="SX=1;SY=0;EX=2;EY=0;EDGE=3;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=91:-405$228:-405$;" subject="EAID_F30CF839_83A9_4154_B274_6AA69EFFF811" style="Mode=3;Color=-1;LWidth=0;TREE=OS;SOID=E4FF4727;EOID=E150D01C;Hidden=0;"/>
         
     | 
| 
      
 1620 
     | 
    
         
            +
            					<element geometry="SX=8;SY=-21;EX=8;EY=-21;EDGE=4;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_E250C61E_661C_4f55_8BDF_2467B454E385" style="Mode=3;Color=-1;LWidth=0;SOID=A81F3A31;EOID=E150D01C;Hidden=1;"/>
         
     | 
| 
      
 1621 
     | 
    
         
            +
            					<element geometry="SX=0;SY=0;EX=0;EY=0;EDGE=3;$LLB=;LLT=;LMT=;LMB=;LRT=;LRB=;IRHS=;ILHS=;Path=;" subject="EAID_DC71C19F_9309_41ec_954B_B0B1847F386F" style="Mode=3;Color=-1;LWidth=0;SOID=2F28AF81;EOID=8B25BE79;Hidden=1;"/>
         
     | 
| 
      
 1622 
     | 
    
         
            +
            				</elements>
         
     | 
| 
      
 1623 
     | 
    
         
            +
            			</diagram>
         
     | 
| 
       1496 
1624 
     | 
    
         
             
            	</xmi:Extension>
         
     | 
| 
       1497 
1625 
     | 
    
         
             
            	<thecustomprofile:Bibliography base_Class="EAID_D832D6D8_0518_43f7_9166_7A4E3E8605AA"/>
         
     | 
| 
       1498 
1626 
     | 
    
         
             
            	<thecustomprofile:BasicDoc base_Class="EAID_10AD8D60_9972_475a_AB7E_FA40212D5297"/>
         
     | 
| 
         @@ -88,9 +88,8 @@ RSpec.describe Lutaml::XMI::Parsers::XML do 
     | 
|
| 
       88 
88 
     | 
    
         
             
                  end
         
     | 
| 
       89 
89 
     | 
    
         
             
                  let(:expected_association_names) do
         
     | 
| 
       90 
90 
     | 
    
         
             
                    %w[
         
     | 
| 
       91 
     | 
    
         
            -
                       
     | 
| 
      
 91 
     | 
    
         
            +
                      Primitive
         
     | 
| 
       92 
92 
     | 
    
         
             
                      TemporalGeometry
         
     | 
| 
       93 
     | 
    
         
            -
                      TemporalTopologicalPrimitive
         
     | 
| 
       94 
93 
     | 
    
         
             
                      Interval
         
     | 
| 
       95 
94 
     | 
    
         
             
                      Instant
         
     | 
| 
       96 
95 
     | 
    
         
             
                    ]
         
     | 
| 
         @@ -110,7 +109,7 @@ RSpec.describe Lutaml::XMI::Parsers::XML do 
     | 
|
| 
       110 
109 
     | 
    
         
             
                      .to(eq(["Temporal and Zonal Geometry", "Temporal and Zonal RS using Identifiers"]))
         
     | 
| 
       111 
110 
     | 
    
         
             
                  end
         
     | 
| 
       112 
111 
     | 
    
         | 
| 
       113 
     | 
    
         
            -
                  it "correctly parses package 
     | 
| 
      
 112 
     | 
    
         
            +
                  it "correctly parses package classes" do
         
     | 
| 
       114 
113 
     | 
    
         
             
                    expect(first_nested_package.classes.map(&:name)).to(eq(expected_class_names))
         
     | 
| 
       115 
114 
     | 
    
         
             
                    expect(first_nested_package.classes.map(&:xmi_id)).to(eq(expected_class_xmi_ids))
         
     | 
| 
       116 
115 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -133,11 +132,13 @@ RSpec.describe Lutaml::XMI::Parsers::XML do 
     | 
|
| 
       133 
132 
     | 
    
         
             
                    inheritance = klass.associations.find { |entity| entity.member_end == 'TemporalGeometry' }
         
     | 
| 
       134 
133 
     | 
    
         
             
                    expect(inheritance.member_end_type).to eq('inheritance')
         
     | 
| 
       135 
134 
     | 
    
         
             
                    expect(inheritance.member_end_cardinality).to eq({"min"=>"C", "max"=>"*"})
         
     | 
| 
      
 135 
     | 
    
         
            +
                  end
         
     | 
| 
       136 
136 
     | 
    
         | 
| 
       137 
     | 
    
         
            -
             
     | 
| 
       138 
     | 
    
         
            -
                     
     | 
| 
       139 
     | 
    
         
            -
                    expect( 
     | 
| 
       140 
     | 
    
         
            -
                    expect( 
     | 
| 
      
 137 
     | 
    
         
            +
                  it "correctly parses diagrams for package" do
         
     | 
| 
      
 138 
     | 
    
         
            +
                    root_package = parse.packages.first
         
     | 
| 
      
 139 
     | 
    
         
            +
                    expect(root_package.diagrams.length).to(eq(2))
         
     | 
| 
      
 140 
     | 
    
         
            +
                    expect(root_package.diagrams.map(&:name)).to(eq(['Fig: DGGS Package Diagram', 'Fig: Context for Temporal Geometry and Topology']))
         
     | 
| 
      
 141 
     | 
    
         
            +
                    expect(root_package.diagrams.map(&:definition)).to(eq(['this is a documentation', '']))
         
     | 
| 
       141 
142 
     | 
    
         
             
                  end
         
     | 
| 
       142 
143 
     | 
    
         
             
                end
         
     | 
| 
       143 
144 
     | 
    
         
             
              end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: lutaml-xmi
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.2.2
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Ribose Inc.
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2021- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2021-09-12 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: hashie
         
     | 
| 
         @@ -53,27 +53,27 @@ dependencies: 
     | 
|
| 
       53 
53 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       54 
54 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       55 
55 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       56 
     | 
    
         
            -
              name:  
     | 
| 
      
 56 
     | 
    
         
            +
              name: nokogiri
         
     | 
| 
       57 
57 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       58 
58 
     | 
    
         
             
                requirements:
         
     | 
| 
       59 
59 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       60 
60 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       61 
     | 
    
         
            -
                    version: ' 
     | 
| 
       62 
     | 
    
         
            -
              type: : 
     | 
| 
      
 61 
     | 
    
         
            +
                    version: '1.10'
         
     | 
| 
      
 62 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
       63 
63 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       64 
64 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       65 
65 
     | 
    
         
             
                requirements:
         
     | 
| 
       66 
66 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       67 
67 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       68 
     | 
    
         
            -
                    version: ' 
     | 
| 
      
 68 
     | 
    
         
            +
                    version: '1.10'
         
     | 
| 
       69 
69 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       70 
     | 
    
         
            -
              name:  
     | 
| 
      
 70 
     | 
    
         
            +
              name: htmlentities
         
     | 
| 
       71 
71 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       72 
72 
     | 
    
         
             
                requirements:
         
     | 
| 
       73 
73 
     | 
    
         
             
                - - ">="
         
     | 
| 
       74 
74 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       75 
75 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       76 
     | 
    
         
            -
              type: : 
     | 
| 
      
 76 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
       77 
77 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       78 
78 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       79 
79 
     | 
    
         
             
                requirements:
         
     | 
| 
         @@ -81,19 +81,33 @@ dependencies: 
     | 
|
| 
       81 
81 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       82 
82 
     | 
    
         
             
                    version: '0'
         
     | 
| 
       83 
83 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       84 
     | 
    
         
            -
              name:  
     | 
| 
      
 84 
     | 
    
         
            +
              name: bundler
         
     | 
| 
       85 
85 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       86 
86 
     | 
    
         
             
                requirements:
         
     | 
| 
       87 
87 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       88 
88 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       89 
     | 
    
         
            -
                    version: ' 
     | 
| 
      
 89 
     | 
    
         
            +
                    version: '2.0'
         
     | 
| 
       90 
90 
     | 
    
         
             
              type: :development
         
     | 
| 
       91 
91 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       92 
92 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       93 
93 
     | 
    
         
             
                requirements:
         
     | 
| 
       94 
94 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       95 
95 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       96 
     | 
    
         
            -
                    version: ' 
     | 
| 
      
 96 
     | 
    
         
            +
                    version: '2.0'
         
     | 
| 
      
 97 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 98 
     | 
    
         
            +
              name: byebug
         
     | 
| 
      
 99 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 100 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 101 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 102 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 103 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 104 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 105 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 106 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 107 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 108 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 109 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 110 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       97 
111 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       98 
112 
     | 
    
         
             
              name: pry
         
     | 
| 
       99 
113 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -202,7 +216,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       202 
216 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       203 
217 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       204 
218 
     | 
    
         
             
            requirements: []
         
     | 
| 
       205 
     | 
    
         
            -
            rubygems_version: 3. 
     | 
| 
      
 219 
     | 
    
         
            +
            rubygems_version: 3.1.6
         
     | 
| 
       206 
220 
     | 
    
         
             
            signing_key:
         
     | 
| 
       207 
221 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       208 
222 
     | 
    
         
             
            summary: XML Metadata Interchange (XMI) Specification parser in Ruby, tools for accessing
         
     |