﻿<?xml version="1.0" encoding="utf-8"?>
<modelStoreModel xmlns:dm0="http://schemas.microsoft.com/VisualStudio/2008/DslTools/Core" xmlns:dm1="http://schemas.microsoft.com/dsltools/Kernel" xmlns:dm2="http://schemas.microsoft.com/dsltools/Component" xmlns:dm3="http://schemas.microsoft.com/dsltools/UseCase" xmlns:dm4="http://schemas.microsoft.com/dsltools/Activity" xmlns:dm5="http://schemas.microsoft.com/dsltools/Interaction" xmlns:dm6="http://schemas.microsoft.com/dsltools/UmlModelLibrary" xmlns:dm7="http://schemas.microsoft.com/dsltools/UmlDiagrams" xmlns:dm8="http://schemas.microsoft.com/dsltools/LogicalClassDesigner"
  dslVersion="1.0.0.0"
  Id="7bd4b2ec-d5fe-4456-9cca-c2ec9fba4f01"
  name="DesignPatterns-Prelude" xmlns="http://schemas.microsoft.com/dsltools/ModelStore">
  <ownedCommentsInternal>
    <comment
      Id="60212331-ff04-4609-aeda-264fe8e603dd">
      <body>foreach (Player p in players) {
  while (p.wantsCard())
    p.getsCard(d.dealNewCard());
}</body>
      <annotatedElements>
        <classMoniker
          Id="3fea3612-2c8e-4e08-95ab-04d219385754"
          LastKnownName="Dealer"
          LastKnownLocation="DesignPatterns-Prelude.uml" />
      </annotatedElements>
    </comment>
    <comment
      Id="9dfeff64-3fd2-49e2-ab9c-da2a88eeb607">
      <body>delegate</body>
      <annotatedElements>
        <interfaceMoniker
          Id="21206630-d1a5-486e-afaa-5464d749022a"
          LastKnownName="InputHandler"
          LastKnownLocation="DesignPatterns-Prelude.uml" />
      </annotatedElements>
    </comment>
    <comment
      Id="81a78e56-f55f-48a5-bed9-ca4d8bc1f579">
      <body>public void onButton_Click() { han(); }</body>
      <annotatedElements>
        <classMoniker
          Id="bf509f80-a7bc-4466-a769-df3f98b096e2"
          LastKnownName="InputViewForm"
          LastKnownLocation="DesignPatterns-Prelude.uml" />
      </annotatedElements>
    </comment>
    <comment
      Id="33e5527e-857a-4c8f-a3e1-d7e85bd92937">
      <body>public void handle() {
  ... do control algorithm
  model.update();
  ... notify output forms that model has changed
       so that they can call getData()...
}</body>
      <annotatedElements>
        <classMoniker
          Id="02f51121-e555-4f81-a872-074f55bd50f2"
          LastKnownName="Controller"
          LastKnownLocation="DesignPatterns-Prelude.uml" />
      </annotatedElements>
    </comment>
    <comment
      Id="163bc588-c0fe-4f7a-a20c-7170399c2c7f">
      <body>Helper h = mgr.requestHelp();
h.doWork();
h.finished();</body>
      <annotatedElements>
        <classMoniker
          Id="e0902e59-b443-436a-bb8b-189edc2843c9"
          LastKnownName="Client"
          LastKnownLocation="DesignPatterns-Prelude.uml" />
      </annotatedElements>
    </comment>
    <comment
      Id="d5474b06-481c-4239-9b6b-118fb4ba3d9e">
      <body>myManager.remove(this);</body>
      <annotatedElements>
        <classMoniker
          Id="48851c21-f80b-42db-acd1-c8202d24e72e"
          LastKnownName="Helper"
          LastKnownLocation="DesignPatterns-Prelude.uml" />
      </annotatedElements>
    </comment>
    <comment
      Id="adf2bdb2-d5fe-402b-86d3-e4926ad4fb9e">
      <body>active.Remove(h);
h.Finalize();</body>
      <annotatedElements>
        <classMoniker
          Id="0f7c3d18-6f68-4173-b591-1f06868facaa"
          LastKnownName="Manager"
          LastKnownLocation="DesignPatterns-Prelude.uml" />
      </annotatedElements>
    </comment>
    <comment
      Id="fc601c54-3312-4f28-8e59-d01ab813b95d">
      <body>Helper h = new Helper(this);
active.Add(h); return h;</body>
      <annotatedElements>
        <classMoniker
          Id="0f7c3d18-6f68-4173-b591-1f06868facaa"
          LastKnownName="Manager"
          LastKnownLocation="DesignPatterns-Prelude.uml" />
      </annotatedElements>
    </comment>
    <comment
      Id="ca991c3d-248a-4067-bc12-7f6f06394725">
      <body>Helper h = mgr.requestHelp();
h.doWork();
h.finished();</body>
      <annotatedElements>
        <classMoniker
          Id="1152ffd3-f647-4b63-b430-3017776575b7"
          LastKnownName="Client"
          LastKnownLocation="DesignPatterns-Prelude.uml" />
      </annotatedElements>
    </comment>
    <comment
      Id="1357620d-67b9-4c84-bfab-b79de8db6b8f">
      <body>done(this);</body>
      <annotatedElements>
        <classMoniker
          Id="efdf5266-4475-416f-8a0b-6a0d677935fb"
          LastKnownName="Helper"
          LastKnownLocation="DesignPatterns-Prelude.uml" />
      </annotatedElements>
    </comment>
    <comment
      Id="daa122f4-4e14-4dba-9d68-b794852e240f">
      <body>active.Remove(h);
h.Finalize();</body>
      <annotatedElements>
        <classMoniker
          Id="c216822c-fd92-40a4-85b6-020574f8321c"
          LastKnownName="Manager"
          LastKnownLocation="DesignPatterns-Prelude.uml" />
      </annotatedElements>
    </comment>
    <comment
      Id="68be6e1f-37d1-42da-a74d-e99cfe618f39">
      <body>Helper h = new Helper(this);
active.Add(h); return h;</body>
      <annotatedElements>
        <classMoniker
          Id="c216822c-fd92-40a4-85b6-020574f8321c"
          LastKnownName="Manager"
          LastKnownLocation="DesignPatterns-Prelude.uml" />
      </annotatedElements>
    </comment>
    <comment
      Id="5431ca0e-d9cb-4464-b51c-5a20a2f8e0a0">
      <body>delegate</body>
      <annotatedElements>
        <interfaceMoniker
          Id="62c58a10-c78d-4435-87d3-d39c387e0c09"
          LastKnownName="RemoveMethod"
          LastKnownLocation="DesignPatterns-Prelude.uml" />
      </annotatedElements>
    </comment>
    <comment
      Id="c9e25f0f-6a87-4d2e-9a1f-d7371f9cc1ed">
      <body>var wsm = new MockWebSocket();
var cc = new ChatController("A", wsm);
cc.AddMessageReceivedHandler(m =&gt; {
  Assert.AreEqual("A: Hello", m);
  return true;
});
cc.MessageEntered("Hello");</body>
    </comment>
    <comment
      Id="5bb54ed6-7d79-43d3-92a3-370c662499c7">
      <body>public void Transmit(m : string) {
  MessageReceived(m); return true;
}</body>
      <annotatedElements>
        <classMoniker
          Id="f7603384-e3c2-483b-94a6-a7b09089c8e4"
          LastKnownName="MockWebSocket"
          LastKnownLocation="DesignPatterns-Prelude.uml" />
      </annotatedElements>
    </comment>
    <comment
      Id="2f53cc51-d1df-425e-a622-7ae48305a238">
      <body>var cb = new ChatBehavior();
var mwsb1 = new MockWebSocketBehavior();
cb.Open(mwsb1);
Assert.AreEqual(0, mwsb1.SentMessages.Count);
var message = "Foo: Hello";
cb.ProcessMessage(message, mwsb1);
var mwsb2 = new MockWebSocketBehavior();
cb.Open(mwsb2);
Assert.AreEqual(1, mwsb1.BroadcastedMessages.Count);
Assert.AreEqual(1, mwsb2.SentMessages.Count);
Assert.AreEqual(mwsb1.BroadcastedMessages[0],
                          mwsb2.SentMessages[0]);</body>
    </comment>
    <comment
      Id="56949368-9787-481a-8a62-ea71696bff6d">
      <body>public void Broadcast(string m) { BroadcastedMessages.Add(m); }
public void Send(string m) { SentMessages.Add(m); }</body>
      <annotatedElements>
        <classMoniker
          Id="ecc15004-b6be-43d9-9c30-c9eb0222b6e3"
          LastKnownName="MockWebSocketBehavior"
          LastKnownLocation="DesignPatterns-Prelude.uml" />
      </annotatedElements>
    </comment>
    <comment
      Id="4bf0011a-51b4-49e3-ac6b-9bd61414dd0d">
      <body>var cb = new ChatBehavior();

var l = new List&lt;string&gt;();
var mws = new MockWebSocket(cb);
mws.MessageReceived += m =&gt; { 
  l.Add(m); return true;
}; 

var cc = new ChatController("A", mws);
cb.Open(mws);
cc.MessageEntered("Hello");
Assert.AreEqual(1, l.Count);</body>
    </comment>
    <comment
      Id="b328e6a4-2c88-4d9a-99e3-e997e60e8f67">
      <body>delegate</body>
      <annotatedElements>
        <interfaceMoniker
          Id="d5e14f8e-70e9-448b-a975-ba7fa5fb0c68"
          LastKnownName="GetData"
          LastKnownLocation="DesignPatterns-Prelude.uml" />
      </annotatedElements>
    </comment>
    <comment
      Id="69823c40-47d5-4c73-ac35-52c9c2f6990a">
      <body>delegate</body>
      <annotatedElements>
        <interfaceMoniker
          Id="692bc672-354c-4b63-912f-84b2f05649e3"
          LastKnownName="Message"
          LastKnownLocation="DesignPatterns-Prelude.uml" />
      </annotatedElements>
    </comment>
    <comment
      Id="7925f40f-b00a-455a-a5f4-9ddbb89f9082">
      <body>public bool Transmit(string message) {
  cb.ProcessMessage(message, this); return true;
}

public void Send(string m) {  MessageReceived(m); }

public void Broadcast(string m) {  MessageReceived(m); }</body>
      <annotatedElements>
        <classMoniker
          Id="816b4162-86d0-42bb-ab23-7f0791ed51f4"
          LastKnownName="MockWebSocket"
          LastKnownLocation="DesignPatterns-Prelude.uml" />
      </annotatedElements>
    </comment>
    <comment
      Id="2003416e-3900-4a0f-ba4f-472e0583d13f">
      <body>public void Transmit(m : ClientMessage)
{
  Transmit(ToJson(m));
}

</body>
    </comment>
    <comment
      Id="f50366c0-20d5-4ccd-a08b-1079bd88aff0">
      <body>protected override void OnMessage(MessageEventArgs e)
{
  ProcessMessage(FromJson&lt;ClientMessage&gt;(e.Data));
}

