-
Notifications
You must be signed in to change notification settings - Fork 0
/
uml.drawio
600 lines (600 loc) · 70 KB
/
uml.drawio
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
<mxfile host="65bd71144e" modified="2020-11-01T12:58:58.805Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Code/1.50.0 Chrome/83.0.4103.122 Electron/9.2.1 Safari/537.36" etag="5zt_XnpD5I_8itGU46Ln" version="13.6.5">
<diagram id="9PjJHHfhZJV7RTY0kCFV" name="Page-1">
<mxGraphModel dx="1655" dy="1419" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="140" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><i>&lt;&lt;Interface&gt;&gt;</i><br><b><i>Goal</i></b></p><hr size="1"><p style="margin: 0px ; margin-left: 4px"><span>+ checkVictory(Faction): Boolean</span><br></p><p style="margin: 0px ; margin-left: 4px">+ add(Goal): void</p><p style="margin: 0px ; margin-left: 4px">+ showGoal(): void</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;" parent="1" vertex="1">
<mxGeometry x="1767" y="-131" width="190" height="140" as="geometry"/>
</mxCell>
<mxCell id="141" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>Subgoal</b></p><hr size="1"><p style="margin: 0px ; margin-left: 4px">- isAnd: boolean&nbsp;</p><p style="margin: 0px ; margin-left: 4px">- conditions: ArrayList&lt;Goal&gt;</p><hr size="1"><p style="margin: 0px ; margin-left: 4px"><br></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;" parent="1" vertex="1">
<mxGeometry x="1667" y="148" width="170" height="80" as="geometry"/>
</mxCell>
<mxCell id="142" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>Conditon</b></p><hr size="1"><p style="margin: 0px ; margin-left: 4px">- condition: VictoryCondition&nbsp;</p><hr size="1"><p style="margin: 0px ; margin-left: 4px"><br></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;" parent="1" vertex="1">
<mxGeometry x="1907" y="148" width="160" height="80" as="geometry"/>
</mxCell>
<mxCell id="144" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>Tax</b></p><hr size="1"><p style="margin: 0px ; margin-left: 4px">- rate: double</p><p style="margin: 0px ; margin-left: 4px">- wealthGrowthDelta: int</p><hr size="1"><p style="margin: 0px ; margin-left: 4px">+ Tax(double, int )&nbsp;</p><p style="margin: 0px ; margin-left: 4px">+ isVeryHighTax()</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;" parent="1" vertex="1">
<mxGeometry x="840" y="878" width="160" height="110" as="geometry"/>
</mxCell>
<mxCell id="145" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><i>&lt;&lt;Interface&gt;&gt;</i><br><b>VictoryCondition</b></p><hr size="1"><p style="margin: 0px ; margin-left: 4px"><span>+ checkCondition(Faction f);<br></span></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;" parent="1" vertex="1">
<mxGeometry x="1845" y="330" width="190" height="140" as="geometry"/>
</mxCell>
<mxCell id="146" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>TreasuryGoal</b></p><hr size="1"><p style="margin: 0px ; margin-left: 4px"></p><p style="margin: 0px ; margin-left: 4px"><br></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;" parent="1" vertex="1">
<mxGeometry x="1560" y="490" width="160" height="50" as="geometry"/>
</mxCell>
<mxCell id="148" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>WealthGoal</b></p><hr size="1"><p style="margin: 0px ; margin-left: 4px"></p><p style="margin: 0px ; margin-left: 4px"><br></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;" parent="1" vertex="1">
<mxGeometry x="1720" y="550" width="160" height="50" as="geometry"/>
</mxCell>
<mxCell id="149" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>InfrastructureGoal</b></p><hr size="1"><p style="margin: 0px ; margin-left: 4px"></p><p style="margin: 0px ; margin-left: 4px"><br></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;" parent="1" vertex="1">
<mxGeometry x="1950" y="550" width="160" height="50" as="geometry"/>
</mxCell>
<mxCell id="150" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>ConquestGoal</b></p><hr size="1"><p style="margin: 0px ; margin-left: 4px"></p><p style="margin: 0px ; margin-left: 4px"><br></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;" parent="1" vertex="1">
<mxGeometry x="2140" y="500" width="160" height="50" as="geometry"/>
</mxCell>
<mxCell id="151" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><i>&lt;&lt;Interface&gt;&gt;</i><br><b>BattleResolver</b></p><hr size="1"><p style="margin: 0px ; margin-left: 4px"><span>+ battle(Province, ArrayList&lt;Unit&gt;, Province, ArrayList&lt;Unit&gt;, Province ): Boolean</span><br></p><p style="margin: 0px ; margin-left: 4px">+ getObservers(): ArrayList&lt;BattleObserver&gt;</p><p style="margin: 0px ; margin-left: 4px">+ notify(Faction f): void</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;" parent="1" vertex="1">
<mxGeometry x="110" y="270" width="490" height="110" as="geometry"/>
</mxCell>
<mxCell id="152" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><b>StandardBattleResolver</b></p><hr size="1"><p style="margin: 0px ; margin-left: 4px">- rangedEngagement: boolean&nbsp;</p><p style="margin: 0px ; margin-left: 4px">- attacking: Province</p><p style="margin: 0px ; margin-left: 4px">- defending: Province</p><p style="margin: 0px ; margin-left: 4px">- routedAttackers: Arraylist&lt;Unit&gt;</p><p style="margin: 0px ; margin-left: 4px">- attackingArmy: Arraylist&lt;Unit&gt;<br></p><p style="margin: 0px ; margin-left: 4px">- defendingArmy: Arraylist&lt;Unit&gt;<br></p><p style="margin: 0px ; margin-left: 4px">- engagementCounter: int</p><p style="margin: 0px ; margin-left: 4px">- attackingDruids: int</p><p style="margin: 0px ; margin-left: 4px">- defendingDruids: int</p><p style="margin: 0px ; margin-left: 4px">- attackingLegionaryCount: int</p><p style="margin: 0px ; margin-left: 4px">- defendingLegionaryCount: int</p><p style="margin: 0px ; margin-left: 4px">- attackingHeroicCharge: int</p><p style="margin: 0px ; margin-left: 4px">- defendingHeroicCharge: int</p><p style="margin: 0px ; margin-left: 4px">- attackingDruidMultiplier: int</p><p style="margin: 0px ; margin-left: 4px">- defendingDruidMultiplier: double</p><p style="margin: 0px ; margin-left: 4px">- battleObservers: ArrayList&lt;BattleObserver&gt;</p><p style="margin: 0px ; margin-left: 4px">- buildingObserver: BuildingObserver</p><p style="margin: 0px ; margin-left: 4px">- r: Random</p><hr size="1"><p style="margin: 0px ; margin-left: 4px">+ &lt;&lt;Create&gt;&gt; StandardBattleResolver()</p><p style="margin: 0px ; margin-left: 4px">- resetEngagementCount()</p><p style="margin: 0px ; margin-left: 4px">- countUnit(Province, ArrayList&lt;Unit&gt;, String, Faction): int</p><p style="margin: 0px ; margin-left: 4px">- getDruidMultiplier():&nbsp; double</p><p style="margin: 0px ; margin-left: 4px">- skirmish(Unit, Unit): int</p><p style="margin: 0px ; margin-left: 4px">- engage(Unit, Unit): int&nbsp;</p><p style="margin: 0px ; margin-left: 4px">- decideEngagementType(): boolean</p><p style="margin: 0px ; margin-left: 4px">- transferProvinceOwnership(Faction, Province, Province): void</p><p style="margin: 0px ; margin-left: 4px">- notifyBattleObservers(): void</p><p style="margin: 0px ; margin-left: 4px"><br></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;" parent="1" vertex="1">
<mxGeometry x="130" y="440" width="350" height="440" as="geometry"/>
</mxCell>
<mxCell id="81" value="Game" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="1100" y="-168" width="340" height="448" as="geometry"/>
</mxCell>
<mxCell id="82" value="- currentYear: int - currentvictoryCondition: Goal - currentFaction: int - AI: AI - br: BattleResolver - factions: ArrayList<Faction> - adjacentProvinces: Map<String, Map<String, Integer>> - isRunning: boolean - movedUnits: ArrayList<Unit> - victories: ArrayList<VictoryCondition> - toRecalculateBonuses: Map<String, Boolean> " style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="81" vertex="1">
<mxGeometry y="26" width="340" height="162" as="geometry"/>
</mxCell>
<mxCell id="83" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="81" vertex="1">
<mxGeometry y="188" width="340" height="10" as="geometry"/>
</mxCell>
<mxCell id="84" value="+ <<Create>> Game() + <<Create>> Game(BattleResolver, AI) + initialiseGame(): void + startGame(): void + endTurn(): void - initialiseFactions(JSONObject, JSONArray): void - isLandLocked(JSONObject, Province): void - initialisedAdjacencyMatrix(JSONObject): void + updateAdjacencyMatrix(JSONObject): void + saveGame(String): void + loadGame(String): void + moveUnits(ArrayList<Unit>, Faction, Faction): boolean - generateVictoryCondition(): Goal - recGenerateVictoryCondtion(int, int): Goal + selectFaction(String): void - shortestPathLength(Province, Province): int - minVertex(Map<String, Integer>, ArrayList<String>): String" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="81" vertex="1">
<mxGeometry y="198" width="340" height="250" as="geometry"/>
</mxCell>
<mxCell id="153" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><i>&lt;&lt;Interface&gt;&gt;</i><br><b><i>Project</i></b></p><hr size="1"><p style="margin: 0px ; margin-left: 4px">+ getConstructionTime(): int</p><p style="margin: 0px ; margin-left: 4px">+ getBaseCost();</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;" parent="1" vertex="1">
<mxGeometry x="1175" y="1550" width="190" height="85" as="geometry"/>
</mxCell>
<mxCell id="155" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><i>&lt;&lt;Interface&gt;&gt;</i><br><b>BattleObserver</b></p><hr size="1"><p style="margin: 0px ; margin-left: 4px"><span>+ update(Faction): void</span></p><p style="margin: 0px ; margin-left: 4px"><span>+ setGame(Game): void</span></p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;" parent="1" vertex="1">
<mxGeometry x="-500" y="600" width="190" height="90" as="geometry"/>
</mxCell>
<mxCell id="6" value="Faction" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="1120" y="400" width="300" height="350" as="geometry"/>
</mxCell>
<mxCell id="7" value="- alliedProvinces: ArrayList<Province> - treasury: int - name: String - totalProvinceWealth: int - isPlayer: Boolean" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="6" vertex="1">
<mxGeometry y="26" width="300" height="84" as="geometry"/>
</mxCell>
<mxCell id="8" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="6" vertex="1">
<mxGeometry y="110" width="300" height="8" as="geometry"/>
</mxCell>
<mxCell id="9" value="+ <<Create>> Faction(string): void + updateProjects(): void + updateFactionWealth(): void + collectTax(): void + calculatePortBonus(): void + calculateMarketBonus(): void + calculateMineBonus(): void + addProvince(Province): void + calculateMineMultiplier(): double + calculateMarketMultiplies(): double + calculatePortBonus(): int + getWeath(): int + checkedMaxInfrastructure(): boolean + purchase(int): void + move(ArrayList<Unit>, province, province, int): void " style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="6" vertex="1">
<mxGeometry y="118" width="300" height="232" as="geometry"/>
</mxCell>
<mxCell id="173" value="1" style="endArrow=none;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;exitX=0.382;exitY=1.001;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.367;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;endFill=0;" parent="1" source="84" target="6" edge="1">
<mxGeometry x="-0.0005" y="41" relative="1" as="geometry">
<mxPoint x="1330" y="340" as="sourcePoint"/>
<mxPoint x="1490" y="340" as="targetPoint"/>
<mxPoint x="-31" y="-40" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="174" value="1..*" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;" parent="1" vertex="1">
<mxGeometry x="1234.5" y="380" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="175" value="1" style="endArrow=none;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;exitX=0.436;exitY=1.006;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.469;entryY=-0.001;entryDx=0;entryDy=0;entryPerimeter=0;endFill=0;" parent="1" source="9" target="106" edge="1">
<mxGeometry x="-0.454" y="9" relative="1" as="geometry">
<mxPoint x="1250" y="780" as="sourcePoint"/>
<mxPoint x="1250.2200000000003" y="899.75" as="targetPoint"/>
<mxPoint as="offset"/>
<Array as="points">
<mxPoint x="1251" y="770"/>
<mxPoint x="1251" y="770"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="176" value="1..*" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;" parent="1" vertex="1">
<mxGeometry x="1255" y="790" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="177" value="1" style="endArrow=none;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;entryX=0.5;entryY=0;entryDx=0;entryDy=0;endFill=0;" parent="1" source="109" target="14" edge="1">
<mxGeometry x="-0.931" y="-10" relative="1" as="geometry">
<mxPoint x="1040" y="1160" as="sourcePoint"/>
<mxPoint x="1040.2200000000003" y="1279.75" as="targetPoint"/>
<mxPoint as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="178" value="0..*" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;" parent="1" vertex="1">
<mxGeometry x="910" y="1520" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="179" value="" style="html=1;verticalAlign=bottom;endArrow=blockThin;dashed=1;endSize=8;exitX=0.999;exitY=0.092;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitPerimeter=0;endFill=1;" parent="1" source="15" target="153" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1450" y="1370" as="sourcePoint"/>
<mxPoint x="1370" y="1370" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="180" value="" style="endArrow=none;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;endFill=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="109" target="110" edge="1">
<mxGeometry x="-0.1304" y="20" relative="1" as="geometry">
<mxPoint x="1270" y="1250" as="sourcePoint"/>
<mxPoint x="1306" y="1290" as="targetPoint"/>
<mxPoint as="offset"/>
<Array as="points">
<mxPoint x="1270" y="1250"/>
<mxPoint x="1270" y="1250"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="181" value="0..*" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;" parent="1" vertex="1">
<mxGeometry x="1270" y="1297" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="182" value="1" style="endArrow=none;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;endFill=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="113" target="153" edge="1">
<mxGeometry x="-0.7054" y="10" relative="1" as="geometry">
<mxPoint x="1409" y="1144" as="sourcePoint"/>
<mxPoint x="1565" y="1380" as="targetPoint"/>
<mxPoint as="offset"/>
<Array as="points">
<mxPoint x="1270" y="1450"/>
<mxPoint x="1270" y="1450"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="183" value="1" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;" parent="1" vertex="1">
<mxGeometry x="1270" y="1526" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="110" value="ProjectDetails" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="1155" y="1317" width="230" height="104" as="geometry"/>
</mxCell>
<mxCell id="111" value="- project: Project - turnsRemaining: int" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="110" vertex="1">
<mxGeometry y="26" width="230" height="44" as="geometry"/>
</mxCell>
<mxCell id="112" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="110" vertex="1">
<mxGeometry y="70" width="230" height="8" as="geometry"/>
</mxCell>
<mxCell id="113" value="+ decrementTurnsRemaining(): boolean" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="110" vertex="1">
<mxGeometry y="78" width="230" height="26" as="geometry"/>
</mxCell>
<mxCell id="184" value="1" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;" parent="1" vertex="1">
<mxGeometry x="1275" y="1246" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="185" value="" style="html=1;verticalAlign=bottom;endArrow=blockThin;dashed=1;endSize=8;exitX=0;exitY=0.5;exitDx=0;exitDy=0;endFill=1;" parent="1" source="191" target="153" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1129.6399999999999" y="1602.1280000000002" as="sourcePoint"/>
<mxPoint x="1185" y="1602.5" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="186" value="1" style="endArrow=none;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;endFill=0;" parent="1" source="109" target="191" edge="1">
<mxGeometry x="-0.9612" y="4" relative="1" as="geometry">
<mxPoint x="1128.047" y="1161.384" as="sourcePoint"/>
<mxPoint x="950" y="1550" as="targetPoint"/>
<mxPoint as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="187" value="0..*" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;" parent="1" vertex="1">
<mxGeometry x="1550" y="1494" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="189" value="1" style="endArrow=none;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;entryX=1;entryY=0.5;entryDx=0;entryDy=0;endFill=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="107" target="144" edge="1">
<mxGeometry x="-0.5" y="-3" relative="1" as="geometry">
<mxPoint x="1128.0469999999998" y="1161.384" as="sourcePoint"/>
<mxPoint x="950" y="1550" as="targetPoint"/>
<mxPoint as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="190" value="1" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;" parent="1" vertex="1">
<mxGeometry x="1000" y="910" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="191" value="<p style="margin: 0px ; margin-top: 4px ; text-align: center"><i>&lt;&lt;Abstract&gt;&gt;</i><br><b><i>Infrastructure</i></b></p><hr size="1"><p style="margin: 0px ; margin-left: 4px">- baseCost: int<br style="padding: 0px ; margin: 0px">- baseConstructionTime: int<br style="padding: 0px ; margin: 0px">- level: int<br style="padding: 0px ; margin: 0px">- factionBonus: int<br></p><hr size="1"><p style="margin: 0px ; margin-left: 4px">+ levelUp(): void<br style="padding: 0px ; margin: 0px">+ updateCosts(): void<br></p><p style="margin: 0px ; margin-left: 4px">+ getConstructionTime(): int</p>" style="verticalAlign=top;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica;html=1;" parent="1" vertex="1">
<mxGeometry x="1450" y="1515.5" width="190" height="164.5" as="geometry"/>
</mxCell>
<mxCell id="120" value="<<Abstract>> WealthGenerationBuilding" style="swimlane;fontStyle=3;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=40;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="1840" y="1870" width="180" height="118" as="geometry"/>
</mxCell>
<mxCell id="121" value="- weathIncrease: int - wealthGrowthIncrease: int" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="120" vertex="1">
<mxGeometry y="40" width="180" height="44" as="geometry"/>
</mxCell>
<mxCell id="122" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="120" vertex="1">
<mxGeometry y="84" width="180" height="8" as="geometry"/>
</mxCell>
<mxCell id="123" value="+ method(type): type" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="120" vertex="1">
<mxGeometry y="92" width="180" height="26" as="geometry"/>
</mxCell>
<mxCell id="71" value="Smith" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="1850" y="1610" width="160" height="86" as="geometry"/>
</mxCell>
<mxCell id="72" value="+ field: type" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="71" vertex="1">
<mxGeometry y="26" width="160" height="26" as="geometry"/>
</mxCell>
<mxCell id="73" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="71" vertex="1">
<mxGeometry y="52" width="160" height="8" as="geometry"/>
</mxCell>
<mxCell id="74" value="+ toString(): String" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="71" vertex="1">
<mxGeometry y="60" width="160" height="26" as="geometry"/>
</mxCell>
<mxCell id="75" value="Wall" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="1850" y="1730" width="160" height="86" as="geometry"/>
</mxCell>
<mxCell id="76" value="+ field: type" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="75" vertex="1">
<mxGeometry y="26" width="160" height="26" as="geometry"/>
</mxCell>
<mxCell id="77" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="75" vertex="1">
<mxGeometry y="52" width="160" height="8" as="geometry"/>
</mxCell>
<mxCell id="78" value="+ toString(): String" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="75" vertex="1">
<mxGeometry y="60" width="160" height="26" as="geometry"/>
</mxCell>
<mxCell id="193" value="" style="endArrow=block;endSize=16;endFill=0;html=1;entryX=1;entryY=0.25;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="48" target="191" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="1820" y="1340" as="sourcePoint"/>
<mxPoint x="1980" y="1550" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="194" value="" style="endArrow=block;endSize=16;endFill=0;html=1;entryX=0.75;entryY=0;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="68" target="191" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="1787.5" y="1566.5" as="sourcePoint"/>
<mxPoint x="1560" y="1730" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="195" value="" style="endArrow=block;endSize=16;endFill=0;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="72" target="191" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="1840" y="1372" as="sourcePoint"/>
<mxPoint x="1612.5" y="1535.5" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="196" value="" style="endArrow=block;endSize=16;endFill=0;html=1;entryX=1;entryY=0.75;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="76" target="191" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="1850" y="1382" as="sourcePoint"/>
<mxPoint x="1622.5" y="1545.5" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="197" value="" style="endArrow=block;endSize=16;endFill=0;html=1;entryX=0.75;entryY=1;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="121" target="191" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="1860" y="1392" as="sourcePoint"/>
<mxPoint x="1632.5" y="1555.5" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="51" value="Port" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="2180" y="1720" width="160" height="86" as="geometry"/>
</mxCell>
<mxCell id="52" value="- bonus: int" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="51" vertex="1">
<mxGeometry y="26" width="160" height="26" as="geometry"/>
</mxCell>
<mxCell id="53" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="51" vertex="1">
<mxGeometry y="52" width="160" height="8" as="geometry"/>
</mxCell>
<mxCell id="54" value="+ toString(): String" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="51" vertex="1">
<mxGeometry y="60" width="160" height="26" as="geometry"/>
</mxCell>
<mxCell id="55" value="Market" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="2180" y="1834" width="160" height="86" as="geometry"/>
</mxCell>
<mxCell id="56" value="- multiplier: double" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="55" vertex="1">
<mxGeometry y="26" width="160" height="26" as="geometry"/>
</mxCell>
<mxCell id="57" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="55" vertex="1">
<mxGeometry y="52" width="160" height="8" as="geometry"/>
</mxCell>
<mxCell id="58" value="<<Create>> Market()" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="55" vertex="1">
<mxGeometry y="60" width="160" height="26" as="geometry"/>
</mxCell>
<mxCell id="59" value="Farm" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="2180" y="1950" width="160" height="86" as="geometry"/>
</mxCell>
<mxCell id="60" value="- farmBonus: int" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="59" vertex="1">
<mxGeometry y="26" width="160" height="26" as="geometry"/>
</mxCell>
<mxCell id="61" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="59" vertex="1">
<mxGeometry y="52" width="160" height="8" as="geometry"/>
</mxCell>
<mxCell id="62" value="<<Create>> Farm()" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="59" vertex="1">
<mxGeometry y="60" width="160" height="26" as="geometry"/>
</mxCell>
<mxCell id="63" value="Mine" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="2180" y="2090" width="160" height="94" as="geometry"/>
</mxCell>
<mxCell id="64" value="- f: Faction - multiplier: Double" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="63" vertex="1">
<mxGeometry y="26" width="160" height="34" as="geometry"/>
</mxCell>
<mxCell id="65" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="63" vertex="1">
<mxGeometry y="60" width="160" height="8" as="geometry"/>
</mxCell>
<mxCell id="66" value="+ toString(): String" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="63" vertex="1">
<mxGeometry y="68" width="160" height="26" as="geometry"/>
</mxCell>
<mxCell id="198" value="" style="endArrow=block;endSize=16;endFill=0;html=1;entryX=1;entryY=0;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="52" target="120" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="1850" y="1942" as="sourcePoint"/>
<mxPoint x="1602.5" y="1690" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="199" value="" style="endArrow=block;endSize=16;endFill=0;html=1;entryX=1;entryY=0.25;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="56" target="120" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="2190" y="1769" as="sourcePoint"/>
<mxPoint x="2030" y="1880" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="200" value="" style="endArrow=block;endSize=16;endFill=0;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="60" target="121" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="2190" y="1883" as="sourcePoint"/>
<mxPoint x="2030" y="1909.5" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="201" value="" style="endArrow=block;endSize=16;endFill=0;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" parent="1" source="63" target="123" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="2190" y="1999" as="sourcePoint"/>
<mxPoint x="2030" y="1942" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="202" value="1" style="endArrow=none;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=1.002;entryY=0.864;entryDx=0;entryDy=0;entryPerimeter=0;endFill=0;" parent="1" source="47" target="9" edge="1">
<mxGeometry x="0.0295" y="562" relative="1" as="geometry">
<mxPoint x="1720" y="630" as="sourcePoint"/>
<mxPoint x="1880" y="630" as="targetPoint"/>
<mxPoint x="10" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="203" value="1" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;" parent="1" vertex="1">
<mxGeometry x="1420" y="700" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="47" value="TroopProductionBuilding" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="1830" y="1460" width="260" height="120" as="geometry"/>
</mxCell>
<mxCell id="48" value="- f: Faction - units: Map<Integer, ArrayList<String>>" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontStyle=0" parent="47" vertex="1">
<mxGeometry y="26" width="260" height="54" as="geometry"/>
</mxCell>
<mxCell id="49" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="47" vertex="1">
<mxGeometry y="80" width="260" height="8" as="geometry"/>
</mxCell>
<mxCell id="50" value="+ isAvailable(Unit): boolean" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="47" vertex="1">
<mxGeometry y="88" width="260" height="32" as="geometry"/>
</mxCell>
<mxCell id="67" value="Road" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="1760" y="1297" width="160" height="86" as="geometry"/>
</mxCell>
<mxCell id="68" value="- p: Province" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="67" vertex="1">
<mxGeometry y="26" width="160" height="26" as="geometry"/>
</mxCell>
<mxCell id="69" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="67" vertex="1">
<mxGeometry y="52" width="160" height="8" as="geometry"/>
</mxCell>
<mxCell id="70" value="+ toString(): String" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="67" vertex="1">
<mxGeometry y="60" width="160" height="26" as="geometry"/>
</mxCell>
<mxCell id="204" value="" style="html=1;verticalAlign=bottom;endArrow=blockThin;dashed=1;endSize=8;exitX=0.5;exitY=0;exitDx=0;exitDy=0;endFill=1;entryX=0;entryY=0.75;entryDx=0;entryDy=0;" parent="1" source="146" target="145" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="2022.5" y="502.47999999999956" as="sourcePoint"/>
<mxPoint x="1937.5" y="500.0008333333335" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="205" value="" style="html=1;verticalAlign=bottom;endArrow=blockThin;dashed=1;endSize=8;exitX=0.5;exitY=0;exitDx=0;exitDy=0;endFill=1;entryX=0.25;entryY=1;entryDx=0;entryDy=0;" parent="1" source="148" target="145" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1680" y="560" as="sourcePoint"/>
<mxPoint x="1800" y="445" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="206" value="" style="html=1;verticalAlign=bottom;endArrow=blockThin;dashed=1;endSize=8;exitX=0.5;exitY=0;exitDx=0;exitDy=0;endFill=1;entryX=0.75;entryY=1;entryDx=0;entryDy=0;" parent="1" source="149" target="145" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1850" y="630" as="sourcePoint"/>
<mxPoint x="1847.5" y="480" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="207" value="" style="html=1;verticalAlign=bottom;endArrow=blockThin;dashed=1;endSize=8;exitX=0;exitY=0;exitDx=0;exitDy=0;endFill=1;entryX=1;entryY=0.75;entryDx=0;entryDy=0;" parent="1" source="150" target="145" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="2050" y="630" as="sourcePoint"/>
<mxPoint x="1942.5" y="480" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="208" value="" style="html=1;verticalAlign=bottom;endArrow=blockThin;dashed=1;endSize=8;exitX=0.5;exitY=0;exitDx=0;exitDy=0;endFill=1;entryX=0.25;entryY=1;entryDx=0;entryDy=0;" parent="1" source="156" target="155" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-662.5" y="630" as="sourcePoint"/>
<mxPoint x="-770" y="480" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="209" value="" style="html=1;verticalAlign=bottom;endArrow=blockThin;dashed=1;endSize=8;exitX=0.5;exitY=0;exitDx=0;exitDy=0;endFill=1;entryX=0.75;entryY=1;entryDx=0;entryDy=0;" parent="1" source="166" target="155" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-490" y="750" as="sourcePoint"/>
<mxPoint x="-442.5" y="700" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="210" value="" style="html=1;verticalAlign=bottom;endArrow=blockThin;dashed=1;endSize=8;exitX=0.5;exitY=0;exitDx=0;exitDy=0;endFill=1;entryX=0.25;entryY=1;entryDx=0;entryDy=0;" parent="1" source="141" target="140" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1827" y="302" as="sourcePoint"/>
<mxPoint x="1874.5" y="252" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="211" value="" style="html=1;verticalAlign=bottom;endArrow=blockThin;dashed=1;endSize=8;exitX=0.5;exitY=0;exitDx=0;exitDy=0;endFill=1;entryX=0.75;entryY=1;entryDx=0;entryDy=0;" parent="1" source="142" target="140" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1757" y="158" as="sourcePoint"/>
<mxPoint x="1824.5" y="82" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="212" value="1" style="endArrow=none;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endFill=0;" parent="1" source="82" target="140" edge="1">
<mxGeometry x="-1" y="3" relative="1" as="geometry">
<mxPoint x="1440" y="170" as="sourcePoint"/>
<mxPoint x="1600" y="170" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="213" value="1" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;" parent="1" vertex="1">
<mxGeometry x="1747" y="-60" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="214" value="1" style="endArrow=none;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;exitX=1;exitY=0.5;exitDx=0;exitDy=0;endFill=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="141" target="140" edge="1">
<mxGeometry x="-0.6765" y="22" relative="1" as="geometry">
<mxPoint x="1588.5" y="269.9999999999998" as="sourcePoint"/>
<mxPoint x="1800" y="270" as="targetPoint"/>
<mxPoint as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="215" value="1..*" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;" parent="1" vertex="1">
<mxGeometry x="1860" y="10" width="30" height="20" as="geometry"/>
</mxCell>
<mxCell id="216" value="1" style="endArrow=none;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;endFill=0;" parent="1" source="84" target="145" edge="1">
<mxGeometry x="-1" y="3" relative="1" as="geometry">
<mxPoint x="1449.9999999999995" y="-51.00000000000023" as="sourcePoint"/>
<mxPoint x="1777" y="-51" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="217" value="4" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;" parent="1" vertex="1">
<mxGeometry x="1820" y="340" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="218" value="1" style="endArrow=none;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.75;entryY=0;entryDx=0;entryDy=0;endFill=0;" parent="1" source="142" target="145" edge="1">
<mxGeometry y="32" relative="1" as="geometry">
<mxPoint x="1450" y="165" as="sourcePoint"/>
<mxPoint x="1800" y="375" as="targetPoint"/>
<Array as="points">
<mxPoint x="1987" y="279"/>
<mxPoint x="1988" y="279"/>
</Array>
<mxPoint x="-19" y="-28" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="219" value="1" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;" parent="1" vertex="1">
<mxGeometry x="1990" y="310" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="220" value="1" style="endArrow=none;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;endFill=0;" parent="1" source="84" target="151" edge="1">
<mxGeometry x="-0.9231" y="-5" relative="1" as="geometry">
<mxPoint x="1239.88" y="290.25" as="sourcePoint"/>
<mxPoint x="1240.1" y="410" as="targetPoint"/>
<mxPoint as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="221" value="1" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;" parent="1" vertex="1">
<mxGeometry x="360" y="250" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="222" value="" style="html=1;verticalAlign=bottom;endArrow=blockThin;dashed=1;endSize=8;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;endFill=1;" parent="1" source="152" target="151" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="460.00000000000034" y="409.99800000000005" as="sourcePoint"/>
<mxPoint x="515.36" y="410.3699999999999" as="targetPoint"/>
</mxGeometry>
</mxCell>
<mxCell id="223" value="1" style="endArrow=none;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;entryX=1;entryY=0.25;entryDx=0;entryDy=0;endFill=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="152" target="155" edge="1">
<mxGeometry x="-0.9135" y="25" relative="1" as="geometry">
<mxPoint x="790" y="942.9999999999995" as="sourcePoint"/>
<mxPoint x="670" y="943" as="targetPoint"/>
<mxPoint as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="224" value="2" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;" parent="1" vertex="1">
<mxGeometry x="-310" y="600" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="225" value="1" style="endArrow=none;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;exitX=0.25;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endFill=0;" parent="1" source="156" target="82" edge="1">
<mxGeometry x="-0.9889" y="20" relative="1" as="geometry">
<mxPoint x="310" y="250" as="sourcePoint"/>
<mxPoint x="310.5" y="351.99999999999955" as="targetPoint"/>
<Array as="points">
<mxPoint x="-540" y="-61"/>
</Array>
<mxPoint y="-1" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="226" value="1" style="endArrow=none;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;endFill=0;" parent="1" source="167" target="82" edge="1">
<mxGeometry x="-0.9858" y="9" relative="1" as="geometry">
<mxPoint x="109.99999999999977" y="750" as="sourcePoint"/>
<mxPoint x="1110" y="-51.00000000000023" as="targetPoint"/>
<Array as="points">
<mxPoint x="-290" y="850"/>
<mxPoint x="-650" y="850"/>
<mxPoint x="-650" y="-123"/>
</Array>
<mxPoint as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="227" value="1" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;" parent="1" vertex="1">
<mxGeometry x="1080" y="-150" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="228" value="1" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;" parent="1" vertex="1">
<mxGeometry x="1080" y="-80" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="89" value="AI" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="260" y="1440" width="160" height="86" as="geometry"/>
</mxCell>
<mxCell id="90" value="+ field: type" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="89" vertex="1">
<mxGeometry y="26" width="160" height="26" as="geometry"/>
</mxCell>
<mxCell id="91" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="89" vertex="1">
<mxGeometry y="52" width="160" height="8" as="geometry"/>
</mxCell>
<mxCell id="92" value="+ playTurn(Faction): void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="89" vertex="1">
<mxGeometry y="60" width="160" height="26" as="geometry"/>
</mxCell>
<mxCell id="156" value="DefeatObserver" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="-580" y="740" width="160" height="60" as="geometry"/>
</mxCell>
<mxCell id="157" value="- g: Game" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="156" vertex="1">
<mxGeometry y="26" width="160" height="34" as="geometry"/>
</mxCell>
<mxCell id="166" value="VictoryObserver" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="-370" y="740" width="160" height="60" as="geometry"/>
</mxCell>
<mxCell id="167" value="- g: Game" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="166" vertex="1">
<mxGeometry y="26" width="160" height="34" as="geometry"/>
</mxCell>
<mxCell id="230" value="BuildingObserver" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="730" y="500" width="200" height="110" as="geometry"/>
</mxCell>
<mxCell id="231" value="g: Game" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="230" vertex="1">
<mxGeometry y="26" width="200" height="26" as="geometry"/>
</mxCell>
<mxCell id="232" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="230" vertex="1">
<mxGeometry y="52" width="200" height="8" as="geometry"/>
</mxCell>
<mxCell id="233" value="+ update(Faction): void + update(Faction, Faction): void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="230" vertex="1">
<mxGeometry y="60" width="200" height="50" as="geometry"/>
</mxCell>
<mxCell id="106" value="Province" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="1120" y="810" width="279" height="436" as="geometry"/>
</mxCell>
<mxCell id="107" value="- name: String - faction: Faction - units: ArrayList<Unit> - infrastructure: ArrayList<Infrastructure> - wealth: int - wealthGrowth: int - tax: Tax - projects: ArrayList<ProjectDetails> - unitsInTraining: int - unitTrainingLimit: int - isSeaProvince: Boolean - numLegionaryDeaths: int - buildingObserver: BuildingObserver" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="106" vertex="1">
<mxGeometry y="26" width="279" height="190" as="geometry"/>
</mxCell>
<mxCell id="108" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="106" vertex="1">
<mxGeometry y="216" width="279" height="8" as="geometry"/>
</mxCell>
<mxCell id="109" value="+ build(Project): void + getProgress(): map<String,int> + checkProgress(): void + upgradeInfrastructure(Infrastructure): void + updateProvinceWealth(): void + setTax(string): void + applyTax(): int + isVeryHighTax(void): Boolean + updateProjects(): void + buildingInfrastructure() : void + maxedInfrastructure(): void + destroyAllUnits(): void + destroyUnits(ArrayList<Unit>): void " style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="106" vertex="1">
<mxGeometry y="224" width="279" height="212" as="geometry"/>
</mxCell>
<mxCell id="234" value="1" style="endArrow=none;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;exitX=0;exitY=0;exitDx=0;exitDy=0;entryX=0.708;entryY=0.996;entryDx=0;entryDy=0;endFill=0;entryPerimeter=0;" parent="1" source="106" target="233" edge="1">
<mxGeometry x="0.91" y="-8" relative="1" as="geometry">
<mxPoint x="1239.88" y="290.25" as="sourcePoint"/>
<mxPoint x="1240.1" y="410" as="targetPoint"/>
<mxPoint as="offset"/>
<Array as="points">
<mxPoint x="1050" y="810"/>
<mxPoint x="1050" y="670"/>
<mxPoint x="872" y="670"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="235" value="1" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;" parent="1" vertex="1">
<mxGeometry x="1100" y="820" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="236" value="1" style="endArrow=none;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endFill=0;" parent="1" source="152" target="233" edge="1">
<mxGeometry x="0.9371" y="5" relative="1" as="geometry">
<mxPoint x="1129.9999999999995" y="820.0000000000005" as="sourcePoint"/>
<mxPoint x="881.6000000000004" y="619.7999999999997" as="targetPoint"/>
<mxPoint as="offset"/>
<Array as="points">
<mxPoint x="610" y="645"/>
<mxPoint x="610" y="585"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="237" value="1" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;" parent="1" vertex="1">
<mxGeometry x="490" y="620" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="238" value="1" style="endArrow=none;html=1;endSize=12;startArrow=diamondThin;startSize=14;startFill=1;edgeStyle=orthogonalEdgeStyle;align=left;verticalAlign=bottom;exitX=0.75;exitY=0;exitDx=0;exitDy=0;endFill=0;entryX=0;entryY=0.948;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="230" target="84" edge="1">
<mxGeometry x="0.0287" y="-234" relative="1" as="geometry">
<mxPoint x="945" y="439.5" as="sourcePoint"/>
<mxPoint x="970" y="260.5" as="targetPoint"/>
<mxPoint x="-20" y="-1" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="239" value="1" style="text;html=1;align=center;verticalAlign=middle;resizable=0;points=[];autosize=1;" parent="1" vertex="1">
<mxGeometry x="1080" y="250" width="20" height="20" as="geometry"/>
</mxCell>
<mxCell id="14" value="Unit" style="swimlane;fontStyle=1;align=center;verticalAlign=top;childLayout=stackLayout;horizontal=1;startSize=26;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;" parent="1" vertex="1">
<mxGeometry x="700" y="1540" width="410" height="480" as="geometry"/>
</mxCell>
<mxCell id="15" value="- name: String - type: String - numTroops: int - ranged: boolean - armour: int - morale: double - speed: int - attack: int - chargeValue: int - defenceSkill: int - shieldDefence: int - baseCost: int - trainingTime: int - movementPoints: int - movementPointsRemaining: int - isBroken: boolean - isRouted: boolean - taxDebuff: int - engagementCount: int" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="14" vertex="1">
<mxGeometry y="26" width="410" height="284" as="geometry"/>
</mxCell>
<mxCell id="16" value="" style="line;strokeWidth=1;fillColor=none;align=left;verticalAlign=middle;spacingTop=-1;spacingLeft=3;spacingRight=3;rotatable=0;labelPosition=right;points=[];portConstraint=eastwest;" parent="14" vertex="1">
<mxGeometry y="310" width="410" height="8" as="geometry"/>
</mxCell>
<mxCell id="17" value="+ <<Create>> Unit(String) + checkType(String): boolean + reduceRemainingMovementPoints(int): void + canMove(int): boolean + takeDamage(int): void + calculateDamage(Unit, boolean, boolean, Random): int + checkIfBroken(int, int, int, int, double, boolean, int, double, Random): void + getAttack(): int + getChargeValue(): int + resetUnit(): void" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;" parent="14" vertex="1">
<mxGeometry y="318" width="410" height="162" as="geometry"/>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>