Diff of /trunk/mqttsparkplug/mqttsparkplug/SparkplugB/Function Blocks/FB_PrimaryHost/FB_PrimaryHost/svnobj [r809] .. [r810]  Maximize  Restore

Switch to unified view

a/trunk/mqttsparkplug/mqttsparkplug/SparkplugB/Function Blocks/FB_PrimaryHost/FB_PrimaryHost/svnobj b/trunk/mqttsparkplug/mqttsparkplug/SparkplugB/Function Blocks/FB_PrimaryHost/FB_PrimaryHost/svnobj
1
Gx_lt!0…jüo4\ø]T̬Z@±System.StringL{6f9dac99-8de1-4efc-8465-68ac443b7d08}SpecialFuncL{0db3d7bb-cde0-4416-9a7b-ce49a0124323}NoneImplementationL{3b83b776-fb25-43b8-99f2-3c507c9143fc}TextDocument    L{f3878285-8e4f-490b-bb1b-9acbb7eb04db}
1
Gx_lo‡!0…jüoi»c4+<LþSystem.StringL{6f9dac99-8de1-4efc-8465-68ac443b7d08}SpecialFuncL{0db3d7bb-cde0-4416-9a7b-ce49a0124323}NoneImplementationL{3b83b776-fb25-43b8-99f2-3c507c9143fc}TextDocument    L{f3878285-8e4f-490b-bb1b-9acbb7eb04db}
2
TextLinesL{a5de0b0b-1cb5-4913-ac21-9d70293ec00d}Id
longTagText// Componentsn_MQTT.IASyncPropertyProvider( IASyncPropertyProvider );b_MQTT.ITLSContextProvider( ITLSContextProvider );_MQTT();¸Connected := (NOT _MQTT.ClientError() AND NOT _MQTT.IsConnecting() AND _MQTT.IsConnected());b_SparkplugB( AllmetricsList := _AllMetricsList );RIF _MQTT.SubscriberMessageReceived() THENà    _RecvMesg REF= _MQTT.GetSubscriberMessage(MetricList := THIS^._AllMetricsList, MessageTopic => _RecvTopic );l    //onSubscribeMessage( pTopic := ADR( _RecvTopic ),d    //                    pMessage := _RecvMesg );‚    _TopicParser( pTopic := ADR(_RecvTopic) ); //parses the topic    ~    WriteDeviceLog( UDINT_TO_DWORD( CmpLog.LogClass.LOG_INFO ),j                    'PrimaryHost Received Topic: %s',x                    TO_STRING( _TopicParser.MessageType ) ); z    CASE _TopicParser.MessageType OF  //SparkplugMessageTypes!š        SparkplugMessageTypes.NBIRTH: //Birth certificate for MQTT EoN nodes."            _MyEdge REF= THIS^.GetEdge( GroupId := _TopicParser.GroupId,#Œ                                        EdgeId := _TopicParser.EdgeId,$„                                        eError => _HandledError );%B            CASE _HandledError OF&p                ERROR.GroupIDNotFound: // ==> NEW GROUP!'°                    _MyGroupId REF= THIS^.allocGroupId( GroupId := _TopicParser.GroupId,(–                                                        eError => eError );)f                    IF eError = ERROR.NO_ERROR THEN*º                        _MyEdge REF= THIS^.allocEdgetoGroupId( EdgeId := _TopicParser.EdgeId,+Æ                                                               itfGroupID := _MyGroupId.itfGroupID,,¤                                                               eError => eError );-n                        IF eError = ERROR.NO_ERROR THEN.–                            _MyEdge.ProcessNBIRTH( itfPrimaryHost := THIS^,/’                                                   pMessage := _RecvMesg,0ˆ                                                   xError => xError,1Œ                                                   eError => eError );28                        ELSE3V                            xError := TRUE;4^                            //eError := eError;5<                        END_IF60                    ELSE7N                        xError := TRUE;8V                        //eError := eError;94                    END_IF:l                ERROR.EdgeIDNotFound: // ==> NEW EDGE!;¬                    _MyGroupId REF= THIS^.GetGroupID( GroupId := _TopicParser.GroupId,<’                                                      eError => eError );=v                ERROR.NO_ERROR: // ==> UPDATE EXISTING EDGE>†                    _MyEdge.ProcessNBIRTH( itfPrimaryHost := THIS^,?‚                                           pMessage := _RecvMesg,@x                                           xError => xError,A|                                           eError => eError );B             ELSECz                ; //{info 'TODO: maybe some sort of error??'}D(            END_CASEE            Fr        SparkplugMessageTypes.NDATA: //Node data message.G„                    _MyEdge.ProcessNDATA( itfPrimaryHost := THIS^,H€                                          pMessage := _RecvMesg,Iv                                          xError => xError,Jz                                          eError => eError );K>                xError := TRUE;L^                eError := Error.MetricNotFound;M–                WriteDeviceLog( UDINT_TO_DWORD( CmpLog.LogClass.LOG_INFO ),Nš                                'PrimaryHost process NDATA metric error: %s',O~                                TO_STRING( _HandledError ) );  Pb            END_CASE                             Qš        SparkplugMessageTypes.NDEATH: //Death certificate for MQTT EoN nodes.R’                ERROR.NO_ERROR: // ==> UPDATE EXISTING EDGE              SX                    _MyEdge.ProcessNDEATH();T~                eError := Error.OhMy_ThatShouldNotHaveHappened;Uœ                                'PrimaryHost process NDEATH metric error: %s',V*            END_CASE W        XŠ        SparkplugMessageTypes.DBIRTH: //Birth certificate forDevices.Y˜            _MyDevice REF= THIS^.GetDevice( GroupId := _TopicParser.GroupId,Z”                                            EdgeId := _TopicParser.EdgeId,[œ                                            DeviceId := _TopicParser.DeviceId,\Œ                                            eError => _HandledError );]ž                ERROR.GroupIDNotFound:  // ==> NEW GROUP! must rebirth the edge^œ                ERROR.EdgeIDNotFound:   // ==> NEW EDGE! must rebirth the edge_t                ERROR.DeviceIDNotFound: // ==> NEW DEVICE!`Š                ERROR.NO_ERROR:         // ==> UPDATE EXISTING DEVICEa”        SparkplugMessageTypes.DDEATH,    //Death certificate for Devices. b€            SparkplugMessageTypes.DDATA: //Device data message. cV            eError := ERROR.NotImplemented;d€        SparkplugMessageTypes.NCMD,      //Node command message.e„            SparkplugMessageTypes.DCMD,  //Device command message.fš            SparkplugMessageTypes.STATE: //Critical application state messageg†            ;                            //do nothing, ignore theseh    ELSEij        ; //{info 'TODO: maybe some sort of error??'}j    END_CASEk  lEND_IFmv_ExponentialBackOff( Enable := (Connect AND NOT Connected),nn                     ConnectionTime := _ConnectionTime,on                     LockTimesArray := _LockTimesArray,pR                     Enabled => _Enabled,qv                     OutTimeRemaining => _OutTimeRemaining,r~                     LockTimeRemaining => _LockTimeRemaining );sd_StateMachine( Connect := _ExponentialBackOff.out,tb               PrimaryHostConnected := Connected,uJ               pMQTT := ADR( _MQTT ),vb               pSparkplugB := ADR( _SparkplugB ),wH               pPrimaryHost := THIS,x\               SessionState => SessionState );yDiag();zInterface{L{a9ed5b7e-75c5-4651-af16-d2c27e98cb94}|(*}*    Primary Host Node~Ö    Allows you to concenrate Edge of Network Data sent by various Edges or other Sparkplug compatible nodes*)€0{attribute 'reflection'}jFUNCTION_BLOCK FB_PrimaryHost IMPLEMENTS IPrimaryHost‚VAR_INPUTƒ€    ServerUrl     : STRING;          // eg:'test.mosquitto.org';„`    ServerPort    : UINT    := 1883; // eg: 1883…r    PrimaryHostID : WSTRING := "";   // eg:'PrimaryHost';†ˆ    KeepAlive     : UINT    := 60;   // eg: 60 (Value is in seconds)‡V    // Persistent Session (FALSE = DEFAULT)ˆ°    //  * The client must get all messages from a certain topic, even if it is offline. ‰ò    //  * You want the broker to queue the messages for the client and deliver them as soon as the client is back online.ŠX    //  * The client has limited resources. ‹ˆ    //  * You want the broker to store the subscription information of the client and restore the interrupted communication quickly.ŒÈ    //  * The client needs to reNumberOfMetricse all QoS 1 and 2 publish messages after a reconnect.    //  Ž8    //  Clean session (TRUE)à    //  * The client needs only to publish messages to topics, the client does not need to subscribe to topics. Þ    //  * You don t want the broker to store session information or retry transmission of QoS 1 and 2 messages.‘–    //  * The client does not need to get messages that it misses offline. ’    //“H    CleanSession : BOOL    := FALSE;”¦    Username     : WSTRING := "";           // specify a username if any (optional)•¾    Password     : WSTRING := "";           // specify the password for the username (optional)–º    UseTLS       : BOOL;                    // Enables usage of the TLS encryption (optional)—T    hCert        : SysTypes.RTS_IEC_HANDLE˜ü    ;                                           // Handle to the client certificate (optional) and only used if UseTLS is TRUE™\    ITLSContextProvider : MQTT.NBS.ITLSContextš¢    ; //Encapsulates all the data neccessaray to handle encrypted tcp connections›ˆ    //Static initialization, as shown in the following code snippet;œ    //VARV    //    commonName : STRING := 'MyRasPi';ž¸    //    ciCertInfo : NBS.CERT_INFO := (psInfo:=ADR(commonName), udiSize:=LEN(commonName));ŸX    //    myTLSContext : NBS.TLSContext := ( `    //        ePurpose:=NBS.PURPOSE.CLIENT_SIDE,¡L    //        sUseCaseName:='NBSTest',¢B    //        sTLSVersion:='1.3',£J    //        ciCertInfo:=ciCertInfo,¤H    //        udiVerificationMode:=2¥    //    );¦    //END_VAR§š    IASyncPropertyProvider : MQTT.NBS.IAsyncProperty; // Runs the connect process in a own background task. Use this property if the connection setup takes longer than one task cycle (e.g. TLS connections)¨END_VAR©VAR_OUTPUTª4    Connected      : BOOL;«^    SessionState   : SparkplugSessionStateType;¬4    xError         : BOOL;­6    eError         : ERROR;®^    itfPrimaryHost : IPrimaryHost := THIS^;    ¯VAR°Ð    _groupIDPool        : List;         // OF FB_GroupID - This is blank groupids for dynamic allocation±v    _EdgePool           : List;         // OF FB_RemoteEdge²z    _DevicePool         : List;         // OF FB_RemoteDevice³z    _MetricPool         : List;         // OF FB_RemoteMetric´¬    _groupIDs           : List;         // OF FB_GroupID - This is groupIDs with namesµ¦    Connect             : BOOL := TRUE; // TRUE: Connects EoN using the configured settings, FALSE: Disconnects EoN from server if it was connected¶¼    _cPrimaryHostID     : WSTRING;   // Corrected PrimaryHostID, contains no illegal chars    ·>    _Enabled            : BOOL;¸P    _ConnectionTime     : TIME := T#30S;¹¨    _LockTimesArray     : ARRAY[1..8] OF TIME := [4(TIME#30S0MS), 2(TIME#1M0S0MS), TIME#2M0S0MS, TIME#4M0S0MS]; // could be made accessible public  ºž    _OutTimeRemaining   : TIME; // Duration of Out Time Period = TRUE remaining»>    _LockTimeRemaining  : TIME;¼¾    _ExponentialBackOff : FB_ExponentialBackOffTimer; // Handles the Exponential Backoff timing½j    _StateMachine       : FB_PrimaryHostStateMachine;¾l    _TopicProvider      : FB_PrimaryHostTopicProvider;¿Z    _MQTT               : FB_PrimaryHostMQTT;ÀT    _MQTT_eError        : MQTT.MQTT_ERROR;Áž    _SparkplugB         : FB_SparkplugBSimple;     // Handles SparkPlugB Stuff š    _AllMetricsList     : LIST;                    // Of FB_HostStorageMetricâ    _Blob               : ARRAY[0..65535] OF BYTE; // buffer for encoded messagesĤ    _BlobSize           : UDINT;                   // current encoded message sizeÅ|    _LastWillQos        : MQTT.MQTT_QOS := MQTT.MQTT_QOS.QoS0;ÆP    _LastWillRetain     : BOOL := FALSE;Ç’    _LastWillTopic      : WSTRING(GC_Sparkplug.supported_string_lengths);Ȫ    _NDEATH             : FB_SparkplugUInt64;    // contains the current NDEATH BDSeqɺ    _NDEATHPayload      : ARRAY[0..255] OF BYTE; // what is the maximum size of this payload?Ê@    _NDEATHPayloadSize  : UDINT;Ë~    _RecvMesg           : REFERENCE TO FB_PayloadSimpleDecoder;Ì’    _RecvTopic          : WSTRING(GC_Sparkplug.supported_string_lengths);Íâ    _HandledError       : ERROR; // an error that will be given back by a function, but we can handle the error. Îd    _MyGroupId          : REFERENCE TO FB_GroupId;Ïj    _MyEdge             : REFERENCE TO FB_RemoteEdge;Ðn    _MyDevice           : REFERENCE TO FB_RemoteDevice;ÑR    _TopicParser        : FB_TopicParser;ÒB    _Diag               : STRING;Ó>    {attribute 'instance-path'}Ô0    {attribute 'noinit'}Õ$    _POU : STRING;Ö"UniqueIdGenerator×2292ØPOULevelÙL{8e575c5b-1d37-49c6-941b-5c0ec7874787}ÚStandardÛ ChildObjectGuidsÜ8System.Collections.ArrayListÝ,AddAttributeSubsequentÞboolÐÐ-ÐÐ  E
2
TextLinesL{a5de0b0b-1cb5-4913-ac21-9d70293ec00d}Id
longTagText// Componentsn_MQTT.IASyncPropertyProvider( IASyncPropertyProvider );b_MQTT.ITLSContextProvider( ITLSContextProvider );_MQTT();¸Connected := (NOT _MQTT.ClientError() AND NOT _MQTT.IsConnecting() AND _MQTT.IsConnected());b_SparkplugB( AllmetricsList := _AllMetricsList );RIF _MQTT.SubscriberMessageReceived() THEN<    {region "onSubscribeMessage"}à    _RecvMesg REF= _MQTT.GetSubscriberMessage(MetricList := THIS^._AllMetricsList, MessageTopic => _RecvTopic );l    //onSubscribeMessage( pTopic := ADR( _RecvTopic ),d    //                    pMessage := _RecvMesg );‚    _TopicParser( pTopic := ADR(_RecvTopic) ); //parses the topic    ~    WriteDeviceLog( UDINT_TO_DWORD( CmpLog.LogClass.LOG_INFO ),j                    'PrimaryHost Received Topic: %s', x                    TO_STRING( _TopicParser.MessageType ) );!z    CASE _TopicParser.MessageType OF  //SparkplugMessageTypes"š        SparkplugMessageTypes.NBIRTH: //Birth certificate for MQTT EoN nodes.#            _MyEdge REF= THIS^.GetEdge( GroupId := _TopicParser.GroupId,$Œ                                        EdgeId := _TopicParser.EdgeId,%„                                        eError => _HandledError );&B            CASE _HandledError OF'p                ERROR.GroupIDNotFound: // ==> NEW GROUP!(°                    _MyGroupId REF= THIS^.allocGroupId( GroupId := _TopicParser.GroupId,)–                                                        eError => eError );*f                    IF eError = ERROR.NO_ERROR THEN+º                        _MyEdge REF= THIS^.allocEdgetoGroupId( EdgeId := _TopicParser.EdgeId,,Æ                                                               itfGroupID := _MyGroupId.itfGroupID,-¤                                                               eError => eError );.n                        IF eError = ERROR.NO_ERROR THEN/–                            _MyEdge.ProcessNBIRTH( itfPrimaryHost := THIS^,0’                                                   pMessage := _RecvMesg,1ˆ                                                   xError => xError,2Œ                                                   eError => eError );38                        ELSE4V                            xError := TRUE;5^                            //eError := eError;6<                        END_IF70                    ELSE8N                        xError := TRUE;9V                        //eError := eError;:4                    END_IF;l                ERROR.EdgeIDNotFound: // ==> NEW EDGE!<¬                    _MyGroupId REF= THIS^.GetGroupID( GroupId := _TopicParser.GroupId,=’                                                      eError => eError );>v                ERROR.NO_ERROR: // ==> UPDATE EXISTING EDGE?†                    _MyEdge.ProcessNBIRTH( itfPrimaryHost := THIS^,@‚                                           pMessage := _RecvMesg,Ax                                           xError => xError,B|                                           eError => eError );C             ELSEDz                ; //{info 'TODO: maybe some sort of error??'}E(            END_CASEF            Gr        SparkplugMessageTypes.NDATA: //Node data message.H„                    _MyEdge.ProcessNDATA( itfPrimaryHost := THIS^,I€                                          pMessage := _RecvMesg,Jv                                          xError => xError,Kz                                          eError => eError );L>                xError := TRUE;M^                eError := Error.EdgeIDNotFound;N–                WriteDeviceLog( UDINT_TO_DWORD( CmpLog.LogClass.LOG_INFO ),Oš                                'PrimaryHost process NDATA metric error: %s',P~                                TO_STRING( _HandledError ) );  Qb            END_CASE                             Rš        SparkplugMessageTypes.NDEATH: //Death certificate for MQTT EoN nodes.S’                ERROR.NO_ERROR: // ==> UPDATE EXISTING EDGE              TX                    _MyEdge.ProcessNDEATH();U~                eError := Error.OhMy_ThatShouldNotHaveHappened;Vœ                                'PrimaryHost process NDEATH metric error: %s',W*            END_CASE X        YŠ        SparkplugMessageTypes.DBIRTH: //Birth certificate forDevices.Z„            //TODO: Check if edge is online (isQualityOK).  If not OK, DO NOT process the DBIRTH, instead just send a NCMD/Rebirth[ \˜            _MyDevice REF= THIS^.GetDevice( GroupId := _TopicParser.GroupId,]”                                            EdgeId := _TopicParser.EdgeId,^œ                                            DeviceId := _TopicParser.DeviceId,_Œ                                            eError => _HandledError );`ž                ERROR.GroupIDNotFound:  // ==> NEW GROUP! must rebirth the edgeaJ               eError := ERROR.NotImplemented;b*              xError := TRUE;c‚                 WriteDeviceLog( UDINT_TO_DWORD( CmpLog.LogClass.LOG_INFO ),dü                                     'DBIRTH Received with no existing groupID, but haven$'t implemented NCMD Rebirth yet %s',eX                                     '' );  fœ                ERROR.EdgeIDNotFound:   // ==> NEW EDGE! must rebirth the edgegö                                     'DBIRTH Received with no existing edge, but haven$'t implemented NCMD Rebirth yet %s',hT                                     '' );it                ERROR.DeviceIDNotFound: // ==> NEW DEVICE!j„                _MyEdge REF= THIS^.GetEdge( GroupId := _TopicParser.GroupId,kt                                          EdgeId := _TopicParser.EdgeId,lˆ                                                 eError => eError );mÈ                        _MyDevice REF= THIS^.allocDevicetoEdge( DeviceName := _TopicParser.DeviceId,n¾                                                               itfEdge := _MyEdge.itfRemoteEoN,oš                            _MyDevice.ProcessDBIRTH( itfPrimaryHost := THIS^,pŠ                ERROR.NO_ERROR:         // ==> UPDATE EXISTING DEVICEql              _MyDevice.ProcessDBIRTH( itfPrimaryHost := THIS^,r’        SparkplugMessageTypes.DDEATH:    //Death certificate for Devices.s\                    _MyDevice.ProcessDDEATH();tœ                                'PrimaryHost process DDEATH metric error: %s',ux        SparkplugMessageTypes.DDATA: //Device data message. vˆ                    _MyDevice.ProcessDDATA( itfPrimaryHost := THIS^,w„                                            pMessage := _RecvMesg,xz                                            xError => xError,y~                                            eError => eError );zb                eError := Error.DeviceIDNotFound;{š                                'PrimaryHost process DDATA metric error: %s',|€        SparkplugMessageTypes.NCMD,      //Node command message.}|        SparkplugMessageTypes.DCMD,  //Device command message.~’        SparkplugMessageTypes.STATE: //Critical application state message†            ;                            //do nothing, ignore these€    ELSEj        ; //{info 'TODO: maybe some sort of error??'}‚    END_CASEƒ    {endregion}„END_IF…v_ExponentialBackOff( Enable := (Connect AND NOT Connected),†n                     ConnectionTime := _ConnectionTime,‡n                     LockTimesArray := _LockTimesArray,ˆR                     Enabled => _Enabled,‰v                     OutTimeRemaining => _OutTimeRemaining,Š~                     LockTimeRemaining => _LockTimeRemaining );‹d_StateMachine( Connect := _ExponentialBackOff.out,Œb               PrimaryHostConnected := Connected,J               pMQTT := ADR( _MQTT ),Žb               pSparkplugB := ADR( _SparkplugB ),H               pPrimaryHost := THIS,\               SessionState => SessionState );‘Diag();’Interface“L{a9ed5b7e-75c5-4651-af16-d2c27e98cb94}”(*•*    Primary Host Node–Ö    Allows you to concenrate Edge of Network Data sent by various Edges or other Sparkplug compatible nodes—*)˜0{attribute 'reflection'}™jFUNCTION_BLOCK FB_PrimaryHost IMPLEMENTS IPrimaryHostšVAR_INPUT›€    ServerUrl     : STRING;          // eg:'test.mosquitto.org';œ`    ServerPort    : UINT    := 1883; // eg: 1883r    PrimaryHostID : WSTRING := "";   // eg:'PrimaryHost';žˆ    KeepAlive     : UINT    := 60;   // eg: 60 (Value is in seconds)ŸV    // Persistent Session (FALSE = DEFAULT) °    //  * The client must get all messages from a certain topic, even if it is offline. ¡ò    //  * You want the broker to queue the messages for the client and deliver them as soon as the client is back online.¢X    //  * The client has limited resources. £ˆ    //  * You want the broker to store the subscription information of the client and restore the interrupted communication quickly.¤È    //  * The client needs to reNumberOfMetricse all QoS 1 and 2 publish messages after a reconnect.¥    //  ¦8    //  Clean session (TRUE)§à    //  * The client needs only to publish messages to topics, the client does not need to subscribe to topics. ¨Þ    //  * You don t want the broker to store session information or retry transmission of QoS 1 and 2 messages.©–    //  * The client does not need to get messages that it misses offline. ª    //«H    CleanSession : BOOL    := FALSE;¬¦    Username     : WSTRING := "";           // specify a username if any (optional)­¾    Password     : WSTRING := "";           // specify the password for the username (optional)®º    UseTLS       : BOOL;                    // Enables usage of the TLS encryption (optional)¯T    hCert        : SysTypes.RTS_IEC_HANDLE°ü    ;                                           // Handle to the client certificate (optional) and only used if UseTLS is TRUE±\    ITLSContextProvider : MQTT.NBS.ITLSContext²¢    ; //Encapsulates all the data neccessaray to handle encrypted tcp connections³ˆ    //Static initialization, as shown in the following code snippet;´    //VARµV    //    commonName : STRING := 'MyRasPi';¶¸    //    ciCertInfo : NBS.CERT_INFO := (psInfo:=ADR(commonName), udiSize:=LEN(commonName));·X    //    myTLSContext : NBS.TLSContext := (¸`    //        ePurpose:=NBS.PURPOSE.CLIENT_SIDE,¹L    //        sUseCaseName:='NBSTest',ºB    //        sTLSVersion:='1.3',»J    //        ciCertInfo:=ciCertInfo,¼H    //        udiVerificationMode:=2½    //    );¾    //END_VAR¿š    IASyncPropertyProvider : MQTT.NBS.IAsyncProperty; // Runs the connect process in a own background task. Use this property if the connection setup takes longer than one task cycle (e.g. TLS connections)ÀEND_VARÁVAR_OUTPUTÂ4    Connected      : BOOL;Ã^    SessionState   : SparkplugSessionStateType;Ä4    xError         : BOOL;Å6    eError         : ERROR;Æ^    itfPrimaryHost : IPrimaryHost := THIS^;    ÇVARÈÐ    _groupIDPool        : List;         // OF FB_GroupID - This is blank groupids for dynamic allocationÉv    _EdgePool           : List;         // OF FB_RemoteEdgeÊz    _DevicePool         : List;         // OF FB_RemoteDeviceËz    _MetricPool         : List;         // OF FB_RemoteMetric̬    _groupIDs           : List;         // OF FB_GroupID - This is groupIDs with namesͦ    Connect             : BOOL := TRUE; // TRUE: Connects EoN using the configured settings, FALSE: Disconnects EoN from server if it was connectedμ    _cPrimaryHostID     : WSTRING;   // Corrected PrimaryHostID, contains no illegal chars    Ï>    _Enabled            : BOOL;ÐP    _ConnectionTime     : TIME := T#30S;Ѩ    _LockTimesArray     : ARRAY[1..8] OF TIME := [4(TIME#30S0MS), 2(TIME#1M0S0MS), TIME#2M0S0MS, TIME#4M0S0MS]; // could be made accessible public  Òž    _OutTimeRemaining   : TIME; // Duration of Out Time Period = TRUE remainingÓ>    _LockTimeRemaining  : TIME;Ô¾    _ExponentialBackOff : FB_ExponentialBackOffTimer; // Handles the Exponential Backoff timingÕj    _StateMachine       : FB_PrimaryHostStateMachine;Öl    _TopicProvider      : FB_PrimaryHostTopicProvider;×Z    _MQTT               : FB_PrimaryHostMQTT;ØT    _MQTT_eError        : MQTT.MQTT_ERROR;Ùž    _SparkplugB         : FB_SparkplugBSimple;     // Handles SparkPlugB Stuff Úš    _AllMetricsList     : LIST;                    // Of FB_HostStorageMetricÛ¢    _Blob               : ARRAY[0..65535] OF BYTE; // buffer for encoded messagesܤ    _BlobSize           : UDINT;                   // current encoded message sizeÝ|    _LastWillQos        : MQTT.MQTT_QOS := MQTT.MQTT_QOS.QoS0;ÞP    _LastWillRetain     : BOOL := FALSE;ß’    _LastWillTopic      : WSTRING(GC_Sparkplug.supported_string_lengths);ઠ   _NDEATH             : FB_SparkplugUInt64;    // contains the current NDEATH BDSeqẠ   _NDEATHPayload      : ARRAY[0..255] OF BYTE; // what is the maximum size of this payload?â@    _NDEATHPayloadSize  : UDINT;ã~    _RecvMesg           : REFERENCE TO FB_PayloadSimpleDecoder;ä’    _RecvTopic          : WSTRING(GC_Sparkplug.supported_string_lengths);åâ    _HandledError       : ERROR; // an error that will be given back by a function, but we can handle the error. æd    _MyGroupId          : REFERENCE TO FB_GroupId;çj    _MyEdge             : REFERENCE TO FB_RemoteEdge;èn    _MyDevice           : REFERENCE TO FB_RemoteDevice;éR    _TopicParser        : FB_TopicParser;êB    _Diag               : STRING;ë>    {attribute 'instance-path'}ì0    {attribute 'noinit'}í$    _POU : STRING;î"UniqueIdGeneratorï2371ðPOULevelñL{8e575c5b-1d37-49c6-941b-5c0ec7874787}òStandardó ChildObjectGuidsô8System.Collections.ArrayListõ,AddAttributeSubsequentöboolÐÐ-ÐÐ   E
3
™ÐÐ
­CÚÐ-ÐÐ
­DÚÐ-ÐÐ
­EÚÐ-ÐÐ
­FÚÐ-ÐÐ
­GÚÐ-ÐÐ
­HÚÐ-ÐÐ
­ºÚÐ-ÐÐ
­IÚÐ-ÐÐ
­JÚÐ-ÐÐ
­KÚÐ-ÐÐ
­LÚÐ-ÐÐ
­MÚÐ-ÐÐ
­NÚÐ-ÐÐ
­OÚÐ-ÐÐ
­PÚÐ-ÐÐ
­QÚÐ-ÐÐ
­RÚÐ-ÐÐ
­SÚÐ-ÐÐ
­TÚÐ- ÐÐ
­UÚÐ-!ÐÐ
­VÚÐ-"ÐÐ
­WÚÐ-#ÐÐ
­XÚÐ-$ÐÐ
­ÂÚÐ-ÐÐ
­YÚÐ-%ÐÐ
­ZÚÐ-&ÐÐ
­[ÚÐ-'ÐÐ
­\ÚÐ-(ÐÐ
­]ÚÐ-ÐÐ
­^ÚÐ-)ÐÐ
­_ÚÐ-*ÐÐ
­`ÚÐ-+ÐÐ
­aÚÐ-,ÐÐ
­bÚÐ-ÐÐ
­cÚÐ--ÐÐ
­dÚÐ-.ÐÐ
­eÚÐ-/ÐÐ
­fÚÐ-0ÐÐ
­gÚÐ-1ÐÐ
­hÚÐ-2ÐÐ
­iÚÐ-3ÐÐ
­jÚÐ-4ÐÐ
­kÚÐ-5ÐÐ
­lÚÐ-6ÐÐ
­mÚÐ-7ÐÐ
­nÚÐ-8ÐÐ
­oÚÐ-9ÐÐ
­pÚÐ-:ÐÐ
­qÚÐ-;ÐÐ
­rÚÐ-<ÐÐ
­sÚÐ-ÐÐ
­tÚÐ-)ÐÐ
­uÚÐ-*ÐÐ
­vÚÐ-+ÐÐ
­wÚÐ-,ÐÐ
­xÚÐ-ÐÐ
­yÚÐ--ÐÐ
­zÚÐ-.ÐÐ
­{ÚÐ-/ÐÐ
­|ÚÐ-0ÐÐ
­}ÚÐ-1ÐÐ
­~ÚÐ-2ÐÐ
­ÚÐ-3ÐÐ
­€ÚÐ-4ÐÐ
­ÚÐ-5ÐÐ
­‚ÚÐ-6ÐÐ
­ƒÚÐ-7ÐÐ
­„ÚÐ-8ÐÐ
­…ÚÐ-9ÐÐ
­†ÚÐ-=ÐÐ
­‡ÚÐ->ÐÐ
­ˆÚÐ-?ÐÐ
­‰ÚÐ-@ÐÐ
­ŠÚÐ-AÐÐ
­‹ÚÐ-BÐÐ
­ŒÚÐ-CÐÐ
­ÚÐ-DÐÐ
­ÃÚÐ-EÐÐ
­¾ÚÐ-FÐÐ
­ÄÚÐ-"ÐÐ
­ÅÚÐ-#ÐÐ
­ÀÚÐ-$ÐÐ
­ÇÚÐ-%ÐÐ
­ÍÚÐ-=ÐÐ
­ÎÚÐ-GÐÐ
­ÏÚÐ-HÐÐ
­ÐÚÐ-IÐÐ
­ÑÚÐ-JÐÐ
­ÒÚÐ-BÐÐ
­ÕÚÐ-KÐÐ
­ÖÚÐ-LÐÐ
­×ÚÐ-MÐÐ
­ØÚÐ-NÐÐ
­ÓÚÐ-OÐÐ
­ÈÚÐ-PÐÐ
­ôÚÐ-ÐÐ
­ŽÚÐ-QÐÐ
­ÜÚÐ-"ÐÐ
­ÝÚÐ-#ÐÐ
­ÞÚÐ-$ÐÐ
­ßÚÐ-%ÐÐ
­íÚÐ-RÐÐ
­áÚÐ-SÐÐ
­åÚÐ-BÐÐ
­æÚÐ-KÐÐ
­çÚÐ-TÐÐ
­èÚÐ-MÐÐ
­éÚÐ-UÐÐ
­êÚÐ-OÐÐ
­ÙÚÐ-VÐÐ
­ÚÐ-WÐÐ
­ÚÐ-XÐÐ
­‘ÚÐ-YÐÐ
­’ÚÐ-ZÐÐ
­“ÚÐ-[ÐÐ
­”ÚÐ-\ÐÐ
­•ÚÐ-ÐÐ
­–ÚÐ-%ÐÐ
­—ÚÐ-]ÐÐ
­˜ÚÐ-^ÐÐ
­™ÚÐ-_ÐÐ
­šÚÐ-`ÐÐ
­›ÚÐ-BÐÐ
­œÚÐ-CÐÐ
­ÚÐ-DÐÐ
­žÚÐ-aÐÐ
­ ÚÐ-bÐÐ
­¡ÚÐ-cÐÐ
­¢ÚÐ-dÐÐ
­£ÚÐ-eÐÐ
­¤ÚÐ-fÐÐ
­¥ÚÐ-gÐÐ
­¦ÚÐ-hÐÐ
­§ÚÐ-iÐÐ
­¨ÚÐ-jÐÐ
­©ÚÐ-kÐÐ
­ªÚÐ-lÐÐ
­«ÚÐ-ÐÐ
­¬ÚÐ-mÐÐ
­­ÚÐ-nÐÐ
­®ÚÐ-oÐÐ
­¯ÚÐ-pÐÐ
­°ÚÐ-qÐÐ
­±ÚÐ-rÐÐ
­²ÚÐ-ÐÐ
­³ÚÐ-sÐÐ
­´ÚÐ-tÐÐ
­µÚÐ-uÐÐ
­¶ÚÐ-vÐÐ
­·ÚÐ-wÐÐ
­¸ÚÐ-xÐÐ
­¹ÚÐ-ÐÐ
­…ÚÐ-yÐz{Ð E
3
ÞÐÐ
­CÚÐ-ÐÐ
­DÚÐ-ÐÐ
­EÚÐ-ÐÐ
­FÚÐ-ÐÐ
­GÚÐ-ÐÐ
­HÚÐ-ÐÐ
­õÚÐ-ÐÐ
­ºÚÐ-ÐÐ
­IÚÐ-ÐÐ
­öÚÐ-ÐÐ
­JÚÐ-ÐÐ
­KÚÐ-ÐÐ
­LÚÐ-ÐÐ
­MÚÐ-ÐÐ
­NÚÐ-ÐÐ
­OÚÐ-ÐÐ
­PÚÐ-ÐÐ
­QÚÐ-ÐÐ
­RÚÐ- ÐÐ
­SÚÐ-ÐÐ
­TÚÐ-!ÐÐ
­UÚÐ-"ÐÐ
­VÚÐ-#ÐÐ
­WÚÐ-$ÐÐ
­XÚÐ-%ÐÐ
­ÂÚÐ-ÐÐ
­YÚÐ-&ÐÐ
­ZÚÐ-'ÐÐ
­[ÚÐ-(ÐÐ
­\ÚÐ-)ÐÐ
­]ÚÐ-ÐÐ
­^ÚÐ-*ÐÐ
­_ÚÐ-+ÐÐ
­`ÚÐ-,ÐÐ
­aÚÐ--ÐÐ
­bÚÐ-ÐÐ
­cÚÐ-.ÐÐ
­dÚÐ-/ÐÐ
­eÚÐ-0ÐÐ
­fÚÐ-1ÐÐ
­gÚÐ-2ÐÐ
­hÚÐ-3ÐÐ
­iÚÐ-4ÐÐ
­jÚÐ-5ÐÐ
­kÚÐ-6ÐÐ
­lÚÐ-7ÐÐ
­mÚÐ-8ÐÐ
­nÚÐ-9ÐÐ
­oÚÐ-:ÐÐ
­pÚÐ-;ÐÐ
­qÚÐ-<ÐÐ
­rÚÐ-=ÐÐ
­sÚÐ-ÐÐ
­tÚÐ-*ÐÐ
­uÚÐ-+ÐÐ
­vÚÐ-,ÐÐ
­wÚÐ--ÐÐ
­xÚÐ-ÐÐ
­yÚÐ-.ÐÐ
­zÚÐ-/ÐÐ
­{ÚÐ-0ÐÐ
­|ÚÐ-1ÐÐ
­}ÚÐ-2ÐÐ
­~ÚÐ-3ÐÐ
­ÚÐ-4ÐÐ
­€ÚÐ-5ÐÐ
­ÚÐ-6ÐÐ
­‚ÚÐ-7ÐÐ
­ƒÚÐ-8ÐÐ
­„ÚÐ-9ÐÐ
­…ÚÐ-:ÐÐ
­†ÚÐ->ÐÐ
­‡ÚÐ-?ÐÐ
­ˆÚÐ-@ÐÐ
­‰ÚÐ-AÐÐ
­ŠÚÐ-BÐÐ
­‹ÚÐ-CÐÐ
­ŒÚÐ-DÐÐ
­ÚÐ-EÐÐ
­ÃÚÐ-FÐÐ
­¾ÚÐ-GÐÐ
­ÄÚÐ-#ÐÐ
­ÅÚÐ-$ÐÐ
­ÀÚÐ-%ÐÐ
­ÇÚÐ-&ÐÐ
­ÍÚÐ->ÐÐ
­ÎÚÐ-HÐÐ
­ÏÚÐ-IÐÐ
­ÐÚÐ-JÐÐ
­ÑÚÐ-KÐÐ
­ÒÚÐ-CÐÐ
­ÕÚÐ-LÐÐ
­ÖÚÐ-MÐÐ
­×ÚÐ-NÐÐ
­ØÚÐ-OÐÐ
­ÓÚÐ-PÐÐ
­ÈÚÐ-QÐÐ
­ôÚÐ-ÐÐ
­ŽÚÐ-RÐÐ
­ÜÚÐ-#ÐÐ
­ÝÚÐ-$ÐÐ
­ÞÚÐ-%ÐÐ
­ßÚÐ-&ÐÐ
­íÚÐ-SÐÐ
­áÚÐ-TÐÐ
­åÚÐ-CÐÐ
­æÚÐ-LÐÐ
­çÚÐ-UÐÐ
­èÚÐ-NÐÐ
­éÚÐ-VÐÐ
­êÚÐ-PÐÐ
­ÙÚÐ-WÐÐ
­ÚÐ-XÐÐ
­ÚÐ-YÐÐ
­A  ÚÐ-ZÐÐ
­B  ÚÐ-[ÐÐ
­‘ÚÐ-\ÐÐ
­’ÚÐ-]ÐÐ
­“ÚÐ-^ÐÐ
­”ÚÐ-_ÐÐ
­•ÚÐ-ÐÐ
­–ÚÐ-&ÐÐ
­—ÚÐ-`ÐÐ
­  ÚÐ-aÐÐ
­  ÚÐ-bÐÐ
­  ÚÐ-cÐÐ
­  ÚÐ-dÐÐ
­  ÚÐ-eÐÐ
­˜ÚÐ-fÐÐ
­  ÚÐ-aÐÐ
­  ÚÐ-bÐÐ
­  ÚÐ-cÐÐ
­   ÚÐ-gÐÐ
­  ÚÐ-hÐÐ
­™ÚÐ-iÐÐ
­ýÚÐ-jÐÐ
­  ÚÐ-kÐÐ
­þÚÐ-lÐÐ
­  ÚÐ-*ÐÐ
­  ÚÐ-mÐÐ
­  ÚÐ-nÐÐ
­  ÚÐ--ÐÐ
­  ÚÐ-ÐÐ
­  ÚÐ-.ÐÐ
­  ÚÐ-oÐÐ
­  ÚÐ-0ÐÐ
­  ÚÐ-1ÐÐ
­       ÚÐ-2ÐÐ
­
4
]ÐÐ
­ÚÚÐ-|ÐÐ
­ÛÚÐ-}ÐÐ
­ÜÚÐ-~ÐÐ
­ÝÚÐ-ÐÐ
­ÞÚÐ-€ÐÐ
­ßÚÐ-ÐÐ
­àÚÐ-‚ÐÐ
­áÚÐ-ƒÐÐ
­âÚÐ-„ÐÐ
­ãÚÐ-…ÐÐ
­äÚÐ-†ÐÐ
­åÚÐ-‡ÐÐ
­æÚÐ-ˆÐÐ
­çÚÐ-‰ÐÐ
­èÚÐ-ŠÐÐ
­éÚÐ-‹ÐÐ
­êÚÐ-ŒÐÐ
­ëÚÐ-ÐÐ
­ìÚÐ-ŽÐÐ
­íÚÐ-ÐÐ
­îÚÐ-ÐÐ
­ïÚÐ-‘ÐÐ
­ðÚÐ-’ÐÐ
­ñÚÐ-“ÐÐ
­òÚÐ-”ÐÐ
­óÚÐ-•ÐÐ
­ôÚÐ-–ÐÐ
­õÚÐ-—ÐÐ
­öÚÐ-˜ÐÐ
­÷ÚÐ-™ÐÐ
­øÚÐ-šÐÐ
­ùÚÐ-›ÐÐ
­úÚÐ-’ÐÐ
­ûÚÐ-œÐÐ
­üÚÐ-ÐÐ
­ýÚÐ-žÐÐ
­þÚÐ-ŸÐÐ
­ÿÚÐ- ÐÐ
­ÚÐ-¡ÐÐ
­ÚÐ-¢ÐÐ
­ÚÐ-£ÐÐ
­ÚÐ-¤ÐÐ
­ÚÐ-¥ÐÐ
­ÚÐ-¦ÐÐ
­ÚÐ-§ÐÐ
­ÚÐ-¨ÐÐ
­ÚÐ-©ÐÐ
­   ÚÐ-ªÐÐ
­
4
    ÚÐ-3ÐÐ