public void ProcessMessage(m : ClientMessage)
{
  iif (m is LoginMessage) { ... }
  else if (m is ChatMessage) { ... }
  else if (m is LogoutMEssage) { ... }
}
</body>
    </comment>
    <comment
      Id="f2981b15-17c3-4201-8221-8272f98c1f33">
      <body>public void DoSomething(b : B) {
  B.Process();
}</body>
      <annotatedElements>
        <classMoniker
          Id="9decdcab-b616-4f11-b8ea-8672933600ff"
          LastKnownName="AImpl"
          LastKnownLocation="DesignPatterns-Prelude.uml" />
      </annotatedElements>
    </comment>
    <comment
      Id="a6a34256-28a6-4228-b1f1-8910a5d479bc">
      <body>public void DoSomething(b : B) {
  if (b is B2) {
    ((B2) b).MoreEfficientProcess();
  } else {
    b.Process();
  }
}</body>
      <annotatedElements>
        <classMoniker
          Id="4e18d385-dd6b-496f-96e8-fed17f127a29"
          LastKnownName="EfficientAImpl"
          LastKnownLocation="DesignPatterns-Prelude.uml" />
      </annotatedElements>
    </comment>
  </ownedCommentsInternal>
  <profileInstances>
    <packageHasProfileInstances
      Id="0caec977-1f8c-4ba3-a7db-8cc9ad9cc73b">
      <profileInstance
        Id="e34d544e-0fea-4ed6-ac5e-1b74119ac791"
        name="StandardProfileL2" />
    </packageHasProfileInstances>
    <packageHasProfileInstances
      Id="29349502-908c-4fda-9054-c48619c59ed0">
      <profileInstance
        Id="532ea607-fb19-44b8-8502-3351b05452be"
        name="StandardProfileL3" />
    </packageHasProfileInstances>
  </profileInstances>
  <packagedElements>
    <packageHasNamedElement>
      <class
        Id="a62fa993-74d9-4826-9c26-19ab946272d0"
        name="C"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <targetEnds>
          <association
            Id="a51fd0b6-6d98-4ae3-a52d-b3eb0f498baf"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName="myOb"
            isLeaf="false"
            isAbstract="false">
            <interfaceMoniker
              Id="d693ef47-c98a-45a9-999b-90cc41bf62aa"
              LastKnownName="ID"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="218afb69-0aca-4d33-9db4-b4396000f920"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="76773594-3d7a-45a9-b006-b5d987605ffb"
                  name="myOb"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
          <association
            Id="7bc09d55-6ad1-42d8-ba9c-d3e2632ec0ce"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName="myOb"
            isLeaf="false"
            isAbstract="false">
            <classMoniker
              Id="4c3788e8-68b2-4122-9346-a07875e8e7ed"
              LastKnownName="D"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="3e456166-1435-41c5-bf69-e0de4eb8a9b7"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="35041489-26f5-4078-815f-7ce8ee25d25c"
                  name="myOb"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedOperationsInternal>
          <operation
            Id="bd6761c6-c648-491f-821c-aec9e3cfb71f"
            name="C"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="59d8d522-e843-4248-af6a-9ed98633766e"
                  name="myOb"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <undefinedTypeMoniker
                      Id="b31e6aac-1df9-4480-8a59-000295f1f2d0"
                      LastKnownName="D"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <undefinedType
        Id="b31e6aac-1df9-4480-8a59-000295f1f2d0"
        name="D" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="4c3788e8-68b2-4122-9346-a07875e8e7ed"
        name="D"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <interfaceRealization
            Id="c49b087d-c61e-472f-83ea-612c7141b7f5">
            <interfaceMoniker
              Id="d693ef47-c98a-45a9-999b-90cc41bf62aa"
              LastKnownName="ID"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </interfaceRealization>
        </suppliersInternal>
        <targetEnds>
          <association
            Id="822b7329-8db1-466e-8e9b-5573fb65e518"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName=""
            isLeaf="false"
            isAbstract="false">
            <classMoniker
              Id="7b4f272f-d8b0-4385-ba46-906fc4d9c4dd"
              LastKnownName="E"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="8bace4a7-65d5-47f5-8272-5cba5d957cb1"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="187ac7ce-277e-48aa-bf8b-6f3a8c0d22df"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedOperationsInternal>
          <operation
            Id="5711cee7-1378-4e05-937f-1ae8289fe6bb"
            name="methodA"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="0ca55761-b5a5-4fbb-8903-97ff46e2b4d4"
                  name="x"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="220a3521-e091-4221-bae9-3ef9018e845c"
                      LastKnownName="Integer"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="ca787f67-8675-4d56-9eeb-308f15a7d73b"
            name="methodB"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="b981b545-0f63-4c5c-9d15-33171f3ee55f"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
                      LastKnownName="Boolean"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="2d8f417e-898d-43c2-ad86-755f6e6f4560"
            name="methodC"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="7b4f272f-d8b0-4385-ba46-906fc4d9c4dd"
        name="E"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <Interface
        Id="d693ef47-c98a-45a9-999b-90cc41bf62aa"
        name="ID"
        isAbstract="false"
        isLeaf="false">
        <ownedOperations>
          <operation
            Id="ce9d0390-8d39-49ab-bed4-e4671814fcc9"
            name="methodA"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="ae195825-4656-4223-9955-117105bc22eb"
                  name="x"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="220a3521-e091-4221-bae9-3ef9018e845c"
                      LastKnownName="Integer"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="29d3b5f0-9c49-44f2-a89a-e5287fdede58"
            name="methodB"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="9fac228e-a84c-4799-bc64-e05ad403e3b9"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
                      LastKnownName="Boolean"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperations>
      </Interface>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="811e6c2a-1549-4ca2-93a3-9dc469a7f07a"
        name="C"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <targetEnds>
          <association
            Id="cc367b1d-48af-4fbf-94a5-f042296cb616"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName="myOb"
            isLeaf="false"
            isAbstract="false">
            <interfaceMoniker
              Id="d63d1e33-dee2-425c-aef6-340717ff31a6"
              LastKnownName="ID"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="96b03f7c-2edd-4309-ba09-573ededb46d0"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="a24af2db-5edc-4e2f-b2b0-edae428eff22"
                  name="myOb"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedOperationsInternal>
          <operation
            Id="9dfe3199-6d12-4a24-8776-9b2c5179f629"
            name="C"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="3a25a586-24df-449c-bdaa-f486f4cb6263"
                  name="myOb"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <undefinedTypeMoniker
                      Id="b31e6aac-1df9-4480-8a59-000295f1f2d0"
                      LastKnownName="D"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="c5bfacde-c40b-4645-8369-fdc3df54e8de"
        name="D"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <interfaceRealization
            Id="957bc1ff-e95d-461b-9a29-7c98535af7e0">
            <interfaceMoniker
              Id="d63d1e33-dee2-425c-aef6-340717ff31a6"
              LastKnownName="ID"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </interfaceRealization>
        </suppliersInternal>
        <targetEnds>
          <association
            Id="8e36ca55-c67f-4dde-9944-1d0d4536c417"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName=""
            isLeaf="false"
            isAbstract="false">
            <classMoniker
              Id="0917d2d5-cd28-44f7-b1d9-cc5e079df810"
              LastKnownName="E"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="926599f8-dc89-4862-81df-f65c0f7eef88"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="9a28610a-f295-43e5-a497-8baedb9fe1c1"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedOperationsInternal>
          <operation
            Id="2ea57d1d-b15d-4f84-afc0-5a558e3d1a49"
            name="methodA"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="6ed98d70-38af-41fa-96fa-fd0f1cf1ee08"
                  name="x"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="220a3521-e091-4221-bae9-3ef9018e845c"
                      LastKnownName="Integer"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="802afa87-0c56-4f48-9ec0-7ea6bce59b7b"
            name="methodB"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="44ab5b76-af03-4367-bdd4-1bf2cb3e296d"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
                      LastKnownName="Boolean"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="377fffc5-75a5-433d-8b0e-1bc6d99306e5"
            name="methodC"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="0917d2d5-cd28-44f7-b1d9-cc5e079df810"
        name="E"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <Interface
        Id="d63d1e33-dee2-425c-aef6-340717ff31a6"
        name="ID"
        isAbstract="false"
        isLeaf="false">
        <ownedOperations>
          <operation
            Id="45a1eb2d-38fb-4418-83e0-f2e85c7c2151"
            name="methodA"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="04cb3e68-f24b-4a8e-a6ef-040fef606925"
                  name="x"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="220a3521-e091-4221-bae9-3ef9018e845c"
                      LastKnownName="Integer"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="06fd2a01-d800-4630-99b7-3a3afe1b238f"
            name="methodB"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="78b7222a-7b41-475b-bd29-160c1fbab46f"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
                      LastKnownName="Boolean"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperations>
      </Interface>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <Interface
        Id="03ed6115-ea6e-48ad-904f-a0a3a316c353"
        name="BankDatabase"
        isAbstract="false"
        isLeaf="false">
        <ownedOperations>
          <operation
            Id="bcb15ff0-ac8a-4f21-b2d2-6092a2774e48"
            name="login"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="a047497e-5cb0-46dc-9767-ab4e47f1d695"
                  name="name"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="b84773e3-4cc2-4638-bb88-072ea1dfe4b8"
                  name="password"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="4697f37c-496e-4d5b-acb2-c436fadcf492"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <interfaceMoniker
                      Id="7e151806-841a-41ef-85a9-09018bff3ca4"
                      LastKnownName="BankAccount"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="db7d72fa-96d8-48a9-b2e4-34f98cb9e8a8"
            name="logout"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="452dac1d-433b-4b77-9aa8-b8f4e791fe79"
                  name="b"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <interfaceMoniker
                      Id="7e151806-841a-41ef-85a9-09018bff3ca4"
                      LastKnownName="BankAccount"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="394774d5-6265-4a25-a7e5-3cbabecf1673"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
                      LastKnownName="Boolean"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperations>
      </Interface>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <Interface
        Id="7e151806-841a-41ef-85a9-09018bff3ca4"
        name="BankAccount"
        isAbstract="false"
        isLeaf="false">
        <ownedOperations>
          <operation
            Id="393d79d4-bc69-4955-bbc4-ada30a472955"
            name="getBalance"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="76af60d7-696e-4a79-9687-bb3df5934e91"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="220a3521-e091-4221-bae9-3ef9018e845c"
                      LastKnownName="Integer"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="9c5d194b-ab22-4ab8-98c6-75ad9f3606d4"
            name="withdraw"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="1d513df2-a4a8-4f0e-9207-526f2224f9de"
                  name="amount"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="220a3521-e091-4221-bae9-3ef9018e845c"
                      LastKnownName="Integer"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="1dabc330-e6a3-4efc-b2e5-d7312a53f1b4"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
                      LastKnownName="Boolean"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperations>
      </Interface>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="10bc7736-3637-43f0-a468-4685e908287b"
        name="Controller"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <dependency
            Id="51b1b2b6-2716-431b-827b-ba5b5e5d57a9">
            <interfaceMoniker
              Id="03ed6115-ea6e-48ad-904f-a0a3a316c353"
              LastKnownName="BankDatabase"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </dependency>
          <dependency
            Id="c747fa3c-cef7-458b-bd98-ff4d942f36ed">
            <interfaceMoniker
              Id="7e151806-841a-41ef-85a9-09018bff3ca4"
              LastKnownName="BankAccount"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </dependency>
        </suppliersInternal>
        <targetEnds>
          <association
            Id="94154e50-f1ba-46a1-814c-33fb485483a9"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName=""
            isLeaf="false"
            isAbstract="false">
            <enumerationMoniker
              Id="c72f03ac-ab55-484a-a5d6-2a56457011f2"
              LastKnownName="Status"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="a86a1d74-501d-45f6-a41f-af7a1985c375"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="8c32a629-7f55-45d5-ab68-ff72882fb93a"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedAttributesInternal>
          <property
            Id="d917d61a-70af-4e7c-b0d8-67a66c59b6fe"
            name="bank"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <interfaceMoniker
                Id="03ed6115-ea6e-48ad-904f-a0a3a316c353"
                LastKnownName="BankDatabase"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
          <property
            Id="d55b47af-8d2d-489b-bd21-d39cdba6956d"
            name="account"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <interfaceMoniker
                Id="7e151806-841a-41ef-85a9-09018bff3ca4"
                LastKnownName="BankAccount"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
          <property
            Id="f2c87f2d-78eb-4af2-b33a-1ba158d94929"
            name="state"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <enumerationMoniker
                Id="c72f03ac-ab55-484a-a5d6-2a56457011f2"
                LastKnownName="Status"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <enumeration
        Id="c72f03ac-ab55-484a-a5d6-2a56457011f2"
        name="Status"
        isAbstract="false"
        isLeaf="false">
        <ownedLiterals>
          <enumerationLiteral
            Id="9f3358bc-07fc-4c7c-bfd5-c1e639f93f18"
            name="Start" />
          <enumerationLiteral
            Id="85a861db-344d-49fc-b9c6-1ef584f2cd6d"
            name="HaveName" />
          <enumerationLiteral
            Id="0bf39819-9cf4-43cd-ba74-bbe8879983d7"
            name="LoggedIn" />
          <enumerationLiteral
            Id="950cd111-f763-4a5d-a5db-ccd255009336"
            name="CheckedBalance" />
          <enumerationLiteral
            Id="b238e541-01ac-4e39-8c0e-99dc776f7083"
            name="NeedWithdrawalAmount" />
          <enumerationLiteral
            Id="ff325acb-5e56-4b56-b21b-9d7a7aeac6f4"
            name="DidWithdrawal" />
          <enumerationLiteral
            Id="5eb2e754-8ee9-4e30-9c08-36e79dd59c59"
            name="LoggedOut" />
        </ownedLiterals>
      </enumeration>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="ea91465f-825a-4b60-8712-f78362d1d87b"
        name="ATMForm"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <targetEnds>
          <association
            Id="186b386e-af7c-462f-9432-99146771a2e3"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName=""
            isLeaf="false"
            isAbstract="false">
            <enumerationMoniker
              Id="c72f03ac-ab55-484a-a5d6-2a56457011f2"
              LastKnownName="Status"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="10c08201-fd04-47e9-8a3f-8a4eb5dd8f77"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="947aef13-58b0-41a7-bea5-065f6d423a07"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
          <association
            Id="519f2cfc-1d28-4a9b-8e88-1bccd4376369"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName="controller"
            isLeaf="false"
            isAbstract="false">
            <classMoniker
              Id="10bc7736-3637-43f0-a468-4685e908287b"
              LastKnownName="Controller"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="d3b1d504-a2c6-4c03-aa29-a30ac696ab56"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="43f2367c-82ee-4c97-820d-097a2b35e6ad"
                  name="controller"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedAttributesInternal>
          <property
            Id="94ea183b-cfad-4160-a1ec-81da2254ca6a"
            name="state"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <enumerationMoniker
                Id="c72f03ac-ab55-484a-a5d6-2a56457011f2"
                LastKnownName="Status"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
          <property
            Id="01479b41-6e89-43be-b30c-f76182f6064e"
            name="displayArea"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="9ebaf752-612c-4f32-be48-0b9725034ba3"
                LastKnownName="Label"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
          <property
            Id="5565fe75-9963-4b87-89f8-1778dd10c3dd"
            name="cardSlot"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <primitiveTypeMoniker
                Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                LastKnownName="String"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
          <property
            Id="f9399f01-ee08-47fd-bbd6-c70693a82dc7"
            name="numberal_pad"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="160c422e-f427-4772-b8dc-2e52092044a3"
                LastKnownName="Button[]"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
          <property
            Id="ba8b1ed3-f7e9-4589-8707-82d14deb4f3a"
            name="ok_button"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="be261a78-93c2-4055-9d88-161adfc9a3b6"
                LastKnownName="Button"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
          <property
            Id="579f323c-8742-4d0d-9575-7960a39f99a2"
            name="cancel_button"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="be261a78-93c2-4055-9d88-161adfc9a3b6"
                LastKnownName="Button"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="5921d7b4-d5a7-4cc0-b3eb-f981add1e6cb"
            name="cardInsert"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
          <operation
            Id="34e95465-c86e-4382-8ad8-b75012cc2c7e"
            name="numeralButtonClick"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
          <operation
            Id="dfd2f80a-6070-4eab-9f23-b50f88f7952b"
            name="okButtonClick"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
          <operation
            Id="573d68a4-4e49-419b-8d8a-e48de5a7b203"
            name="cancelButtonClick"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <undefinedType
        Id="9ebaf752-612c-4f32-be48-0b9725034ba3"
        name="Label" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <undefinedType
        Id="160c422e-f427-4772-b8dc-2e52092044a3"
        name="Button[]" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <undefinedType
        Id="be261a78-93c2-4055-9d88-161adfc9a3b6"
        name="Button" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="0d85711a-8737-4de8-afea-97bca531f5c0"
        name="C"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <targetEnds>
          <association
            Id="56ba70c2-13ce-45c6-9314-d79529fcf737"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName="myOb"
            isLeaf="false"
            isAbstract="false">
            <interfaceMoniker
              Id="b08e92cd-a941-43ee-937d-23a282f23ead"
              LastKnownName="ID"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="013b1173-c591-4466-acd3-25f5225da43d"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="87966417-0909-4b5e-a549-771ab589e237"
                  name="myOb"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedOperationsInternal>
          <operation
            Id="c64d55b5-dade-4a9a-a0cf-eadc3a3385cf"
            name="C"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="2359001c-5bc2-4e9e-b7b0-17da66c1208f"
                  name="myOb"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <undefinedTypeMoniker
                      Id="b31e6aac-1df9-4480-8a59-000295f1f2d0"
                      LastKnownName="D"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="a13bc328-965d-4c70-b34e-13b2641736d9"
        name="D"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <interfaceRealization
            Id="9749dfc3-48ae-4e5d-9532-b358df0e17fe">
            <interfaceMoniker
              Id="b08e92cd-a941-43ee-937d-23a282f23ead"
              LastKnownName="ID"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </interfaceRealization>
        </suppliersInternal>
        <targetEnds>
          <association
            Id="4362415e-ebd6-4a76-9ce9-6f620dcd16f5"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName=""
            isLeaf="false"
            isAbstract="false">
            <classMoniker
              Id="fa3c1273-429d-4166-8c79-5426ebe5fcc9"
              LastKnownName="E"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="63d6b345-bac9-4715-8b3d-e7bb10a84340"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="b242edae-6b63-4ad7-aaa3-aa06ae077c09"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedOperationsInternal>
          <operation
            Id="37f15f76-0cda-4e5c-82a9-25fbd54931a1"
            name="methodA"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="cd189e6e-962a-4fbe-8981-d12d73f088d0"
                  name="x"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="220a3521-e091-4221-bae9-3ef9018e845c"
                      LastKnownName="Integer"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="1cbdf7c6-b61f-44a0-8f9b-ee138c151c54"
            name="methodB"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="c5b76e38-9cea-4104-96e6-fb5bee32395e"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
                      LastKnownName="Boolean"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="96c44877-b90e-45c2-a57f-a039587fad5b"
            name="methodC"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="fa3c1273-429d-4166-8c79-5426ebe5fcc9"
        name="E"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <Interface
        Id="b08e92cd-a941-43ee-937d-23a282f23ead"
        name="ID"
        isAbstract="false"
        isLeaf="false">
        <ownedOperations>
          <operation
            Id="6c3c789a-4ce3-4c7f-b980-14c9e7f04d53"
            name="methodA"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="de385fc1-c0d2-4c73-944e-196636a6189b"
                  name="x"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="220a3521-e091-4221-bae9-3ef9018e845c"
                      LastKnownName="Integer"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="ec76ea62-45a6-49e8-a65c-efedca6df98b"
            name="methodB"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="5f229bf3-997a-4b2c-a22d-98a4a5e30824"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
                      LastKnownName="Boolean"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperations>
      </Interface>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="99d42d29-dd70-4246-9f54-aae7085dbc6d"
        name="Dalternative"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <interfaceRealization
            Id="dbfba060-168a-4347-9040-8fd804c273cd">
            <interfaceMoniker
              Id="b08e92cd-a941-43ee-937d-23a282f23ead"
              LastKnownName="ID"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </interfaceRealization>
        </suppliersInternal>
        <ownedOperationsInternal>
          <operation
            Id="3ec16350-46d6-4176-8330-6995fb7b93f7"
            name="methodA"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="cd0f7c4d-1e6d-4c83-aed9-6144696f1820"
                  name="x"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="220a3521-e091-4221-bae9-3ef9018e845c"
                      LastKnownName="Integer"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="5c7e31f5-ae6d-4368-b520-f8f7c34a32cf"
            name="methodB"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="2fee6dc1-e3ed-486a-82eb-7b495b42b536"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
                      LastKnownName="Boolean"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <Interface
        Id="a2db1328-593c-4a30-99a8-2ca0622e4af4"
        name="Player"
        isAbstract="false"
        isLeaf="false">
        <ownedOperations>
          <operation
            Id="0575e0bd-9dea-4a29-9052-c116901960b0"
            name="wantsCard"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="47575cb2-711c-440f-9705-dec8fee0180a"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
                      LastKnownName="Boolean"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="efb7b42f-e76b-4cf9-bc48-2267eda5eb08"
                  name="c"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <undefinedTypeMoniker
                      Id="196a1fc8-5616-4cc3-8271-359ad455aa14"
                      LastKnownName="Card"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="61b9157b-6759-44f6-b000-e048728ac75e"
            name="getsCard"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperations>
      </Interface>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="9947bca5-3b88-4461-a390-46e67cf46a22"
        name="HumanPlayer"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <interfaceRealization
            Id="34fd3849-5a5e-4387-a4a1-4c35dab5e8f8">
            <interfaceMoniker
              Id="a2db1328-593c-4a30-99a8-2ca0622e4af4"
              LastKnownName="Player"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </interfaceRealization>
        </suppliersInternal>
        <ownedOperationsInternal>
          <operation
            Id="543200cb-66a6-4b36-8fa7-0ef6b3b8eb5c"
            name="wantsCard"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="724d134b-ab52-4fa1-9058-a9e095a5ff5b"
                  name="c"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <undefinedTypeMoniker
                      Id="196a1fc8-5616-4cc3-8271-359ad455aa14"
                      LastKnownName="Card"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="119c72e9-c2eb-442b-9854-ca866694f091"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
                      LastKnownName="Boolean"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="296dedd4-fa24-4963-b636-783dae4959b9"
            name="getsCard"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="ef70b5d3-77b5-41e3-bf5e-46b01fef5730"
        name="ComputerPlayer"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <interfaceRealization
            Id="82bbf895-5086-4c9c-9e6d-227044eaea91">
            <interfaceMoniker
              Id="a2db1328-593c-4a30-99a8-2ca0622e4af4"
              LastKnownName="Player"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </interfaceRealization>
        </suppliersInternal>
        <ownedOperationsInternal>
          <operation
            Id="66ed3efe-148a-4f62-bcdd-a177e3601df9"
            name="wantsCard"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="51274da3-ea80-4cc7-9dcc-7864afb12fd6"
                  name="c"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <undefinedTypeMoniker
                      Id="196a1fc8-5616-4cc3-8271-359ad455aa14"
                      LastKnownName="Card"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="e9ae1530-cff5-4ee9-985b-22a882dcc3d5"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
                      LastKnownName="Boolean"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="59e2e090-69d0-412a-8e0c-3125860f5300"
            name="getsCard"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <undefinedType
        Id="196a1fc8-5616-4cc3-8271-359ad455aa14"
        name="Card" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="3fea3612-2c8e-4e08-95ab-04d219385754"
        name="Dealer"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <dependency
            Id="c9dbdd7e-0333-4f47-a4e9-ea59edc2f926">
            <interfaceMoniker
              Id="a2db1328-593c-4a30-99a8-2ca0622e4af4"
              LastKnownName="Player"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </dependency>
        </suppliersInternal>
        <ownedAttributesInternal>
          <property
            Id="3a0f4428-8aa6-4221-ba78-17cda0f5c7bc"
            name="players"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="730f9dae-e3e5-4fe6-829a-a76dae83c098"
                LastKnownName="List&lt;Player&gt;"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="dd27f1e1-cdb8-43ef-80d9-9700794a72ba"
            name="playOneRound"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <undefinedType
        Id="730f9dae-e3e5-4fe6-829a-a76dae83c098"
        name="List&lt;Player&gt;" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <Interface
        Id="e3063aa1-cdf0-4083-9b1f-351ff7d7af37"
        name="Reader"
        isAbstract="false"
        isLeaf="false">
        <ownedOperations>
          <operation
            Id="660df508-f754-4319-99bd-507513bcb05d"
            name="readLine"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="64f945ee-cb7d-45d7-ac7c-3f6191eb2737"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperations>
      </Interface>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="8aba37f4-0c0f-4ecc-bf38-b6fd489a2499"
        name="File"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <interfaceRealization
            Id="4566ebb0-2b1c-49b7-a21a-3768b6973679">
            <interfaceMoniker
              Id="e3063aa1-cdf0-4083-9b1f-351ff7d7af37"
              LastKnownName="Reader"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </interfaceRealization>
          <interfaceRealization
            Id="5c86ebe0-c506-43fe-9ba0-ee4f64857566">
            <interfaceMoniker
              Id="339f1175-c790-4a65-8919-d63f78407101"
              LastKnownName="Writer"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </interfaceRealization>
        </suppliersInternal>
        <ownedAttributesInternal>
          <property
            Id="ce2f4b72-aeb9-4b37-b4d0-c7778ced8519"
            name="lines"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="5b2cb472-6bbc-425a-a5b2-591b22d9edff"
                LastKnownName="List&lt;String&gt;"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="b7fb8705-54c6-4e6e-b1db-2b5a029dd103"
            name="readLine"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="e07a9d7e-3915-4ca7-9d8c-709b4b736288"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="1f2b5030-d25d-4cd2-aef5-9609b072ca4b"
            name="writeLine"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="9ec7e64d-ed54-45d4-94f2-476c0b2820b7"
                  name="s"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="a88eec0d-d341-41ba-9da8-53b156054135"
            name="initRead"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
          <operation
            Id="d6b05022-48f4-4f61-a209-866cf613b045"
            name="initWrite"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <Interface
        Id="339f1175-c790-4a65-8919-d63f78407101"
        name="Writer"
        isAbstract="false"
        isLeaf="false">
        <ownedOperations>
          <operation
            Id="4ba95317-3cde-4c46-8062-72b006d38465"
            name="writeLine"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="ea80cf34-fb23-4ae7-b59a-acb0f15081dc"
                  name="s"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperations>
      </Interface>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="98410957-2b15-4918-9774-856a37b69535"
        name="FileController"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <targetEnds>
          <association
            Id="72204a08-f44c-48b3-b481-40fcb86c3bce"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName="myFile"
            isLeaf="false"
            isAbstract="false">
            <classMoniker
              Id="8aba37f4-0c0f-4ecc-bf38-b6fd489a2499"
              LastKnownName="File"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="6da71805-0794-4b57-adc2-1aeaae399ff2"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="b6b02ce8-e284-41d4-9ae7-a282faa43c84"
                  name="myFile"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
          <association
            Id="5bc83724-ffc2-45dc-a375-aa1c53f073f4"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName="stateOfFile"
            isLeaf="false"
            isAbstract="false">
            <enumerationMoniker
              Id="e1c94161-a7b8-4c9c-8dce-7a5301f01e47"
              LastKnownName="Mode"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="e7aa8a6b-68f0-40bd-8969-05aee744bcf4"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="93041fa7-cf22-4f55-8e74-6cab489246f7"
                  name="stateOfFile"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedOperationsInternal>
          <operation
            Id="3a944889-35d9-431e-8432-06bd877f8eae"
            name="openRead"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="f01e9d68-d483-4817-bbf7-e676894f630b"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <interfaceMoniker
                      Id="e3063aa1-cdf0-4083-9b1f-351ff7d7af37"
                      LastKnownName="Reader"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="ed0b6d10-ee39-4646-abe8-6999b00376bb"
            name="openWrite"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="bd1663e2-b4e8-4fbf-819f-35fb1de0a201"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <interfaceMoniker
                      Id="339f1175-c790-4a65-8919-d63f78407101"
                      LastKnownName="Writer"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="cec556cf-d85c-4e1c-be48-fb59df5485f8"
            name="close"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <undefinedType
        Id="5b2cb472-6bbc-425a-a5b2-591b22d9edff"
        name="List&lt;String&gt;" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <enumeration
        Id="e1c94161-a7b8-4c9c-8dce-7a5301f01e47"
        name="Mode"
        isAbstract="false"
        isLeaf="false">
        <ownedLiterals>
          <enumerationLiteral
            Id="e0933f12-ff93-451b-8f9a-50a2ab3f5864"
            name="available" />
          <enumerationLiteral
            Id="b87e74d0-b51d-4fcb-8987-40c32d195c63"
            name="reading" />
          <enumerationLiteral
            Id="21a9d477-9247-4874-b9bc-327d99d6b3f9"
            name="writing" />
        </ownedLiterals>
      </enumeration>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="baf0b96b-b389-4ada-bdec-5433a48a175c"
        name="ReaderThread"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <targetEnds>
          <association
            Id="da0f94bb-431f-4ca2-bea2-4d95ba22ed44"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName="fileToRead"
            isLeaf="false"
            isAbstract="false">
            <interfaceMoniker
              Id="e3063aa1-cdf0-4083-9b1f-351ff7d7af37"
              LastKnownName="Reader"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="6d188354-984c-414d-be1c-64ab4ec729d2"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="097a3936-40b0-4edb-b53d-2ec5cd950502"
                  name="fileToRead"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
          <association
            Id="65e57045-f526-4e23-9797-a83eb37e2ed6"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName="control"
            isLeaf="false"
            isAbstract="false">
            <classMoniker
              Id="98410957-2b15-4918-9774-856a37b69535"
              LastKnownName="FileController"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="c07d328b-0378-47ee-bf11-c022cbc33ac5"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="6eb1252e-7891-49f2-b44f-52c5d36ecc8b"
                  name="control"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="4645f50f-4053-4e69-88ee-6e8c5bcc11ac"
        name="WriterThread"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <targetEnds>
          <association
            Id="6c5ca57e-4663-4085-bcdf-5b3bbe4f43bf"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName="control"
            isLeaf="false"
            isAbstract="false">
            <classMoniker
              Id="98410957-2b15-4918-9774-856a37b69535"
              LastKnownName="FileController"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="d2895f94-0786-4e32-b5ad-17abb8c14848"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="c95d3a11-1ce9-4c6f-8c75-0e9d61a869e8"
                  name="control"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
          <association
            Id="34135e7e-d8a8-4641-8384-e4c564a8670c"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName="fileToWrite"
            isLeaf="false"
            isAbstract="false">
            <interfaceMoniker
              Id="339f1175-c790-4a65-8919-d63f78407101"
              LastKnownName="Writer"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="fe2721c3-4972-4007-8759-ae31f65c9e24"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="9e4a9363-bcb4-4e8b-a9e1-5ef81d2ce42b"
                  name="fileToWrite"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <Interface
        Id="21206630-d1a5-486e-afaa-5464d749022a"
        name="InputHandler"
        isAbstract="false"
        isLeaf="false">
        <ownedOperations>
          <operation
            Id="253e375f-485b-477b-bada-f5a117b7e927"
            name="handle"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperations>
      </Interface>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="440f3143-4930-4b1d-b0a8-fa06b2b12dd0"
        name="Model"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <ownedAttributesInternal>
          <property
            Id="59d8d503-c7f9-4de3-bd9e-9627d2b3e12a"
            name="mydata"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="4f22f2d9-ee80-4e6a-bb45-8cccc2f89235"
                LastKnownName="Data"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="fae1fefd-5c92-47dd-bef4-73b92471c1a7"
            name="update"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
          <operation
            Id="8d99f00c-7e4f-415d-8f59-5f471ab274e8"
            name="getData"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="ecae71df-5487-4d45-94f2-8e933e1d6e4f"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <undefinedType
        Id="4f22f2d9-ee80-4e6a-bb45-8cccc2f89235"
        name="Data" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="02f51121-e555-4f81-a872-074f55bd50f2"
        name="Controller"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <dependency
            Id="93565567-d8b5-4591-801b-4471a0f9b63a">
            <interfaceMoniker
              Id="21206630-d1a5-486e-afaa-5464d749022a"
              LastKnownName="InputHandler"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </dependency>
        </suppliersInternal>
        <targetEnds>
          <association
            Id="17203afc-0f2e-48dd-808a-87068683b0f2"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName="model"
            isLeaf="false"
            isAbstract="false">
            <classMoniker
              Id="440f3143-4930-4b1d-b0a8-fa06b2b12dd0"
              LastKnownName="Model"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="4001450d-c569-4bf2-9812-660d8aba5062"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="634fd875-d236-46d0-be4c-baa9f4b65f40"
                  name="model"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedOperationsInternal>
          <operation
            Id="6bfc0f62-9461-44a8-b66b-aa7141c308fc"
            name="handle"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="bf509f80-a7bc-4466-a769-df3f98b096e2"
        name="InputViewForm"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <targetEnds>
          <association
            Id="c5c6dee4-7201-4e31-929a-f3d6b682bd1c"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName="han"
            isLeaf="false"
            isAbstract="false">
            <interfaceMoniker
              Id="21206630-d1a5-486e-afaa-5464d749022a"
              LastKnownName="InputHandler"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="cbf2b9f0-7534-41eb-b940-0730aaca13ea"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="ca76a303-24a8-4d1f-aa49-27fcb4238b5d"
                  name="han"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedOperationsInternal>
          <operation
            Id="93a3d21f-29e4-487b-854e-031ea4d4a7c6"
            name="InputViewForm"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="8f36b460-5cce-450c-8326-6807bda7212d"
                  name="han"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <interfaceMoniker
                      Id="21206630-d1a5-486e-afaa-5464d749022a"
                      LastKnownName="InputHandler"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="88a0186b-f398-40d4-b278-35fa9389c250"
            name="onButton_Click"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="e0902e59-b443-436a-bb8b-189edc2843c9"
        name="Client"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <dependency
            Id="bf1685ce-d26d-4c4b-aace-12317a2272e6">
            <classMoniker
              Id="48851c21-f80b-42db-acd1-c8202d24e72e"
              LastKnownName="Helper"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </dependency>
        </suppliersInternal>
        <targetEnds>
          <association
            Id="eb0f7123-cb5c-4dd9-8582-379021bfaf2a"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName="mgr"
            isLeaf="false"
            isAbstract="false">
            <classMoniker
              Id="0f7c3d18-6f68-4173-b591-1f06868facaa"
              LastKnownName="Manager"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="5c0523e6-3243-4786-8e17-eacaaa668844"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="10d6c7a7-24a7-48c1-bb77-f763592c785a"
                  name="mgr"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedOperationsInternal>
          <operation
            Id="b28d4f4d-8ca2-4382-908c-5340b395da6b"
            name="work"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="0f7c3d18-6f68-4173-b591-1f06868facaa"
        name="Manager"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <targetEnds>
          <association
            Id="57f748d5-87c1-4c79-9a24-e85216135661"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName=""
            isLeaf="false"
            isAbstract="false">
            <classMoniker
              Id="48851c21-f80b-42db-acd1-c8202d24e72e"
              LastKnownName="Helper"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="42624df1-0993-4df8-a33e-28cfb2f196ac"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="Composite"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="c49a263a-75b1-4860-bdd0-d8078f8229ed"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="true">
                  <lowerValueInternal>
                    <literalString
                      Id="ae8ec6cd-3d66-4206-97d6-03452bb2ef35"
                      name="Lower"
                      value="*" />
                  </lowerValueInternal>
                  <upperValueInternal>
                    <literalString
                      Id="82c87b6b-7c87-4085-b964-caf89ae80952"
                      name="Upper"
                      value="*" />
                  </upperValueInternal>
                </memberEnd>
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedAttributesInternal>
          <property
            Id="9f7150b8-1ce4-4194-98a5-4623d554551a"
            name="active"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="d386387a-c597-48f6-bff6-40b674d1c301"
                LastKnownName="List&lt;Helper&gt;"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="7a04ca22-d426-4342-a0b4-329795dd7b31"
            name="requestHelp"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="2f5e0a49-882f-4b5f-984e-86b00bbe4586"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <classMoniker
                      Id="48851c21-f80b-42db-acd1-c8202d24e72e"
                      LastKnownName="Helper"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="69dab6f5-587a-48c9-beeb-2e84458e5edf"
            name="remove"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="215577e8-3a8a-4862-b9fc-409da21aa618"
                  name="h"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <classMoniker
                      Id="48851c21-f80b-42db-acd1-c8202d24e72e"
                      LastKnownName="Helper"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="48851c21-f80b-42db-acd1-c8202d24e72e"
        name="Helper"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <targetEnds>
          <association
            Id="c96c3d8b-4dbc-45db-9258-5740b7b4fb83"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName="- myManager"
            isLeaf="false"
            isAbstract="false">
            <classMoniker
              Id="0f7c3d18-6f68-4173-b591-1f06868facaa"
              LastKnownName="Manager"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="933e46cc-c57a-4424-902e-d961da7bfe6a"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="6f4b52ad-950d-46fd-9a9a-1d1276870d8f"
                  name="- myManager"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedOperationsInternal>
          <operation
            Id="4632fc05-dc83-4815-abfe-db0cbd302ab6"
            name="Helper"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="c1e965cf-ca40-4095-a737-574e367ea9f6"
                  name="myManager"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <classMoniker
                      Id="0f7c3d18-6f68-4173-b591-1f06868facaa"
                      LastKnownName="Manager"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="a4cf24ae-7ed5-41cd-ab1b-9f082f369132"
            name="doWork"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
          <operation
            Id="1fa0d831-46f8-4502-8e50-ceb62e5e8b43"
            name="finished"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <undefinedType
        Id="d386387a-c597-48f6-bff6-40b674d1c301"
        name="List&lt;Helper&gt;" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="1152ffd3-f647-4b63-b430-3017776575b7"
        name="Client"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <dependency
            Id="776d1015-e1aa-4fe5-9398-bddbcfbf3a9f">
            <classMoniker
              Id="efdf5266-4475-416f-8a0b-6a0d677935fb"
              LastKnownName="Helper"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </dependency>
        </suppliersInternal>
        <targetEnds>
          <association
            Id="5858e47c-e3dd-442a-b888-caaebcd5130d"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName="mgr"
            isLeaf="false"
            isAbstract="false">
            <classMoniker
              Id="c216822c-fd92-40a4-85b6-020574f8321c"
              LastKnownName="Manager"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="405a89ae-efd1-42b9-9e98-e69dd5cf74c5"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="ef73bfbb-b0a6-4977-a574-dfd524da5e6e"
                  name="mgr"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedOperationsInternal>
          <operation
            Id="f4de2816-5fc5-4c20-95ff-bef1a03f4629"
            name="work"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="c216822c-fd92-40a4-85b6-020574f8321c"
        name="Manager"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <dependency
            Id="b6cb772f-8e9c-41df-95fc-da3f79d305cf">
            <interfaceMoniker
              Id="62c58a10-c78d-4435-87d3-d39c387e0c09"
              LastKnownName="RemoveMethod"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </dependency>
        </suppliersInternal>
        <targetEnds>
          <association
            Id="cfd1eaa0-0d3f-46f7-96e3-30975a7510f8"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName=""
            isLeaf="false"
            isAbstract="false">
            <classMoniker
              Id="efdf5266-4475-416f-8a0b-6a0d677935fb"
              LastKnownName="Helper"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="4f66b169-22a4-459d-8c90-91dde0874292"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="Composite"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="8a5e0b7c-d0ae-4adc-9da6-54392e9fab6a"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="true">
                  <lowerValueInternal>
                    <literalString
                      Id="5e6ed3ae-6a29-494b-88b0-e2b813cb3d54"
                      name="Lower"
                      value="*" />
                  </lowerValueInternal>
                  <upperValueInternal>
                    <literalString
                      Id="128e282c-a78d-4365-ba02-75bff0241919"
                      name="Upper"
                      value="*" />
                  </upperValueInternal>
                </memberEnd>
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedAttributesInternal>
          <property
            Id="823590e4-5b48-40f7-bbec-2e4f70d7ac50"
            name="active"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="d386387a-c597-48f6-bff6-40b674d1c301"
                LastKnownName="List&lt;Helper&gt;"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="a057329a-d089-4513-95fa-811404705220"
            name="requestHelp"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="f807d187-66d1-4197-84a5-1382b97e75a1"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <classMoniker
                      Id="48851c21-f80b-42db-acd1-c8202d24e72e"
                      LastKnownName="Helper"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="c0b3d9e3-0026-43c9-a7d6-3bad75b76840"
            name="remove"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="f2393b70-1b52-43c1-b83e-587eee2907e2"
                  name="h"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <classMoniker
                      Id="48851c21-f80b-42db-acd1-c8202d24e72e"
                      LastKnownName="Helper"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="efdf5266-4475-416f-8a0b-6a0d677935fb"
        name="Helper"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <targetEnds>
          <association
            Id="8d3f2c61-d1fa-4c6a-92c2-4209503c7806"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName=""
            isLeaf="false"
            isAbstract="false">
            <interfaceMoniker
              Id="62c58a10-c78d-4435-87d3-d39c387e0c09"
              LastKnownName="RemoveMethod"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="e3a7db4a-ce99-4a13-9ba1-99ea7a53094a"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="09723f6a-632e-4249-8856-0b12e07a3122"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedAttributesInternal>
          <property
            Id="2fb363a2-b1a3-4623-a585-8fea57a72658"
            name="done"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <interfaceMoniker
                Id="62c58a10-c78d-4435-87d3-d39c387e0c09"
                LastKnownName="RemoveMethod"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="43cb736d-4683-4e40-bbe1-0165599394a2"
            name="Helper"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="d64ae8eb-4835-4f2f-9945-f0f0e0b9af3c"
                  name="done"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <interfaceMoniker
                      Id="62c58a10-c78d-4435-87d3-d39c387e0c09"
                      LastKnownName="RemoveMethod"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="e351ed86-2c18-454b-9956-c139ae385fdf"
            name="doWork"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
          <operation
            Id="f20263b7-08d1-4ec2-8ae1-95d1c07ca0c9"
            name="finished"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <Interface
        Id="62c58a10-c78d-4435-87d3-d39c387e0c09"
        name="RemoveMethod"
        isAbstract="false"
        isLeaf="false">
        <ownedOperations>
          <operation
            Id="70723b97-44b6-460a-8f6a-33372d14122e"
            name="remove"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="131f47ab-530b-49a6-9a99-46c7781f4439"
                  name="h"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <classMoniker
                      Id="48851c21-f80b-42db-acd1-c8202d24e72e"
                      LastKnownName="Helper"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperations>
      </Interface>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <undefinedType
        Id="a3edb76f-1193-4014-94c1-210d0014ace6"
        name="ListBox" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <undefinedType
        Id="fd0a523a-fb0c-4e50-a73c-f115ef12ea7d"
        name="TextBox" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <undefinedType
        Id="a673af91-26ac-4bd5-a376-e8161b4e4144"
        name="WebSocket" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <undefinedType
        Id="c33419c5-7086-4645-9a3e-4bfa8de9cbed"
        name="Message event" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="b7d88113-d4c0-4269-ad33-b964a687d241"
        name="ChatForm"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <dependency
            Id="deaf26fb-9c2e-4895-ae1e-d6d6c8c16c36">
            <interfaceMoniker
              Id="692bc672-354c-4b63-912f-84b2f05649e3"
              LastKnownName="Message"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </dependency>
        </suppliersInternal>
        <ownedAttributesInternal>
          <property
            Id="d4a45cd8-ba2b-4030-91ed-eae5172a9b02"
            name="messageListBox"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="a3edb76f-1193-4014-94c1-210d0014ace6"
                LastKnownName="ListBox"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
          <property
            Id="523831fb-9dec-495d-87af-4b1d846300ca"
            name="messageLabel"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="9ebaf752-612c-4f32-be48-0b9725034ba3"
                LastKnownName="Label"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
          <property
            Id="eb0a41d5-ba33-454f-a13b-5641925bf54a"
            name="messageTextBox"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="fd0a523a-fb0c-4e50-a73c-f115ef12ea7d"
                LastKnownName="TextBox"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="d4516aeb-4cca-4efd-b092-5f46ce781085"
            name="MessageReceived"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="aa1bc3db-b0b6-4ec0-a99c-6a57845c3df8"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
                      LastKnownName="Boolean"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="97c2481b-57e1-4f12-8826-ea2809b32481"
                  name="message"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="952088bf-a431-41e5-8b75-5c312dfb79c0"
            name="ChatForm"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="d21c00a6-9e18-4b7c-82bb-4a7c7545c5f3"
                  name="name"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="b4cf9932-b24a-43b6-aa96-d667e1b44668"
                  name="Message newMessageHandler"
                  direction="In"
                  isUnique="false" />
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <Interface
        Id="692bc672-354c-4b63-912f-84b2f05649e3"
        name="Message"
        isAbstract="false"
        isLeaf="false">
        <ownedOperations>
          <operation
            Id="439837e3-c01f-4265-b6d1-7a50f0812fc0"
            name="message"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="700836df-ce17-4fc8-86bd-a773853f04a8"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
                      LastKnownName="Boolean"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="76574c27-34db-41d9-af6c-f89f0a67b3dc"
                  name="message"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperations>
      </Interface>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="b0889375-a6fd-435e-a9b3-e5da26fd4fad"
        name="ChatController"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <targetEnds>
          <association
            Id="cb6fce2b-1ef5-4b81-a2cb-e42cdf3d61df"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName=""
            isLeaf="false"
            isAbstract="false">
            <interfaceMoniker
              Id="692bc672-354c-4b63-912f-84b2f05649e3"
              LastKnownName="Message"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="2a1bdffe-9b6a-4c72-87ea-7dc3049e9fbd"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="7069821a-bbff-4799-a3d9-cb261289474c"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedAttributesInternal>
          <property
            Id="bae96db2-ae23-4f9f-904c-468b8db23752"
            name="name"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <primitiveTypeMoniker
                Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                LastKnownName="String"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
          <property
            Id="eccab5fa-5a8d-4865-b21e-ea61f5b49e50"
            name="ws"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="a673af91-26ac-4bd5-a376-e8161b4e4144"
                LastKnownName="WebSocket"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
          <property
            Id="cda5ab7f-6031-4a58-aa7c-2bdc44276c17"
            name="MessageReceived"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="c33419c5-7086-4645-9a3e-4bfa8de9cbed"
                LastKnownName="Message event"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="5fbc9ea2-7965-42ff-9395-172155e82d6b"
            name="ChatController"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="d2c632a5-7abe-4399-9454-6130b897434a"
                  name="name"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="368913f3-d253-4940-8e7c-be60f7319550"
            name="MessageEntered"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="76e00285-80e0-4be1-a819-2ba3affda220"
                  name="message"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="c6c48acb-13c1-4a74-9026-2268a4ca0b87"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
                      LastKnownName="Boolean"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="9e187ff4-6979-4466-a769-d5bff1d657df"
            name="ChatController"
            visibility="Package"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <undefinedType
        Id="3ecff043-146c-4f9d-aaf4-ee143c1c1473"
        name="EventHandler&lt;MessageEventArgs&gt; event" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="ea761b6b-e31a-4a73-bdaf-adf6affd1132"
        name="ChatController"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <targetEnds>
          <association
            Id="1145971b-3429-4492-b079-10b5e73b7532"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName=""
            isLeaf="false"
            isAbstract="false">
            <classMoniker
              Id="43040be2-8a49-4d99-8602-fdb4836d3f9f"
              LastKnownName="WebSocket"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="83735133-a908-44d9-82e9-ffbff84fe665"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="b1225abc-8487-45ef-8399-d3953ed0de94"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedAttributesInternal>
          <property
            Id="73d41e9d-e67f-4ac0-9c16-e82edf923097"
            name="name"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <primitiveTypeMoniker
                Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                LastKnownName="String"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
          <property
            Id="c1a73560-8c48-4ff2-9ae9-cb51b9039dbf"
            name="ws"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="a673af91-26ac-4bd5-a376-e8161b4e4144"
                LastKnownName="WebSocket"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
          <property
            Id="7b093bc9-2d36-436d-9a73-53b59fdf45dd"
            name="MessageReceived"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="c33419c5-7086-4645-9a3e-4bfa8de9cbed"
                LastKnownName="Message event"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="353a0b17-39c0-4123-b95d-6e3dec146938"
            name="ChatController"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="02c53911-a593-46e8-a451-0138b7911697"
                  name="name"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="62c793ad-fc3d-4cf3-88a1-928444832ca3"
            name="MessageEntered"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="e9388f1c-317a-488d-b8a0-cc3fd07607ef"
                  name="message"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="6be770b9-ea73-446f-958b-7847d2b63fa0"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
                      LastKnownName="Boolean"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="932517b8-12ad-4778-ac6e-4197f3901daf"
            name="ChatController"
            visibility="Package"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="43040be2-8a49-4d99-8602-fdb4836d3f9f"
        name="WebSocket"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <ownedAttributesInternal>
          <property
            Id="629e7e15-0b42-43c8-bcd5-213c2d9905a5"
            name="OnMessage"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="3ecff043-146c-4f9d-aaf4-ee143c1c1473"
                LastKnownName="EventHandler&lt;MessageEventArgs&gt; event"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
          <property
            Id="e6da802c-aee4-4314-8d05-8935ec5fc90d"
            name="IsAlive"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <primitiveTypeMoniker
                Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
                LastKnownName="Boolean"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="6e7b9a8c-a640-4959-ad14-d9eb87d0f901"
            name="WebSocket"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="73010c04-27be-4166-bd33-ed9c17370cf6"
                  name="uri"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="81205366-0e53-4044-9106-681256ba9d7c"
            name="Connect"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
          <operation
            Id="9266ed7b-38aa-4ff6-a856-b87b4cc2b602"
            name="Send"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="5db18c5f-3f72-4acd-9eee-ed37028038f0"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="ba08c865-3f16-4588-b1c7-dc6a3f3aafab"
            name="Close"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <undefinedType
        Id="85bc0299-cfd6-4b17-9030-654f40ab169c"
        name="Websocket-Client-Chat-Model::IWebSocket" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <undefinedType
        Id="6e7e7d33-92e3-4544-b6d1-69cb67f829fa"
        name="EventHandler&lt;String&gt;" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <undefinedType
        Id="dc742ea4-7532-44e3-9dad-dd039578741d"
        name="Websocket-Client-Chat-Model::WebSocket" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="0c28e6b7-90f9-4f3d-85e9-d71302673acd"
        name="ChatController"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <targetEnds>
          <association
            Id="f5ddf58c-cf9a-4f92-8246-e3a0b5e62008"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName=""
            isLeaf="false"
            isAbstract="false">
            <interfaceMoniker
              Id="8648dcfd-f46a-41e0-94e7-26c329d923eb"
              LastKnownName="IWebSocket"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="4af9454c-8bed-4ae1-bb14-852a2269a7ef"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="ee31d1c6-59f6-4cbc-b952-1e775725cd17"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedAttributesInternal>
          <property
            Id="ad79d2ac-e2c1-4516-91f3-d8effdc15b40"
            name="name"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <primitiveTypeMoniker
                Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                LastKnownName="String"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
          <property
            Id="92dbba67-44a2-40ec-bfe3-845d2eb5af10"
            name="ws"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <interfaceMoniker
                Id="8648dcfd-f46a-41e0-94e7-26c329d923eb"
                LastKnownName="IWebSocket"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="7f1999b0-53fa-4c6b-b18d-405bbb0a20c7"
            name="ChatController"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="ebf26293-bb56-4b04-af80-c4a011f03cd0"
                  name="name"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="b97b6992-b074-4b02-89f0-bed394ab2052"
                  name="ws"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <interfaceMoniker
                      Id="8648dcfd-f46a-41e0-94e7-26c329d923eb"
                      LastKnownName="IWebSocket"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="9c585ee8-764a-47f1-96cc-74b84fbc2a56"
            name="MessageEntered"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="1f34c908-6a49-4202-b104-3b1339f3f47b"
                  name="message"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="f984fe91-0cd7-40cd-9f72-24d3acc20618"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
                      LastKnownName="Boolean"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="b0665395-caac-4bc8-b4ec-c7f7a438b84a"
            name="AddMessageReceivedHandler"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="55358afc-90b2-49d8-82a0-7a53e492df74"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <interfaceMoniker
                      Id="692bc672-354c-4b63-912f-84b2f05649e3"
                      LastKnownName="Message"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="d33bc9f4-c5bc-4eec-9e38-24a84d73eac0"
        name="WebSocket"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <ownedAttributesInternal>
          <property
            Id="dbb51d94-b013-46dd-9a71-5a674c1c0e6a"
            name="OnMessage"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="3ecff043-146c-4f9d-aaf4-ee143c1c1473"
                LastKnownName="EventHandler&lt;MessageEventArgs&gt; event"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
          <property
            Id="0628d0c2-81b3-41fa-93bd-cfc054ddc3e8"
            name="IsAlive"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <primitiveTypeMoniker
                Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
                LastKnownName="Boolean"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="b84200a9-a160-43ad-abb5-76dc09185326"
            name="WebSocket"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="ae08479b-dd40-4996-a3ea-3ecdf0cca354"
                  name="uri"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="d131213a-e411-4ed0-a92a-492cf7763462"
            name="Connect"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
          <operation
            Id="8d0eb3b5-71d7-4aaf-8b9a-21ec10fdf772"
            name="Send"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="f9d6b1a9-c3c7-4dd3-9930-751b8dc523c6"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="ca1aa43f-076a-4556-911b-2c8c9da6bc0b"
            name="Close"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <Interface
        Id="8648dcfd-f46a-41e0-94e7-26c329d923eb"
        name="IWebSocket"
        isAbstract="false"
        isLeaf="false">
        <ownedAttributes>
          <property
            Id="6d65b2e0-216b-4546-891a-3903ce86f93e"
            name="MessageReceived"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="c33419c5-7086-4645-9a3e-4bfa8de9cbed"
                LastKnownName="Message event"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributes>
        <ownedOperations>
          <operation
            Id="2eb2b6d7-f074-4052-97b1-a9307e200296"
            name="Transmit"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="30f56c94-6225-47be-a214-4d179d10f4c8"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="488186c9-b494-4824-8900-e53b5937982a"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
                      LastKnownName="Boolean"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperations>
      </Interface>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="8420accf-fb0e-4294-b6d7-ee08bf258e0b"
        name="WebSocketSharp"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <interfaceRealization
            Id="8eea8b23-7cae-4efd-88da-a657115291b6">
            <interfaceMoniker
              Id="8648dcfd-f46a-41e0-94e7-26c329d923eb"
              LastKnownName="IWebSocket"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </interfaceRealization>
        </suppliersInternal>
        <targetEnds>
          <association
            Id="5372a69a-2427-4c83-8d6d-e2430f28e4db"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName=""
            isLeaf="false"
            isAbstract="false">
            <classMoniker
              Id="d33bc9f4-c5bc-4eec-9e38-24a84d73eac0"
              LastKnownName="WebSocket"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="e6e69662-99a8-4ffe-83ff-1b09ad61a270"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="1a4aa28d-6a53-4d6c-826d-be304d63f4b6"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedAttributesInternal>
          <property
            Id="4fb475f0-f8b8-4e71-a613-779e1ada8f99"
            name="ws"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <classMoniker
                Id="43040be2-8a49-4d99-8602-fdb4836d3f9f"
                LastKnownName="WebSocket"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
          <property
            Id="3fb86674-9e7c-4199-bfc1-46cdf57d6ded"
            name="MessageReceived"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="c33419c5-7086-4645-9a3e-4bfa8de9cbed"
                LastKnownName="Message event"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="459a2d79-d95a-4e89-a50b-0dd838387989"
            name="Transmit"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="f8eccfe6-c592-4ab4-a162-01243e9eba17"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="f3409bc2-965c-4842-aedb-0102fa5133f2"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
                      LastKnownName="Boolean"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="24f8979f-3ff9-4ab8-b943-f0b2a12ca961"
            name="WebSocketSharp"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="27f1ae00-ca78-4145-b218-7e2d521d1020"
                  name="uri"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="4e1728ae-0a5e-498a-af34-ef23a94425d5"
            name="WebSocketSharp"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
          <operation
            Id="b75815d3-735c-4ea8-a460-ea5aca80716c"
            name="WebSocketSharp"
            visibility="Package"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <undefinedType
        Id="0c486401-5c83-4b99-b0ab-46a7a603522a"
        name="List&lt;EventHandler&lt;String&gt;&gt;" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="f7603384-e3c2-483b-94a6-a7b09089c8e4"
        name="MockWebSocket"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <interfaceRealization
            Id="8534f39d-3c45-4363-aba7-61be7138d2fc">
            <interfaceMoniker
              Id="28e96707-2108-47f0-9ab1-a88d1441c20a"
              LastKnownName="IWebSocket"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </interfaceRealization>
        </suppliersInternal>
        <ownedAttributesInternal>
          <property
            Id="a988b745-2f03-4e00-a9b4-bc9262676d06"
            name="MessageReceived"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="c33419c5-7086-4645-9a3e-4bfa8de9cbed"
                LastKnownName="Message event"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="a929c6f5-0733-42a0-858d-3aa78cfa1a46"
            name="Transmit"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="0a858e6e-9f12-4789-9e84-9f2f2b63c780"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="ae77ade1-8c57-48b9-a5ea-562efe5941a8"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
                      LastKnownName="Boolean"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <undefinedType
        Id="23615e54-f112-4b9a-b292-dc9a9bafcc26"
        name="String[]" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <undefinedType
        Id="83a5cc6c-8514-4681-b971-93a7cce621e5"
        name="server::WebSocketSessionManager" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <undefinedType
        Id="93550a7c-e2b0-45a6-9b06-a1ede20e62b8"
        name="MessageEventArgs" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="952d3f9a-1f30-45b3-aec9-4d92b491561d"
        name="Program"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <dependency
            Id="51ef041e-17c0-4502-9a2d-168ecb20d2d5">
            <classMoniker
              Id="386f3271-e402-462a-b501-42ba69f40f55"
              LastKnownName="Chat"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </dependency>
        </suppliersInternal>
        <ownedOperationsInternal>
          <operation
            Id="e55c442d-4c1c-4fdf-a159-2454f86bec51"
            name="main"
            isLeaf="false"
            isStatic="true"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="bdd7483d-6107-4bc9-ac92-8201833a3bf4"
                  name="args"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <undefinedTypeMoniker
                      Id="23615e54-f112-4b9a-b292-dc9a9bafcc26"
                      LastKnownName="String[]"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="dd913d8d-7f90-42b9-8e4d-df88395a5435"
        name="WebSocketBehavior"
        isAbstract="true"
        isLeaf="false"
        isActiveClass="false">
        <targetEnds>
          <association
            Id="44d8e9ae-6e56-4cc9-8d24-7b8a73a6c223"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName=""
            isLeaf="false"
            isAbstract="false">
            <classMoniker
              Id="15c502e2-d42d-433e-814d-617f312cccc4"
              LastKnownName="WebSocketSessionManager"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="e8621373-09fe-4f84-a4f3-45b2f54a8375"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="ab6a6980-c858-4c14-acde-8715ae9bea20"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedAttributesInternal>
          <property
            Id="8d43b714-7fc0-4206-8a5e-c79e69852482"
            name="Sessions"
            visibility="Protected"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <classMoniker
                Id="15c502e2-d42d-433e-814d-617f312cccc4"
                LastKnownName="WebSocketSessionManager"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="9a443866-cdf0-41e7-9267-8b54ada828bc"
            name="OnOpen"
            visibility="Protected"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
          <operation
            Id="6e36dd73-cbfa-4ba0-b1b9-e42a89413ec5"
            name="OnMessage"
            visibility="Protected"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="a787f94b-9dc5-4fdf-bd61-8181cd4513b2"
                  name="e"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <undefinedTypeMoniker
                      Id="93550a7c-e2b0-45a6-9b06-a1ede20e62b8"
                      LastKnownName="MessageEventArgs"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="dca71bb1-fcbc-4269-bcf2-2f0a8c699a43"
            name="Send"
            visibility="Protected"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="e554701c-12a1-4a6f-a2fb-20c1b7694137"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="386f3271-e402-462a-b501-42ba69f40f55"
        name="Chat"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <dependency
            Id="42376716-8635-4527-8aae-ca056d125490">
            <classMoniker
              Id="15c502e2-d42d-433e-814d-617f312cccc4"
              LastKnownName="WebSocketSessionManager"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </dependency>
        </suppliersInternal>
        <generalsInternal>
          <generalization
            Id="bbfdbb9f-5073-48c9-9f2f-d669e1476945"
            isSubstitutable="false">
            <classMoniker
              Id="dd913d8d-7f90-42b9-8e4d-df88395a5435"
              LastKnownName="WebSocketBehavior"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </generalization>
        </generalsInternal>
        <ownedAttributesInternal>
          <property
            Id="af916d96-73e8-4313-8e48-850c3edd8e14"
            name="messages"
            visibility="Private"
            isLeaf="false"
            isStatic="true"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="b0f10a4f-e2bd-46db-85a3-43f5a89350f0"
                LastKnownName="List&lt;string&gt;"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="45d090e1-e14f-4d81-a31f-2c17ac394f65"
            name="OnMessage"
            visibility="Protected"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="160364c4-f148-41c2-972b-d5f6ae87e2e2"
                  name="e"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <undefinedTypeMoniker
                      Id="93550a7c-e2b0-45a6-9b06-a1ede20e62b8"
                      LastKnownName="MessageEventArgs"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="52b8bdb6-6ba9-4232-8fc6-9e5b48f45fdc"
            name="OnOpen"
            visibility="Protected"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="15c502e2-d42d-433e-814d-617f312cccc4"
        name="WebSocketSessionManager"
        isAbstract="true"
        isLeaf="false"
        isActiveClass="false">
        <ownedOperationsInternal>
          <operation
            Id="ca5c91f4-b92f-4ca5-a34d-27838134d8c9"
            name="Broadcast"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="9ba23a6c-eb5a-4a13-b7a2-f51c07371c06"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <undefinedType
        Id="24d651c7-fcab-44c7-a276-8d94072634f3"
        name="server::ChatBehavior" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <undefinedType
        Id="e51e0d07-6e6d-4539-9f43-a9b621b9434f"
        name="server::IWebSocketBehavior" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <undefinedType
        Id="03db2ccc-cfa2-4ebd-9f72-ae7615fdc7c9"
        name="server::WebSocketBehavior" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="372fc5f7-4b2d-4b03-bcfd-86ab70e36f01"
        name="Program"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <dependency
            Id="c77d9c27-1362-49d6-83ab-5fff4d75badf">
            <classMoniker
              Id="bc570245-d816-4fc5-a3ee-764c6a24abfd"
              LastKnownName="Chat"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </dependency>
        </suppliersInternal>
        <ownedOperationsInternal>
          <operation
            Id="29410896-52f4-4bb2-92a1-017908af6626"
            name="main"
            isLeaf="false"
            isStatic="true"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="df49eb43-256b-4f29-8110-e56e6086d8b2"
                  name="args"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <undefinedTypeMoniker
                      Id="23615e54-f112-4b9a-b292-dc9a9bafcc26"
                      LastKnownName="String[]"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="675e30a7-3e04-48a7-b3f5-1f48f8146564"
        name="WebSocketBehavior"
        isAbstract="true"
        isLeaf="false"
        isActiveClass="false">
        <targetEnds>
          <association
            Id="6109a695-66ba-41e0-87bc-45c3624133df"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName=""
            isLeaf="false"
            isAbstract="false">
            <classMoniker
              Id="2769928e-bbdc-4995-840e-66b73519fc57"
              LastKnownName="WebSocketSessionManager"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="2cbfabc6-b76d-4ea7-998f-70cc07a63caa"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="44228f29-2048-469e-bb42-c68f6ab693ed"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedAttributesInternal>
          <property
            Id="35a2c028-1794-4eb8-8d39-5812e44348b9"
            name="Sessions"
            visibility="Protected"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="83a5cc6c-8514-4681-b971-93a7cce621e5"
                LastKnownName="server::WebSocketSessionManager"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="7735c9dc-5cd2-4396-8edd-c2eb44545abb"
            name="OnOpen"
            visibility="Protected"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
          <operation
            Id="4463d350-abdf-42c9-b00a-c84a1d1a57c2"
            name="OnMessage"
            visibility="Protected"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="426243d7-2713-4876-99e1-c446b03c2a08"
                  name="e"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <undefinedTypeMoniker
                      Id="93550a7c-e2b0-45a6-9b06-a1ede20e62b8"
                      LastKnownName="MessageEventArgs"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="6b192a20-902b-4a10-b9b1-edf0f7ad7882"
            name="Send"
            visibility="Protected"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="91c0e9c6-68d7-4cf7-b5b0-3c0c0f5b101f"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="bc570245-d816-4fc5-a3ee-764c6a24abfd"
        name="Chat"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <generalsInternal>
          <generalization
            Id="fabb9c44-ed3f-4dce-b108-134ffdd20a3e"
            isSubstitutable="false">
            <classMoniker
              Id="675e30a7-3e04-48a7-b3f5-1f48f8146564"
              LastKnownName="WebSocketBehavior"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </generalization>
        </generalsInternal>
        <targetEnds>
          <association
            Id="29bea23a-1be5-472d-a261-2ad6f2fa54fa"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName=""
            isLeaf="false"
            isAbstract="false">
            <classMoniker
              Id="524e1fd3-ab1d-4645-8eab-65bd2168527d"
              LastKnownName="ChatBehavior"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="d629c00c-9e70-44c2-a93e-98705c5fe3e0"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="22bbbeaf-bcfc-4c63-8e8f-5c13eb16e632"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
          <association
            Id="a12fbe0c-5e9d-4679-aedc-0294e2ce1c45"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName=""
            isLeaf="false"
            isAbstract="false">
            <classMoniker
              Id="54fca2b3-15f6-4541-bccb-6fbc9f70dbe9"
              LastKnownName="Chat.WebSocketBehaviorSharp"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="c121580a-ecf9-4562-87e4-f139e47f2b5c"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="d4cdb43c-a893-4a0f-aabd-daec1bcc22d1"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedAttributesInternal>
          <property
            Id="3934488c-0352-4542-8882-09618f613a94"
            name="cb"
            visibility="Private"
            isLeaf="false"
            isStatic="true"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <classMoniker
                Id="524e1fd3-ab1d-4645-8eab-65bd2168527d"
                LastKnownName="ChatBehavior"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
          <property
            Id="471d920c-00b4-4821-83b2-b7404f823fae"
            name="wsbs"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <classMoniker
                Id="54fca2b3-15f6-4541-bccb-6fbc9f70dbe9"
                LastKnownName="Chat.WebSocketBehaviorSharp"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="0b62da0d-dea8-4177-9f5a-6ac832ba3c3e"
            name="OnMessage"
            visibility="Protected"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="2ea1e79d-d379-4b54-84bc-fbad1869ad71"
                  name="e"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <undefinedTypeMoniker
                      Id="93550a7c-e2b0-45a6-9b06-a1ede20e62b8"
                      LastKnownName="MessageEventArgs"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="fe0ef5be-ec0a-49da-9783-dd1be66d23d0"
            name="OnOpen"
            visibility="Protected"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
          <operation
            Id="72d3cb27-6f1d-4280-821e-ea488936d422"
            name="Chat"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="2769928e-bbdc-4995-840e-66b73519fc57"
        name="WebSocketSessionManager"
        isAbstract="true"
        isLeaf="false"
        isActiveClass="false">
        <ownedOperationsInternal>
          <operation
            Id="f7f9c090-2700-4d1a-b778-0fc52a8503ac"
            name="Broadcast"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="a1840646-1114-45a7-9b20-5e4915be47bb"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <Interface
        Id="dd936dd3-079a-4bf3-911e-f7ae078a40fb"
        name="IWebSocketBehavior"
        isAbstract="false"
        isLeaf="false">
        <ownedOperations>
          <operation
            Id="0b63dc41-2d79-4a59-a787-019e2d4fc131"
            name="Send"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="794f9da3-22e1-46e4-9502-2dffec145585"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="c35785d8-41a3-4fb2-83b0-48eb3c7e2ebc"
            name="Broadcast"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="3e8f6b29-ae3d-4d95-b9af-72bc651e5772"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperations>
      </Interface>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="524e1fd3-ab1d-4645-8eab-65bd2168527d"
        name="ChatBehavior"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <dependency
            Id="59627313-b41b-42e7-9212-675553302aca">
            <interfaceMoniker
              Id="dd936dd3-079a-4bf3-911e-f7ae078a40fb"
              LastKnownName="IWebSocketBehavior"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </dependency>
        </suppliersInternal>
        <ownedAttributesInternal>
          <property
            Id="c05cea98-0f9c-45d9-8d41-a82f9db14fdc"
            name="messages"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="b0f10a4f-e2bd-46db-85a3-43f5a89350f0"
                LastKnownName="List&lt;string&gt;"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="baa3b668-592d-4a1b-877a-1020ab4027b0"
            name="ProcessMessage"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="5c5a90a9-6357-411d-bb52-4125a24e25d8"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="e22d9621-6839-4c13-8534-03d6938f1d02"
                  name="IWebSocketBehavior"
                  direction="In"
                  isUnique="false" />
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="0f147889-926f-4e7a-a3bf-5254339b6213"
            name="Open"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="826e76c7-cfd9-479a-8070-837f40f2467d"
                  name="wsb"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <interfaceMoniker
                      Id="dd936dd3-079a-4bf3-911e-f7ae078a40fb"
                      LastKnownName="IWebSocketBehavior"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="54fca2b3-15f6-4541-bccb-6fbc9f70dbe9"
        name="Chat.WebSocketBehaviorSharp"
        visibility="Private"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <interfaceRealization
            Id="6f077246-3ea2-495e-a600-c83696441b89">
            <interfaceMoniker
              Id="dd936dd3-079a-4bf3-911e-f7ae078a40fb"
              LastKnownName="IWebSocketBehavior"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </interfaceRealization>
          <dependency
            Id="9ccee9d3-2ce7-4461-9b67-4bd48764c0de">
            <classMoniker
              Id="2769928e-bbdc-4995-840e-66b73519fc57"
              LastKnownName="WebSocketSessionManager"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </dependency>
        </suppliersInternal>
        <targetEnds>
          <association
            Id="a2a1fc37-4dfa-40dc-9a71-8fa85b17ab0f"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName=""
            isLeaf="false"
            isAbstract="false">
            <classMoniker
              Id="675e30a7-3e04-48a7-b3f5-1f48f8146564"
              LastKnownName="WebSocketBehavior"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="7a3ebd9c-dfe4-415a-8b99-a82d1601c80e"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="e0a14856-2fd6-4774-9c82-f2aef29d9994"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
          <association
            Id="2d89694b-9c33-4511-ae62-e811e9ac3bf3"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName=""
            isLeaf="false"
            isAbstract="false">
            <classMoniker
              Id="bc570245-d816-4fc5-a3ee-764c6a24abfd"
              LastKnownName="Chat"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="8ac15a54-c10d-4753-a139-8a248b2e263e"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="4c1b7430-1ed2-4ab1-8a14-439ebdbdc10e"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedAttributesInternal>
          <property
            Id="4bf85e87-8e84-41e1-85ea-67a86e447552"
            name="c"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <classMoniker
                Id="386f3271-e402-462a-b501-42ba69f40f55"
                LastKnownName="Chat"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="db29cca9-6533-45e4-9344-67557e5e8fe2"
            name="Send"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="5f5d1ceb-1974-4b67-9d62-388ba5a3630f"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="db9fee3c-b745-4ae4-ace2-ed66f69fca61"
            name="Broadcast"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="0666f7c5-e5bc-4b69-9c80-521d6dc8090c"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="ffdcee64-8fc5-40ea-bebf-589005409fbc"
            name="WebSocketBehavior"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="af68fdf7-a431-4993-b9fe-3b0b1fce98f3"
                  name="c"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <classMoniker
                      Id="386f3271-e402-462a-b501-42ba69f40f55"
                      LastKnownName="Chat"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="ecc15004-b6be-43d9-9c30-c9eb0222b6e3"
        name="MockWebSocketBehavior"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <interfaceRealization
            Id="0bbc1e1f-db9a-4cfc-a21d-7a7c3534d8db">
            <interfaceMoniker
              Id="de4fc43a-e505-413b-9d95-53e3519aaf84"
              LastKnownName="IWebSocketBehavior"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </interfaceRealization>
          <interfaceRealization
            Id="990e2654-cabb-415c-8fce-b40c259af469">
            <interfaceMoniker
              Id="8762e0f6-21fe-4dbb-a130-158b730f646c"
              LastKnownName="IWebSocketBehavior"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </interfaceRealization>
        </suppliersInternal>
        <ownedAttributesInternal>
          <property
            Id="5f728b20-faf6-4f8b-b215-6c5c9284f513"
            name="BroadcastedMessages"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="5b2cb472-6bbc-425a-a5b2-591b22d9edff"
                LastKnownName="List&lt;String&gt;"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
          <property
            Id="63f2de12-b1f8-4fc6-b07a-b87bf7bc8453"
            name="SentMessages"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="5b2cb472-6bbc-425a-a5b2-591b22d9edff"
                LastKnownName="List&lt;String&gt;"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="0614c264-2d28-416d-a203-1fc4691dc893"
            name="Send"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="46e872e9-a1a4-4c25-b42c-255a44fba627"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="5caf9b8b-f57f-4d57-9773-0c288ecabbb4"
            name="Broadcast"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="e460fb0f-595b-4665-b921-7baa1df85b85"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="c81eb416-162d-44c2-a158-b1804bb8a7b2"
        name="ChatBehavior"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <targetEnds>
          <association
            Id="42d844fb-4b71-4cd1-922d-66c2004f3bd0"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName=""
            isLeaf="false"
            isAbstract="false">
            <interfaceMoniker
              Id="de4fc43a-e505-413b-9d95-53e3519aaf84"
              LastKnownName="IWebSocketBehavior"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="38eaacd8-664b-4b4e-8f16-f1d4a0a10afd"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="05952e0d-a540-4ba0-bfa6-5476f045131d"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedAttributesInternal>
          <property
            Id="f8bece61-66fd-47e5-adc8-22f26827827d"
            name="wsb"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="e51e0d07-6e6d-4539-9f43-a9b621b9434f"
                LastKnownName="server::IWebSocketBehavior"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="30f1b669-2d53-4cfb-925a-5a8571bbeeb3"
            name="ChatBehavior"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="66cd3673-e393-4873-a619-58923cefd801"
                  name="wsb"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <undefinedTypeMoniker
                      Id="e51e0d07-6e6d-4539-9f43-a9b621b9434f"
                      LastKnownName="server::IWebSocketBehavior"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="8df888ba-62a5-49c0-94a4-1904843831c8"
            name="ProcessMessage"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="3f26785c-6ba5-4c9a-b779-b170f1f6e225"
                  name="wsb"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="97bfbb68-cc68-4e0f-add7-08043cd698f1"
            name="Open"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <Interface
        Id="de4fc43a-e505-413b-9d95-53e3519aaf84"
        name="IWebSocketBehavior"
        isAbstract="false"
        isLeaf="false">
        <ownedOperations>
          <operation
            Id="8b7b134e-e332-4240-9c8d-7debe6f6235d"
            name="Send"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="c75bddcd-7db0-4184-b023-b82d4f9cef79"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="ca9e09bf-bdb6-4c5e-8cd5-a52653557341"
            name="Broadcast"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="b6464f4d-eeaf-4c9e-b923-4bc8010aeb0b"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperations>
      </Interface>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="816b4162-86d0-42bb-ab23-7f0791ed51f4"
        name="MockWebSocket"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <interfaceRealization
            Id="fe53dd9b-a754-4377-936c-242e0687f363">
            <interfaceMoniker
              Id="b4596e21-a0c4-4d65-aa48-dd4445b6f42e"
              LastKnownName="IWebSocket"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </interfaceRealization>
          <interfaceRealization
            Id="ad060ebd-85f4-43f5-9f41-a8d3a96881fb">
            <interfaceMoniker
              Id="b27cd95b-e024-472e-a63f-297e9984f95e"
              LastKnownName="IWebSocketBehavior"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </interfaceRealization>
        </suppliersInternal>
        <ownedAttributesInternal>
          <property
            Id="427cae66-97d7-46ed-8a6e-a17da95433c6"
            name="cb"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="24d651c7-fcab-44c7-a276-8d94072634f3"
                LastKnownName="server::ChatBehavior"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
          <property
            Id="aab03a83-f084-4a7c-868a-52b495b91f52"
            name="MessageReceived"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="c33419c5-7086-4645-9a3e-4bfa8de9cbed"
                LastKnownName="Message event"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="d6995ea9-9551-485d-b90f-db495ce62ccb"
            name="Send"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="1b2eac55-98ae-490c-a810-c8f9fbc139f0"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="31cfc060-d779-4441-b612-e6af586fe077"
            name="Broadcast"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="5170b87a-1e67-4df6-b2b5-819f98023e48"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="78d7d18d-611d-4a1b-860c-b3d5bd64ff5b"
            name="Transmit"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="3638bc3e-2406-4a8a-a5bf-c161d5526d83"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="02695b92-f3dd-4ab0-8660-2e70251cb979"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
                      LastKnownName="Boolean"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="9cb3eab0-085b-4455-958e-8a5d5d886e03"
        name="Controller"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <targetEnds>
          <association
            Id="7844cbf8-507d-4616-bb2b-e081d23a538e"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName=""
            isLeaf="false"
            isAbstract="false">
            <interfaceMoniker
              Id="d5e14f8e-70e9-448b-a975-ba7fa5fb0c68"
              LastKnownName="GetData"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="25cc3081-60f8-4691-831f-f5f294d2618b"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="a7097a00-0ab6-40ee-9c38-e059ff1389a6"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedAttributesInternal>
          <property
            Id="50862d6f-a744-4f7d-b68d-5b2375f30794"
            name="gd"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <interfaceMoniker
                Id="d5e14f8e-70e9-448b-a975-ba7fa5fb0c68"
                LastKnownName="GetData"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="14bf9959-3939-461c-bdb4-2a620dbeffbc"
            name="Controller"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="57f47ba3-194c-495a-aa16-d86c29772851"
                  name="gd"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <interfaceMoniker
                      Id="d5e14f8e-70e9-448b-a975-ba7fa5fb0c68"
                      LastKnownName="GetData"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <Interface
        Id="d5e14f8e-70e9-448b-a975-ba7fa5fb0c68"
        name="GetData"
        isAbstract="false"
        isLeaf="false">
        <ownedOperations>
          <operation
            Id="dc434325-16bc-4c18-a9ff-023794bb3a6f"
            name="GetData"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="2b29809a-5986-4146-89ae-a1824c9f6eec"
                  name="key"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="a3fbc428-3182-4e32-b8df-f3b17207c646"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperations>
      </Interface>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="ec9f550c-be31-4726-b54e-b25aff51d78c"
        name="GetDataRPC"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <dependency
            Id="f7646994-5910-4aee-b7a5-047ede51167b">
            <interfaceMoniker
              Id="d5e14f8e-70e9-448b-a975-ba7fa5fb0c68"
              LastKnownName="GetData"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </dependency>
        </suppliersInternal>
        <ownedAttributesInternal>
          <property
            Id="80db1ae3-729b-4f9d-be03-b251005f7c07"
            name="ws"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <classMoniker
                Id="43040be2-8a49-4d99-8602-fdb4836d3f9f"
                LastKnownName="WebSocket"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="de1771d5-d32c-4456-8b6e-6291de54f6c0"
            name="GetData"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="b046d0da-bce8-457a-8d4d-b699a7b4bc0d"
                  name="key"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="e54a20e1-1506-4dce-ae1e-6bde56927724"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="35c8b0f0-bf9a-4f51-a1ab-6c5967347cf8"
        name="Server"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <dependency
            Id="25c7d387-fe4c-43ce-8133-e2761dc8c449">
            <classMoniker
              Id="bb006bb5-5de0-49cb-bb12-156816bf1f78"
              LastKnownName="DataService"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </dependency>
        </suppliersInternal>
        <ownedOperationsInternal>
          <operation
            Id="c3c02f59-5520-449b-b511-57739ec77fea"
            name="main"
            isLeaf="false"
            isStatic="true"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="0c2ffa21-ff4c-4c02-a699-ebd9fb311d66"
                  name="args"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <undefinedTypeMoniker
                      Id="23615e54-f112-4b9a-b292-dc9a9bafcc26"
                      LastKnownName="String[]"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="bb006bb5-5de0-49cb-bb12-156816bf1f78"
        name="DataService"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <generalsInternal>
          <generalization
            Id="53db6d5d-8d68-4b08-93ea-22d37f304817"
            isSubstitutable="false">
            <classMoniker
              Id="b8e76669-f6a1-47fe-9c2c-a2c5401d4095"
              LastKnownName="WebSocketBehavior"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </generalization>
        </generalsInternal>
        <ownedOperationsInternal>
          <operation
            Id="95fcb198-d6d6-444f-b6a4-5b2891fd08a9"
            name="GetData"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="fc8a9fed-ca2e-41b2-844c-fed58cbcbce1"
                  name="k"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="dfb2068f-1913-494f-b456-d38ae5fe6c71"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="b8e76669-f6a1-47fe-9c2c-a2c5401d4095"
        name="WebSocketBehavior"
        isAbstract="true"
        isLeaf="false"
        isActiveClass="false" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <undefinedType
        Id="ca961788-17fe-4422-8bcb-b6c17196488e"
        name="Message sent" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <Interface
        Id="28e96707-2108-47f0-9ab1-a88d1441c20a"
        name="IWebSocket"
        isAbstract="false"
        isLeaf="false">
        <ownedAttributes>
          <property
            Id="2ce0f7bc-1431-4e6d-beb1-40d3a91c6397"
            name="MessageReceived"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="c33419c5-7086-4645-9a3e-4bfa8de9cbed"
                LastKnownName="Message event"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributes>
        <ownedOperations>
          <operation
            Id="f9cda65e-0f31-4197-811e-72a53188a941"
            name="Transmit"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="9cf38166-b02f-418d-a0d0-ca6b1483d187"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="1c973144-721c-4bad-a84c-74880dc971cc"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
                      LastKnownName="Boolean"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperations>
      </Interface>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="e38d47d2-9731-4cf4-a1e9-4043be60a214"
        name="ChatController"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <targetEnds>
          <association
            Id="0b68bf66-76b2-42ec-a24d-48457ac42d1c"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName=""
            isLeaf="false"
            isAbstract="false">
            <interfaceMoniker
              Id="28e96707-2108-47f0-9ab1-a88d1441c20a"
              LastKnownName="IWebSocket"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="e4d0dbbe-a89b-4b6e-b175-2131c2936307"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="9216e8a6-6b23-4fb1-a176-bff790f98af2"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedAttributesInternal>
          <property
            Id="5ae83721-cd70-48db-983e-1bb7aebb2404"
            name="name"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <primitiveTypeMoniker
                Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                LastKnownName="String"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
          <property
            Id="67423a74-e86b-4a0f-ac60-3841f361fe9a"
            name="ws"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <interfaceMoniker
                Id="8648dcfd-f46a-41e0-94e7-26c329d923eb"
                LastKnownName="IWebSocket"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="6dd39713-eee8-44e0-97c5-6119bf4b7bdd"
            name="ChatController"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="071f7656-2ad7-4a6f-8442-6fac05d18d80"
                  name="name"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="ae46f99b-49b0-4714-8cce-804c76dc9806"
                  name="ws"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <interfaceMoniker
                      Id="8648dcfd-f46a-41e0-94e7-26c329d923eb"
                      LastKnownName="IWebSocket"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="80cad49f-b4b5-497a-b6a0-67d9c8463772"
            name="MessageEntered"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="3e4124ed-40d7-4630-a0e1-eeb547301d3f"
                  name="message"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="6405cce0-bae5-46d9-acde-69e466a04846"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
                      LastKnownName="Boolean"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="60fd4c55-4dcc-4d81-aef4-153c93f3b852"
            name="AddMessageReceivedHandler"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="03a19e74-6f10-469e-9c23-9a2212fa616c"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <interfaceMoniker
                      Id="692bc672-354c-4b63-912f-84b2f05649e3"
                      LastKnownName="Message"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="48a3a6f8-915e-45ca-a12f-77005b25b99e"
        name="ChatController"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <targetEnds>
          <association
            Id="032e65b1-af76-4927-b8ce-0668abbf0264"
            isDerived="false"
            sourceEndRoleName=""
            targetEndRoleName=""
            isLeaf="false"
            isAbstract="false">
            <interfaceMoniker
              Id="b4596e21-a0c4-4d65-aa48-dd4445b6f42e"
              LastKnownName="IWebSocket"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
            <relationshipOwnedElementsInternal>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="848586af-0fc7-4ab7-a459-12aff17d2f0e"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false"
                  isNavigableOwned="false" />
              </associationHasOwnedEnds>
              <associationHasOwnedEnds>
                <memberEnd
                  Id="1eb5b02e-3800-47f9-b3c8-21410ca756a4"
                  isLeaf="false"
                  isStatic="false"
                  isReadOnly="false"
                  isDerived="false"
                  isDerivedUnion="false"
                  aggregation="None"
                  isComposite="false" />
              </associationHasOwnedEnds>
            </relationshipOwnedElementsInternal>
          </association>
        </targetEnds>
        <ownedAttributesInternal>
          <property
            Id="001d65ca-f0a2-4438-a205-2a57fc8669de"
            name="name"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <primitiveTypeMoniker
                Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                LastKnownName="String"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
          <property
            Id="b3a1c1bd-f3a8-4cf8-bf76-81d41ea88f16"
            name="ws"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <interfaceMoniker
                Id="8648dcfd-f46a-41e0-94e7-26c329d923eb"
                LastKnownName="IWebSocket"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="8954cc68-0902-4490-8d1d-15002e2aabca"
            name="ChatController"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="24ef67b7-bc2d-410f-8d66-6c5156daee8e"
                  name="name"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="ac5965c0-bc93-484c-9473-b13cf0871a10"
                  name="ws"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <interfaceMoniker
                      Id="8648dcfd-f46a-41e0-94e7-26c329d923eb"
                      LastKnownName="IWebSocket"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="a793c8b8-7761-4a0e-9622-47c83b779557"
            name="MessageEntered"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="7f71c6a5-1ac7-4349-b25c-59deb4c18aaf"
                  name="message"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="1dd76c92-87dd-4bf9-8d02-215f4c8df192"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
                      LastKnownName="Boolean"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="ac619848-e2f9-4ab5-9d01-42c863c9ed96"
            name="AddMessageReceivedHandler"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="8a45b94a-9b28-4bd5-939f-c4a3cae8a3d5"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <interfaceMoniker
                      Id="692bc672-354c-4b63-912f-84b2f05649e3"
                      LastKnownName="Message"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <Interface
        Id="b4596e21-a0c4-4d65-aa48-dd4445b6f42e"
        name="IWebSocket"
        isAbstract="false"
        isLeaf="false">
        <ownedAttributes>
          <property
            Id="b622e9a0-dcf9-44d9-8023-a2adf94daa4d"
            name="MessageReceived"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="c33419c5-7086-4645-9a3e-4bfa8de9cbed"
                LastKnownName="Message event"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributes>
        <ownedOperations>
          <operation
            Id="cd074eaf-e57b-42e3-86f2-5c5df3faf0ff"
            name="Transmit"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="f0e2c8d3-f9b0-4082-99b4-ae924eeee514"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="df73f1a2-fbb6-4897-b64f-bdb66458348c"
                  direction="Return"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
                      LastKnownName="Boolean"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperations>
      </Interface>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <undefinedType
        Id="b0f10a4f-e2bd-46db-85a3-43f5a89350f0"
        name="List&lt;string&gt;" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="f5c565df-e70f-4136-9702-26f7af4967c1"
        name="ChatBehavior"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <dependency
            Id="0185e2ad-de68-439a-9538-abb9882819d4">
            <interfaceMoniker
              Id="8762e0f6-21fe-4dbb-a130-158b730f646c"
              LastKnownName="IWebSocketBehavior"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </dependency>
        </suppliersInternal>
        <ownedAttributesInternal>
          <property
            Id="55be5b09-79f8-489d-854a-5ac0ddb71bf3"
            name="messages"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="b0f10a4f-e2bd-46db-85a3-43f5a89350f0"
                LastKnownName="List&lt;string&gt;"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="65c6b752-1557-4aab-bf14-c9ada9a48e6d"
            name="ProcessMessage"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="2e537a2c-184a-4805-a40e-936497e8695d"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="e3977743-52ec-4c7a-8cc2-382e77ffa8d3"
                  name="IWebSocketBehavior"
                  direction="In"
                  isUnique="false" />
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="6fc3c840-d993-4e9a-8b01-201d58e8a173"
            name="Open"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="3ee3099c-d20d-465e-bfd0-a2ef4e5863d0"
                  name="wsb"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <interfaceMoniker
                      Id="dd936dd3-079a-4bf3-911e-f7ae078a40fb"
                      LastKnownName="IWebSocketBehavior"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <Interface
        Id="8762e0f6-21fe-4dbb-a130-158b730f646c"
        name="IWebSocketBehavior"
        isAbstract="false"
        isLeaf="false">
        <ownedOperations>
          <operation
            Id="b20851cb-f2a8-4873-a074-e98a9d79ea73"
            name="Send"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="589d4967-6ba8-46f0-ac02-d5e1cd780385"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="133c57d3-9bd0-4c90-8a70-76afb5252df3"
            name="Broadcast"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="d110fd4a-4d86-4bfb-a8f2-011cdf864f28"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperations>
      </Interface>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="35ad2db7-41ca-4f07-a1fe-dbfa24807723"
        name="ChatBehavior"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <dependency
            Id="5d2a1d5a-9a2c-4795-ab60-f1fb28ec0e8c">
            <interfaceMoniker
              Id="b27cd95b-e024-472e-a63f-297e9984f95e"
              LastKnownName="IWebSocketBehavior"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </dependency>
        </suppliersInternal>
        <ownedAttributesInternal>
          <property
            Id="0145b672-c392-4ce3-8764-9a7a018ae7fe"
            name="messages"
            visibility="Private"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <undefinedTypeMoniker
                Id="b0f10a4f-e2bd-46db-85a3-43f5a89350f0"
                LastKnownName="List&lt;string&gt;"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation
            Id="559e4581-dbfa-4ffe-84c3-cb0d07cf7fa8"
            name="ProcessMessage"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="39e0c62d-709b-41cc-babc-75ad0cd13064"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="7ba3178e-89eb-47f8-bc12-f18c0badf84e"
                  name="IWebSocketBehavior"
                  direction="In"
                  isUnique="false" />
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="112bd6dc-40eb-45db-aee0-55e30c7ccef5"
            name="Open"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="865787e5-8017-4f29-97bf-0de9d04da082"
                  name="wsb"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <interfaceMoniker
                      Id="dd936dd3-079a-4bf3-911e-f7ae078a40fb"
                      LastKnownName="IWebSocketBehavior"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <Interface
        Id="b27cd95b-e024-472e-a63f-297e9984f95e"
        name="IWebSocketBehavior"
        isAbstract="false"
        isLeaf="false">
        <ownedOperations>
          <operation
            Id="05f74626-dd8c-4df4-a1e2-331129bd064a"
            name="Send"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="f6800c4a-f19f-4cab-a71d-fccca0ac64e1"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
          <operation
            Id="0357a4da-07ab-4b99-9027-22bf321dd73a"
            name="Broadcast"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="8b8cd869-03f5-4fd7-907e-00ef12cac569"
                  name="m"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <primitiveTypeMoniker
                      Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                      LastKnownName="String"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperations>
      </Interface>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <Interface
        Id="1976e9e7-9dfe-411c-a425-02b2706578d2"
        name="ClientMessage"
        isAbstract="false"
        isLeaf="false" />
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="0f6cb161-3680-4327-9ff5-b9bc851bf4a1"
        name="ChatMessage"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <interfaceRealization
            Id="6949dbb0-fb7a-4fcc-a9bd-59451e0d2dc4">
            <interfaceMoniker
              Id="1976e9e7-9dfe-411c-a425-02b2706578d2"
              LastKnownName="ClientMessage"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </interfaceRealization>
        </suppliersInternal>
        <ownedAttributesInternal>
          <property
            Id="15e5ecd0-eefb-4c1f-9bee-8705246ff4d0"
            name="Message"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <primitiveTypeMoniker
                Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                LastKnownName="String"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
          <property
            Id="3e2cc98d-b52d-49f1-80cf-f055f3e3406c"
            name="Name"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <primitiveTypeMoniker
                Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                LastKnownName="String"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="ffb4b394-ea0c-4bfd-a53a-168fbb1bde30"
        name="LoginMessage"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <interfaceRealization
            Id="52057ddc-c031-423a-b9e3-01541956e87e">
            <interfaceMoniker
              Id="1976e9e7-9dfe-411c-a425-02b2706578d2"
              LastKnownName="ClientMessage"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </interfaceRealization>
        </suppliersInternal>
        <ownedAttributesInternal>
          <property
            Id="9dcef929-a546-4379-b905-c9234ca29a75"
            name="Name"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <primitiveTypeMoniker
                Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                LastKnownName="String"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
          <property
            Id="a3d402f9-b50d-4710-b445-675147ac1587"
            name="Password"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <primitiveTypeMoniker
                Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                LastKnownName="String"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="a9987a1f-2f1f-41cf-b3e9-0dd54e05180f"
        name="LogoutMessage"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <interfaceRealization
            Id="12d185df-6ae2-41fb-bd4b-94fdba3cab65">
            <interfaceMoniker
              Id="1976e9e7-9dfe-411c-a425-02b2706578d2"
              LastKnownName="ClientMessage"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </interfaceRealization>
        </suppliersInternal>
        <ownedAttributesInternal>
          <property
            Id="a1dadacb-9a51-489f-b2b1-39c246f79e7c"
            name="Name"
            isLeaf="false"
            isStatic="false"
            isReadOnly="false"
            isUnique="false"
            isDerived="false"
            isDerivedUnion="false"
            aggregation="None"
            isComposite="false">
            <type_NamedElement>
              <primitiveTypeMoniker
                Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
                LastKnownName="String"
                LastKnownLocation="DesignPatterns-Prelude.uml" />
            </type_NamedElement>
          </property>
        </ownedAttributesInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <Interface
        Id="971ec788-ca6e-4e8e-add2-efa79b110ec1"
        name="A"
        isAbstract="false"
        isLeaf="false">
        <suppliersInternal>
          <dependency
            Id="fbadefc8-6e2d-41b4-ac8d-de032666138d">
            <interfaceMoniker
              Id="f6e46bd3-443a-4dc8-879b-079fb433a4d2"
              LastKnownName="B"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </dependency>
        </suppliersInternal>
        <ownedOperations>
          <operation
            Id="19606744-b2e2-4650-af67-2ddc0777710f"
            name="DoSomething"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="66e88613-a23f-4867-a12d-998dfd53ab37"
                  name="b"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <interfaceMoniker
                      Id="f6e46bd3-443a-4dc8-879b-079fb433a4d2"
                      LastKnownName="B"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperations>
      </Interface>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <Interface
        Id="f6e46bd3-443a-4dc8-879b-079fb433a4d2"
        name="B"
        isAbstract="false"
        isLeaf="false">
        <ownedOperations>
          <operation
            Id="e812af75-74cb-4851-998c-01c62956b42d"
            name="Process"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperations>
      </Interface>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <Interface
        Id="fbacdfaa-4741-4da6-afa0-fcb3593099c1"
        name="B2"
        isAbstract="false"
        isLeaf="false">
        <generalsInternal>
          <generalization
            Id="bb052d39-0095-4c30-8e31-0be09eee9ccd"
            isSubstitutable="false">
            <interfaceMoniker
              Id="f6e46bd3-443a-4dc8-879b-079fb433a4d2"
              LastKnownName="B"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </generalization>
        </generalsInternal>
        <ownedOperations>
          <operation
            Id="fbea70d1-920c-478f-890f-9fd0264e1f95"
            name="MoreEfficientProcess"
            isLeaf="false"
            isStatic="false"
            isAbstract="true"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperations>
      </Interface>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="7acc38cb-3c57-48be-bcfe-fd7399bb7d29"
        name="BImpl"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <interfaceRealization
            Id="b8d8ce0c-f3b4-4bdc-b0a9-41c5e621c52d">
            <interfaceMoniker
              Id="f6e46bd3-443a-4dc8-879b-079fb433a4d2"
              LastKnownName="B"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </interfaceRealization>
        </suppliersInternal>
        <ownedOperationsInternal>
          <operation
            Id="b48c193e-8bfb-4d98-8b9b-f9524806ab73"
            name="Process"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="8750a063-1b02-4f08-b683-5cfc80b5df31"
        name="B2Impl"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <interfaceRealization
            Id="a47ba6b7-b987-4892-9ff3-c33aa396a993">
            <interfaceMoniker
              Id="fbacdfaa-4741-4da6-afa0-fcb3593099c1"
              LastKnownName="B2"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </interfaceRealization>
        </suppliersInternal>
        <ownedOperationsInternal>
          <operation
            Id="48bbdc7e-4e06-4174-91ec-4880f7a63212"
            name="MoreEfficientProcess"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
          <operation
            Id="7c5865d3-5549-4d25-8545-73ddbf014c3e"
            name="Process"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false" />
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="9decdcab-b616-4f11-b8ea-8672933600ff"
        name="AImpl"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <interfaceRealization
            Id="b6ffbf9e-66bf-40e1-b2ea-73a567adfbfd">
            <interfaceMoniker
              Id="971ec788-ca6e-4e8e-add2-efa79b110ec1"
              LastKnownName="A"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </interfaceRealization>
        </suppliersInternal>
        <ownedOperationsInternal>
          <operation
            Id="d73051ef-94cb-47bf-b9e5-698fa2024481"
            name="DoSomething"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="4b61e62f-8e5b-4bf5-a744-b915ac95e0a8"
                  name="b"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <interfaceMoniker
                      Id="f6e46bd3-443a-4dc8-879b-079fb433a4d2"
                      LastKnownName="B"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
    <packageHasNamedElement>
      <class
        Id="4e18d385-dd6b-496f-96e8-fed17f127a29"
        name="EfficientAImpl"
        isAbstract="false"
        isLeaf="false"
        isActiveClass="false">
        <suppliersInternal>
          <interfaceRealization
            Id="4e5b4d65-a91c-473f-8084-64dbf83752d7">
            <interfaceMoniker
              Id="971ec788-ca6e-4e8e-add2-efa79b110ec1"
              LastKnownName="A"
              LastKnownLocation="DesignPatterns-Prelude.uml" />
          </interfaceRealization>
        </suppliersInternal>
        <ownedOperationsInternal>
          <operation
            Id="2edb0008-1fa6-45fe-8844-b562792e47da"
            name="DoSomething"
            isLeaf="false"
            isStatic="false"
            isAbstract="false"
            concurrency="Sequential"
            isQuery="false">
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter
                  Id="65a56cf8-1a91-4c3f-9f4f-127e35e92e18"
                  name="b"
                  direction="In"
                  isUnique="false">
                  <type_NamedElement>
                    <interfaceMoniker
                      Id="f6e46bd3-443a-4dc8-879b-079fb433a4d2"
                      LastKnownName="B"
                      LastKnownLocation="DesignPatterns-Prelude.uml" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </packageHasNamedElement>
  </packagedElements>
  <primitiveType
    Id="220a3521-e091-4221-bae9-3ef9018e845c"
    name="Integer"
    isAbstract="false"
    isLeaf="false" />
  <primitiveType
    Id="8943dc84-709e-4f62-b15a-a3273aa6f165"
    name="Boolean"
    isAbstract="false"
    isLeaf="false" />
  <primitiveType
    Id="59259974-6d55-42c6-b7bd-763d77ac8ef9"
    name="String"
    isAbstract="false"
    isLeaf="false" />
  <primitiveType
    Id="3ab42e7d-4969-445a-b209-471f5cb8209c"
    name="UnlimitedNatural"
    isAbstract="false"
    isLeaf="false" />
</modelStoreModel>