­  ÚÐ-4ÐÐ
­  ÚÐ-5ÐÐ
­
    ÚÐ-6ÐÐ
­  ÚÐ-7ÐÐ
­  ÚÐ-8ÐÐ
­  ÚÐ-9ÐÐ
­÷ÚÐ-:ÐÐ
­šÚÐ-pÐÐ
­  ÚÐ-qÐÐ
­  ÚÐ-@ÐÐ
­  ÚÐ-AÐÐ
­  ÚÐ-BÐÐ
­›ÚÐ-CÐÐ
­œÚÐ-DÐÐ
­ÚÐ-EÐÐ
­žÚÐ-rÐÐ
­"  ÚÐ-\ÐÐ
­#  ÚÐ-]ÐÐ
­.  ÚÐ-^ÐÐ
­$  ÚÐ-_ÐÐ
­%  ÚÐ-&ÐÐ
­&  ÚÐ-SÐÐ
­'  ÚÐ-sÐÐ
­(  ÚÐ-CÐÐ
­)  ÚÐ-LÐÐ
­*  ÚÐ-UÐÐ
­+  ÚÐ-NÐÐ
­,  ÚÐ-tÐÐ
­-  ÚÐ-PÐÐ
­!  ÚÐ-WÐÐ
­ ÚÐ-uÐÐ
­>  ÚÐ-\ÐÐ
­?  ÚÐ-]ÐÐ
­@  ÚÐ-^ÐÐ
­1  ÚÐ-_ÐÐ
­2  ÚÐ-&ÐÐ
­3  ÚÐ->ÐÐ
­4  ÚÐ-vÐÐ
­5  ÚÐ-wÐÐ
­6  ÚÐ-xÐÐ
­7  ÚÐ-yÐÐ
­8  ÚÐ-CÐÐ
­9  ÚÐ-LÐÐ
­:  ÚÐ-zÐÐ
­;  ÚÐ-NÐÐ
­<  ÚÐ-{ÐÐ
­=  ÚÐ-PÐÐ
­¡ÚÐ-QÐÐ
­¢ÚÐ-|ÐÐ
­£ÚÐ-}ÐÐ
­¤ÚÐ-~ÐÐ
­¥ÚÐ-ÐÐ
­¦ÚÐ-€ÐÐ
­§ÚÐ-ÐÐ
­¨ÚÐ-‚ÐÐ
­©ÚÐ-ƒÐÐ
­ªÚÐ-„ÐÐ
­«ÚÐ-ÐÐ
­¬ÚÐ-…ÐÐ
­­ÚÐ-†ÐÐ
­®ÚÐ-‡ÐÐ
­¯ÚÐ-ˆÐÐ
­°ÚÐ-‰ÐÐ
­±ÚÐ-ŠÐÐ
­²ÚÐ-ÐÐ
­³ÚÐ-‹ÐÐ
­´ÚÐ-ŒÐÐ
­µÚÐ-ÐÐ
­¶ÚÐ-ŽÐÐ
­·ÚÐ-ÐÐ
­¸ÚÐ-ÐÐ
­¹ÚÐ-ÐÐ
­…ÚÐ-‘В“Ð  E
5
ÚÐ-«ÐÐ
­ÚÐ-¬ÐÐ
­ÚÐ-­ÐÐ
­
ÚÐ-®ÐÐ
­ÚÐ-¨ÐÐ
­ÚÐ-¯ÐÐ
­ÚÐ-°ÐÐ
­ÚÐ-±ÐÐ
­ÚÐ-²ÐÐ
­ÚÐ-³ÐÐ
­ÚÐ-´ÐÐ
­ÚÐ-µÐÐ
­ÚÐ-¶ÐÐ
­ÚÐ-·ÐÐ
­ÚÐ-¸ÐÐ
­ÚÐ-¹ÐÐ
­ÚÐ-ºÐÐ
­ÚÐ-»ÐÐ
­ÚÐ-¼ÐÐ
­ÚÐ-½ÐÐ
­ÚÐ-¾ÐÐ
­ÚÐ-¿ÐÐ
­ ÚÐ-ÀÐÐ
­!ÚÐ-ÁÐÐ
­"ÚÐ-ÂÐÐ
­#ÚÐ-ÃÐÐ
­$ÚÐ-ÄÐÐ
­%ÚÐ-ÅÐÐ
­&ÚÐ-ÆÐÐ
­'ÚÐ-ÇÐÐ
­(ÚÐ-ÈÐÐ
­)ÚÐ-ÉÐÐ
­*ÚÐ-ÊÐÐ
­+ÚÐ-ËÐÐ
­,ÚÐ-ÌÐÐ
­7ÚÐ-ÍÐÐ
­8ÚÐ-ÎÐÐ
­9ÚÐ-ÏÐÐ
­:ÚÐ-ÐÐÐ
­;ÚÐ-ÑÐÐ
­?ÚÐ-ÒÐÐ
­@ÚÐ-ÓÐÐ
­AÚÐ-ÔÐÐ
­BÚÐ-ÕÐÐ
­kÚÐ-¨ÐÖ-×ÐØÙ-ÚÛÜÐÝÞ
5
]ÐÐ
­ÚÚÐ-”ÐÐ
­ÛÚÐ-•ÐÐ
­ÜÚÐ-–ÐÐ
­ÝÚÐ-—ÐÐ
­ÞÚÐ-˜ÐÐ
­ßÚÐ-™ÐÐ
­àÚÐ-šÐÐ
­áÚÐ-›ÐÐ
­âÚÐ-œÐÐ
­ãÚÐ-ÐÐ
­äÚÐ-žÐÐ
­åÚÐ-ŸÐÐ
­æÚÐ- ÐÐ
­çÚÐ-¡ÐÐ
­èÚÐ-¢ÐÐ
­éÚÐ-£ÐÐ
­êÚÐ-¤ÐÐ
­ëÚÐ-¥ÐÐ
­ìÚÐ-¦ÐÐ
­íÚÐ-§ÐÐ
­îÚÐ-¨ÐÐ
­ïÚÐ-©ÐÐ
­ðÚÐ-ªÐÐ
­ñÚÐ-«ÐÐ
­òÚÐ-¬ÐÐ
­óÚÐ-­ÐÐ
­ôÚÐ-®ÐÐ
­õÚÐ-¯ÐÐ
­öÚÐ-°ÐÐ
­÷ÚÐ-±ÐÐ
­øÚÐ-²ÐÐ
­ùÚÐ-³ÐÐ
­úÚÐ-ªÐÐ
­ûÚÐ-´ÐÐ
­üÚÐ-µÐÐ
­ýÚÐ-¶ÐÐ
­þÚÐ-·ÐÐ
­ÿÚÐ-¸ÐÐ
­ÚÐ-¹ÐÐ
­ÚÐ-ºÐÐ
­ÚÐ-»ÐÐ
­ÚÐ-¼ÐÐ
­ÚÐ-½ÐÐ
­ÚÐ-¾ÐÐ
­ÚÐ-¿ÐÐ
­ÚÐ-ÀÐÐ
­ÚÐ-ÁÐÐ
­   ÚÐ-ÂÐÐ
­
6
ÚÐ-ÃÐÐ
­ÚÐ-ÄÐÐ
­ÚÐ-ÅÐÐ
­
ÚÐ-ÆÐÐ
­ÚÐ-ÀÐÐ
­ÚÐ-ÇÐÐ
­ÚÐ-ÈÐÐ
­ÚÐ-ÉÐÐ
­ÚÐ-ÊÐÐ
­ÚÐ-ËÐÐ
­ÚÐ-ÌÐÐ
­ÚÐ-ÍÐÐ
­ÚÐ-ÎÐÐ
­ÚÐ-ÏÐÐ
­ÚÐ-ÐÐÐ
­ÚÐ-ÑÐÐ
­ÚÐ-ÒÐÐ
­ÚÐ-ÓÐÐ
­ÚÐ-ÔÐÐ
­ÚÐ-ÕÐÐ
­ÚÐ-ÖÐÐ
­ÚÐ-×ÐÐ
­ ÚÐ-ØÐÐ
­!ÚÐ-ÙÐÐ
­"ÚÐ-ÚÐÐ
­#ÚÐ-ÛÐÐ
­$ÚÐ-ÜÐÐ
­%ÚÐ-ÝÐÐ
­&ÚÐ-ÞÐÐ
­'ÚÐ-ßÐÐ
­(ÚÐ-àÐÐ
­)ÚÐ-áÐÐ
­*ÚÐ-âÐÐ
­+ÚÐ-ãÐÐ
­,ÚÐ-äÐÐ
­7ÚÐ-åÐÐ
­8ÚÐ-æÐÐ
­9ÚÐ-çÐÐ
­:ÚÐ-èÐÐ
­;ÚÐ-éÐÐ
­?ÚÐ-êÐÐ
­@ÚÐ-ëÐÐ
­AÚÐ-ìÐÐ
­BÚÐ-íÐÐ
­kÚÐ-ÀÐî-ïÐðñ-òóôÐõö