[r389]: / trunk / Library / POUs / FB_TestSuite / AssertEquals / svnobj  Maximize  Restore  History

Download this file

405 lines (405 with data), 45.0 kB

Gx_l²¯!0…jüoùˆ*1ˆ›‘&É¦	System.StringL{f8a58466-d7f6-439f-bbb8-d4600e41d099}ImplementationL{3b83b776-fb25-43b8-99f2-3c507c9143fc}TextDocumentL{f3878285-8e4f-490b-bb1b-9acbb7eb04db}TextLinesL{a5de0b0b-1cb5-4913-ac21-9d70293ec00d}	Id
longTagText
IF GVL_CfUnit.IgnoreCurrentTest OR GVL_CfUnit.CurrentTestIsFinished THEN    RETURN;END_IF(*–    This compares two instances of any object type and returns whether they     are the same type, size and value or not. This is necessary for two reasons:     1. So that we can know exactly what differs between the two input parameters¨    2. It's not possible to do a comparison (= or <>) between two instances of ANY. *)d(* Check whether the type of the inputs differs *)\IF Expected.TypeClass <> Actual.TypeClass THEN>    DataTypesNotEquals := TRUE;(* V	For STRING & WSTRING we make an exception,„	we skip checking them on size and start comparing them on content–IF    UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_STRING¢   OR UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_WSTRING THEN    	(* STRING *)!œ	IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_STRING THEN"Ö		MEMCPY(destAddr := ADR(stringExpected), srcAddr := Expected.pValue, n := DINT_TO_UDINT(Expected.diSize));#Ê		MEMCPY(destAddr := ADR(stringActual), srcAddr := Actual.pValue, n := DINT_TO_UDINT(Actual.diSize));$¼		AssertEquals_STRING(Expected := stringExpected, Actual := stringActual, Message := Message);%		RETURN;&	END_IF'	(	(* WSTRING *))ž	IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_WSTRING THEN*Ø		MEMCPY(destAddr := ADR(wstringExpected), srcAddr := Expected.pValue, n := DINT_TO_UDINT(Expected.diSize));+Ì		MEMCPY(destAddr := ADR(wstringActual), srcAddr := Actual.pValue, n := DINT_TO_UDINT(Actual.diSize));,Â		AssertEquals_WSTRING(Expected := wstringExpected, Actual := wstringActual, Message := Message);-ELSE.f	(* Check whether the size of the inputs differs *)/>	IF NOT DataTypesNotEquals THEN0X		IF (Expected.diSize <> Actual.diSize) THEN1:			DataSizeNotEquals := TRUE;2		END_IF3¤(* Even though the data type and size are equals, the contents may still differ *)4pIF NOT DataTypesNotEquals AND NOT DataSizeNotEquals THEN5R    // Compare each byte in the ANY-types6v    FOR IteratorCounter := 0 TO Expected.diSize - 1 BY 1 DO7¤        IF Expected.pValue[IteratorCounter] <> Actual.pValue[IteratorCounter] THEN8R            DataContentNotEquals := TRUE;9"            EXIT;:        END_IF;    END_FOR<Ì(* First check whether the input data are any of the standard data types that are supported by TcUnit.=Ô   In this case call the standard Assert-methods for that data. But before doing that we need to make sure>J   that both the expected and actual:?B   - Have both the same data type@B   - Both have the same data sizeA    (* BOOL *)Bž    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_BOOL THENC®		MEMCPY(destAddr := ADR(boolExpected), srcAddr := Expected.pValue, n := SIZEOF(BOOL));D²        MEMCPY(destAddr := ADR(boolActual), srcAddr := Actual.pValue, n := SIZEOF(BOOL));E¼        AssertEquals_BOOL(Expected := boolExpected, Actual := boolActual, Message := Message);F        RETURN;G    END_IFH    (* BYTE *)Iž    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_BYTE THENJº        MEMCPY(destAddr := ADR(byteExpected), srcAddr := Expected.pValue, n := SIZEOF(BYTE));K²        MEMCPY(destAddr := ADR(byteActual), srcAddr := Actual.pValue, n := SIZEOF(BYTE));L¼        AssertEquals_BYTE(Expected := byteExpected, Actual := byteActual, Message := Message);M    (* DATE *)Nž    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_DATE THENOº        MEMCPY(destAddr := ADR(dateExpected), srcAddr := Expected.pValue, n := SIZEOF(DATE));P²        MEMCPY(destAddr := ADR(dateActual), srcAddr := Actual.pValue, n := SIZEOF(DATE));Q¼        AssertEquals_DATE(Expected := dateExpected, Actual := dateActual, Message := Message);R.    (* DATE_AND_TIME *)S¬    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_DATEANDTIME THENTÚ        MEMCPY(destAddr := ADR(dateAndTimeExpected), srcAddr := Expected.pValue, n := SIZEOF(DATE_AND_TIME));UÒ        MEMCPY(destAddr := ADR(dateAndTimeActual), srcAddr := Actual.pValue, n := SIZEOF(DATE_AND_TIME));Vê        AssertEquals_DATE_AND_TIME(Expected := dateAndTimeExpected, Actual := dateAndTimeActual, Message := Message);W    (* DINT *)Xž    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_DINT THENYº        MEMCPY(destAddr := ADR(dintExpected), srcAddr := Expected.pValue, n := SIZEOF(DINT));Z²        MEMCPY(destAddr := ADR(dintActual), srcAddr := Actual.pValue, n := SIZEOF(DINT));[¼        AssertEquals_DINT(Expected := dintExpected, Actual := dintActual, Message := Message);\    (* DWORD *)]     IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_DWORD THEN^¾        MEMCPY(destAddr := ADR(dwordExpected), srcAddr := Expected.pValue, n := SIZEOF(DWORD));_¶        MEMCPY(destAddr := ADR(dwordActual), srcAddr := Actual.pValue, n := SIZEOF(DWORD));`        AssertEquals_DWORD(Expected := dwordExpected, Actual := dwordActual, Message := Message);a    (* INT *)bœ    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_INT THENc¶        MEMCPY(destAddr := ADR(intExpected), srcAddr := Expected.pValue, n := SIZEOF(INT));d®        MEMCPY(destAddr := ADR(intActual), srcAddr := Actual.pValue, n := SIZEOF(INT));e¶        AssertEquals_INT(Expected := intExpected, Actual := intActual, Message := Message);f    (* LINT *)gž    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_LINT THENhº        MEMCPY(destAddr := ADR(lintExpected), srcAddr := Expected.pValue, n := SIZEOF(LINT));i²        MEMCPY(destAddr := ADR(lintActual), srcAddr := Actual.pValue, n := SIZEOF(LINT));j¼        AssertEquals_LINT(Expected := lintExpected, Actual := lintActual, Message := Message);k    (* LREAL *)l     IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_LREAL THENm¾        MEMCPY(destAddr := ADR(lrealExpected), srcAddr := Expected.pValue, n := SIZEOF(LREAL));n¶        MEMCPY(destAddr := ADR(lrealActual), srcAddr := Actual.pValue, n := SIZEOF(LREAL));oÞ        AssertEquals_LREAL(Expected := lrealExpected, Actual := lrealActual, Delta := 0.0, Message := Message);p    (* LTIME *)q     IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_LTIME THENr¾        MEMCPY(destAddr := ADR(ltimeExpected), srcAddr := Expected.pValue, n := SIZEOF(LTIME));s¶        MEMCPY(destAddr := ADR(ltimeActual), srcAddr := Actual.pValue, n := SIZEOF(LTIME));t        AssertEquals_LTIME(Expected := ltimeExpected, Actual := ltimeActual, Message := Message);u    (* LWORD *)v     IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_LWORD THENw¾        MEMCPY(destAddr := ADR(lwordExpected), srcAddr := Expected.pValue, n := SIZEOF(LWORD));x¶        MEMCPY(destAddr := ADR(lwordActual), srcAddr := Actual.pValue, n := SIZEOF(LWORD));y        AssertEquals_LWORD(Expected := lwordExpected, Actual := lwordActual, Message := Message);z    (* REAL *){ž    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_REAL THEN|º        MEMCPY(destAddr := ADR(realExpected), srcAddr := Expected.pValue, n := SIZEOF(REAL));}²        MEMCPY(destAddr := ADR(realActual), srcAddr := Actual.pValue, n := SIZEOF(REAL));~Ø        AssertEquals_REAL(Expected := realExpected, Actual := realActual, Delta := 0.0, Message := Message);    (* SINT *)€ž    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_SINT THENº        MEMCPY(destAddr := ADR(sintExpected), srcAddr := Expected.pValue, n := SIZEOF(SINT));‚²        MEMCPY(destAddr := ADR(sintActual), srcAddr := Actual.pValue, n := SIZEOF(SINT));ƒ¼        AssertEquals_SINT(Expected := sintExpected, Actual := sintActual, Message := Message);„$   // (* STRING *)…¦   // IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_STRING THEN†æ   //     MEMCPY(destAddr := ADR(stringExpected), srcAddr := Expected.pValue, n := DINT_TO_UDINT(Expected.diSize));‡Ú   //     MEMCPY(destAddr := ADR(stringActual), srcAddr := Actual.pValue, n := DINT_TO_UDINT(Actual.diSize));ˆÌ   //     AssertEquals_STRING(Expected := stringExpected, Actual := stringActual, Message := Message);‰"   //     RETURN;Š   // END_IF‹	//Œ 	//(* WSTRING *)¨   // IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_WSTRING THENŽè   //     MEMCPY(destAddr := ADR(wstringExpected), srcAddr := Expected.pValue, n := DINT_TO_UDINT(Expected.diSize));Ü   //     MEMCPY(destAddr := ADR(wstringActual), srcAddr := Actual.pValue, n := DINT_TO_UDINT(Actual.diSize));Ò   //     AssertEquals_WSTRING(Expected := wstringExpected, Actual := wstringActual, Message := Message);‘    (* TIME *)’ž    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_TIME THEN“º        MEMCPY(destAddr := ADR(timeExpected), srcAddr := Expected.pValue, n := SIZEOF(TIME));”²        MEMCPY(destAddr := ADR(timeActual), srcAddr := Actual.pValue, n := SIZEOF(TIME));•¼        AssertEquals_TIME(Expected := timeExpected, Actual := timeActual, Message := Message);–*    (* TIME_OF_DAY *)—¨    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_TIMEOFDAY THEN˜Ò        MEMCPY(destAddr := ADR(timeOfDayExpected), srcAddr := Expected.pValue, n := SIZEOF(TIME_OF_DAY));™Ê        MEMCPY(destAddr := ADR(timeOfDayActual), srcAddr := Actual.pValue, n := SIZEOF(TIME_OF_DAY));šÞ        AssertEquals_TIME_OF_DAY(Expected := timeOfDayExpected, Actual := timeOfDayActual, Message := Message);›    (* UDINT *)œ     IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_UDINT THEN¾        MEMCPY(destAddr := ADR(udintExpected), srcAddr := Expected.pValue, n := SIZEOF(UDINT));ž¶        MEMCPY(destAddr := ADR(udintActual), srcAddr := Actual.pValue, n := SIZEOF(UDINT));ŸÂ        AssertEquals_UDINT(Expected := udintExpected, Actual := udintActual, Message := Message);     (* UINT *)¡ž    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_UINT THEN¢º        MEMCPY(destAddr := ADR(uintExpected), srcAddr := Expected.pValue, n := SIZEOF(UINT));£²        MEMCPY(destAddr := ADR(uintActual), srcAddr := Actual.pValue, n := SIZEOF(UINT));¤¼        AssertEquals_UINT(Expected := uintExpected, Actual := uintActual, Message := Message);¥    (* ULINT *)¦     IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_ULINT THEN§¾        MEMCPY(destAddr := ADR(ulintExpected), srcAddr := Expected.pValue, n := SIZEOF(ULINT));¨¶        MEMCPY(destAddr := ADR(ulintActual), srcAddr := Actual.pValue, n := SIZEOF(ULINT));©Â        AssertEquals_ULINT(Expected := ulintExpected, Actual := ulintActual, Message := Message);ª    (* USINT *)«     IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_USINT THEN¬¾        MEMCPY(destAddr := ADR(usintExpected), srcAddr := Expected.pValue, n := SIZEOF(USINT));­¶        MEMCPY(destAddr := ADR(usintActual), srcAddr := Actual.pValue, n := SIZEOF(USINT));®Â        AssertEquals_USINT(Expected := usintExpected, Actual := usintActual, Message := Message);¯    (* WORD *)°ž    IF UDINT_TO_INT(Expected.TypeClass) = IBaseLibrary.TypeClass.TYPE_WORD THEN±º        MEMCPY(destAddr := ADR(wordExpected), srcAddr := Expected.pValue, n := SIZEOF(WORD));²²        MEMCPY(destAddr := ADR(wordActual), srcAddr := Actual.pValue, n := SIZEOF(WORD));³¼        AssertEquals_WORD(Expected := wordExpected, Actual := wordActual, Message := Message);´è(* If we've come to this row, it means that the data input is not any of the standard primitive data types, and thusµH   we need to do special handling *)¶¾TestInstancePath := AddTestNameToInstancePath(TestInstancePath := FINDTestSuiteInstancePath());·4IF DataTypesNotEquals THEN¸â    ExpectedDataString := CONCAT(STR1 := '(Type class = ', STR2 := F_AnyTypeClassToString((Expected.TypeClass)));¹”    ExpectedDataString := CONCAT(STR1 := ExpectedDataString, STR2 := ')');ºÖ    ActualDataString := CONCAT(STR1 := '(Type class = ', STR2 := F_AnyTypeClassToString(Actual.TypeClass));»Œ    ActualDataString := CONCAT(STR1 := ActualDataString, STR2 := ')');¼8ELSIF DataSizeNotEquals THEN½Ä    ExpectedDataString := CONCAT(STR1 := 'Data size = ', STR2 := DINT_TO_STRING(Expected.diSize));¾¼    ActualDataString := CONCAT(STR1 := 'Data size = ', STR2 := DINT_TO_STRING(Actual.diSize));¿>ELSIF DataContentNotEquals THENÀü    FOR Count := 0 TO MIN(Expected.diSize-1, 38) BY 1 DO // One byte will equal two characters (example: 255 = 0xff, 1 = 0x01)Á€        ExpectedDataString := CONCAT(STR1 := ExpectedDataString,ÂÌ                                                  STR2 := BYTE_TO_HEXSTR(in := Expected.pValue[Count],ÃÎ                                                                                       iPrecision := 2,ÄÔ                                                                                       bLoCase := FALSE));Å–    ExpectedDataString := CONCAT(STR1 := '0x', STR2 := ExpectedDataString);Æø    FOR Count := 0 TO MIN(Actual.diSize-1, 38) BY 1 DO // One byte will equal two characters (example: 255 = 0xff, 1 = 0x01)Çx        ActualDataString := CONCAT(STR1 := ActualDataString,ÈÄ                                                STR2 := BYTE_TO_HEXSTR(in := Actual.pValue[Count],ÉÊ                                                                                     iPrecision := 2,ÊÐ                                                                                     bLoCase := FALSE));ËŽ    ActualDataString := CONCAT(STR1 := '0x', STR2 := ActualDataString);Ì”AssertResults.ReportResult(ExpectedSize := DINT_TO_UDINT(Expected.diSize),Í¢                           ExpectedTypeClass := UDINT_TO_INT(Expected.TypeClass),Îx                           ExpectedValue := Expected.pValue,ÏŒ                           ActualSize := DINT_TO_UDINT(Actual.diSize),К                           ActualTypeClass := UDINT_TO_INT(Actual.TypeClass),Ñp                           ActualValue := Actual.pValue,Ò\                           Message := Message,Ó€                           TestInstancePath := TestInstancePath,Ô~                           AlreadyReported => AlreadyReported);ÕÂIF NOT AlreadyReported AND (DataTypesNotEquals OR DataSizeNotEquals OR DataContentNotEquals) THENÖx    SetTestFailed(AssertionType := E_AssertionType.Type_ANY,×^                  AssertionMessage := Message);Ø–    AssertMessageFormatter.LogAssertFailure(Expected := ExpectedDataString,ÙŽ                                            Actual := ActualDataString,Ú~                                            Message := Message,Û¤                                            TestInstancePath := TestInstancePath);ÜInterfaceÝL{a9ed5b7e-75c5-4651-af16-d2c27e98cb94}ÞÌ(* | Asserts that two objects (of any type) are equal. If they are not, an assertion error is created.ß° | STRING/WSTRING's a treated different, they are only compared textual and on datatype.àÎ | For REAL and LREAL it s recommended to use the AssertEquals_REAL or AssertEquals_LREAL respectively á´ | as these give the possibility to specify a delta between the expected and actual value.â Parameters:ã@     | Expected   Expected valueä8     | Actual   Actual valueå€     | Message   The identifying message for the assertion erroræ$ Positive example:ç0 .. code-block:: codesysè     VARé,         a : INT := 5;ê,         b : INT := 5;ë     END_VARì:     TEST('Test_ANY_Equals');í@     AssertEquals(Expected := a,î<                  Actual := b,ï\                  Message := 'Values differ');ð*     TEST_FINISHED();ñ" Failing example:ò.         b : UINT := 5;óL     TEST('Test_ANY_Differ_DataType');ô4METHOD PUBLIC AssertEqualsõVAR_INPUTöJ    Expected : ANY; // Expected value÷p    Actual : ANY; // The value to check against expectedøš    Message : T_MaxString; // The identifying message for the assertion errorùEND_VARúVARû"    Count : DINT;üH    ExpectedDataString : STRING(80);ýD    ActualDataString : STRING(80);þF    TestInstancePath : T_MaxString;ÿ6    AlreadyReported : BOOL;€0    boolExpected : BOOL;,    boolActual : BOOL;‚0    byteExpected : BYTE;ƒ,    byteActual : BYTE;„0    dateExpected : DATE;…,    dateActual : DATE;†P    dateAndTimeExpected : DATE_AND_TIME;‡L    dateAndTimeActual : DATE_AND_TIME;ˆ0    dintExpected : DINT;‰,    dintActual : DINT;Š4    dwordExpected : DWORD;‹0    dwordActual : DWORD;Œ,    intExpected : INT;(    intActual : INT;Ž0    lintExpected : LINT;,    lintActual : LINT;4    lrealExpected : LREAL;‘0    lrealActual : LREAL;’4    ltimeExpected : LTIME;“0    ltimeActual : LTIME;”4    lwordExpected : LWORD;•0    lwordActual : LWORD;–0    realExpected : REAL;—,    realActual : REAL;˜0    sintExpected : SINT;™,    sintActual : SINT;šB    stringExpected : T_MaxString;›>    stringActual : T_MaxString;œ@	wstringExpected : WSTRING(255);B    wstringActual : WSTRING(255);ž0    timeExpected : TIME;Ÿ,    timeActual : TIME; H    timeOfDayExpected : TIME_OF_DAY;¡D    timeOfDayActual : TIME_OF_DAY;¢4    udintExpected : UDINT;£0    udintActual : UDINT;¤0    uintExpected : UINT;¥,    uintActual : UINT;¦4    ulintExpected : ULINT;§0    ulintActual : ULINT;¨4    usintExpected : USINT;©0    usintActual : USINT;ª0    wordExpected : WORD;«,    wordActual : WORD;¬    ­D    (* ANY comparison variables *)®º    DataTypesNotEquals : BOOL; // The data type of the two ANY input parameters are not equal¯¸    DataSizeNotEquals : BOOL; // The data size of the two ANY input parameters are not equal°Ä    DataContentNotEquals : BOOL; // The data content of the two ANY input parameters are not equal±6    IteratorCounter : DINT;ÐÐÐEªÐÐ	
­ÜÚÐ-
ÐÐ	
­ÝÚÐ-ÐÐ	
­ÞÚÐ-ÐÐ	
­ßÚÐ-ÐÐ	
­àÚÐ-ÐÐ	
­áÚÐ-ÐÐ	
­âÚÐ-ÐÐ	
­ãÚÐ-ÐÐ	
­äÚÐ-ÐÐ	
­åÚÐ-ÐÐ	
­ÚÐ-ÐÐ	
­æÚÐ-ÐÐ	
­çÚÐ-ÐÐ	
­èÚÐ-ÐÐ	
­éÚÐ-ÐÐ	
­êÚÐ-ÐÐ	
­ëÚÐ-ÐÐ	
­ÚÐ-ÐÐ	
­ÚÐ-ÐÐ	
­ÚÐ-ÐÐ	
­ìÚÐ-ÐÐ	
­íÚÐ-ÐÐ	
­îÚÐ-ÐÐ	
­ïÚÐ- ÐÐ	
­ðÚÐ-!ÐÐ	
­ñÚÐ-"ÐÐ	
­òÚÐ-#ÐÐ	
­óÚÐ-$ÐÐ	
­ôÚÐ-%ÐÐ	
­õÚÐ-&ÐÐ	
­öÚÐ-'ÐÐ	
­÷ÚÐ-(ÐÐ	
­øÚÐ-)ÐÐ	
­ùÚÐ-*ÐÐ	
­úÚÐ-+ÐÐ	
­ûÚÐ-,ÐÐ	
­üÚÐ-%ÐÐ	
­ýÚÐ-&ÐÐ	
­þÚÐ-'ÐÐ	
­ÿÚÐ--ÐÐ	
­ÚÐ-.ÐÐ	
­ÚÐ-/ÐÐ	
­ÚÐ-0ÐÐ	
­ÚÐ-1ÐÐ	
­ÚÐ-2ÐÐ	
­ÚÐ-&ÐÐ	
­ÚÐ-ÐÐ	
­ÚÐ-ÐÐ	
­ÚÐ-ÐÐ	
­	ÚÐ-3ÐÐ	
­
ÚÐ-4ÐÐ	
­ÚÐ-5ÐÐ	
­ÚÐ-6ÐÐ	
­
ÚÐ-7ÐÐ	
­ÚÐ-8ÐÐ	
­ÚÐ-9ÐÐ	
­ÚÐ-:ÐÐ	
­ÚÐ-;ÐÐ	
­ÚÐ-ÐÐ	
­ÚÐ-ÐÐ	
­ÚÐ-<ÐÐ	
­ÚÐ-=ÐÐ	
­ÚÐ->ÐÐ	
­ÚÐ-?ÐÐ	
­ÚÐ-@ÐÐ	
­ÚÐ-ÐÐ	
­ÚÐ-4ÐÐ	
­ÚÐ-ÐÐ	
­ÚÐ-AÐÐ	
­ÚÐ-BÐÐ	
­ÚÐ-CÐÐ	
­ÚÐ-ÐÐ	
­ ÚÐ-DÐÐ	
­!ÚÐ-EÐÐ	
­"ÚÐ-FÐÐ	
­#ÚÐ-GÐÐ	
­$ÚÐ-ÐÐ	
­%ÚÐ-HÐÐ	
­&ÚÐ-IÐÐ	
­'ÚÐ-JÐÐ	
­(ÚÐ-KÐÐ	
­)ÚÐ-LÐÐ	
­*ÚÐ-FÐÐ	
­+ÚÐ-GÐÐ	
­,ÚÐ-ÐÐ	
­-ÚÐ-MÐÐ	
­.ÚÐ-NÐÐ	
­/ÚÐ-OÐÐ	
­0ÚÐ-PÐÐ	
­1ÚÐ-QÐÐ	
­2ÚÐ-FÐÐ	
­3ÚÐ-GÐÐ	
­4ÚÐ-ÐÐ	
­5ÚÐ-RÐÐ	
­6ÚÐ-SÐÐ	
­7ÚÐ-TÐÐ	
­8ÚÐ-UÐÐ	
­9ÚÐ-VÐÐ	
­:ÚÐ-FÐÐ	
­;ÚÐ-GÐÐ	
­<ÚÐ-ÐÐ	
­=ÚÐ-WÐÐ	
­>ÚÐ-XÐÐ	
­?ÚÐ-YÐÐ	
­@ÚÐ-ZÐÐ	
­AÚÐ-[ÐÐ	
­BÚÐ-FÐÐ	
­CÚÐ-GÐÐ	
­DÚÐ-ÐÐ	
­EÚÐ-\ÐÐ	
­FÚÐ-]ÐÐ	
­GÚÐ-^ÐÐ	
­HÚÐ-_ÐÐ	
­IÚÐ-`ÐÐ	
­JÚÐ-FÐÐ	
­KÚÐ-GÐÐ	
­LÚÐ-ÐÐ	
­MÚÐ-aÐÐ	
­NÚÐ-bÐÐ	
­OÚÐ-cÐÐ	
­PÚÐ-dÐÐ	
­QÚÐ-eÐÐ	
­RÚÐ-FÐÐ	
­SÚÐ-GÐÐ	
­TÚÐ-ÐÐ	
­UÚÐ-fÐÐ	
­VÚÐ-gÐÐ	
­WÚÐ-hÐÐ	
­XÚÐ-iÐÐ	
­YÚÐ-jÐÐ	
­ZÚÐ-FÐÐ	
­[ÚÐ-GÐÐ	
­\ÚÐ-ÐÐ	
­]ÚÐ-kÐÐ	
­^ÚÐ-lÐÐ	
­_ÚÐ-mÐÐ	
­`ÚÐ-nÐÐ	
­aÚÐ-oÐÐ	
­bÚÐ-FÐÐ	
­cÚÐ-GÐÐ	
­dÚÐ-ÐÐ	
­eÚÐ-pÐÐ	
­fÚÐ-qÐÐ	
­gÚÐ-rÐÐ	
­hÚÐ-sÐÐ	
­iÚÐ-tÐÐ	
­jÚÐ-FÐÐ	
­kÚÐ-GÐÐ	
­lÚÐ-ÐÐ	
­mÚÐ-uÐÐ	
­nÚÐ-vÐÐ	
­oÚÐ-wÐÐ	
­pÚÐ-xÐÐ	
­qÚÐ-yÐÐ	
­rÚÐ-FÐÐ	
­sÚÐ-GÐÐ	
­tÚÐ-ÐÐ	
­uÚÐ-zÐÐ	
­vÚÐ-{ÐÐ	
­wÚÐ-|ÐÐ	
­xÚÐ-}ÐÐ	
­yÚÐ-~ÐÐ	
­zÚÐ-FÐÐ	
­{ÚÐ-GÐÐ	
­|ÚÐ-ÐÐ	
­}ÚÐ-ÐÐ	
­~ÚÐ-€ÐÐ	
­ÚÐ-ÐÐ	
­€ÚÐ-‚ÐÐ	
­ÚÐ-ƒÐÐ	
­‚ÚÐ-FÐÐ	
­ƒÚÐ-GÐÐ	
­„ÚÐ-ÐÐ	
­…ÚÐ-„ÐÐ	
­†ÚÐ-…ÐÐ	
­‡ÚÐ-†ÐÐ	
­ˆÚÐ-‡ÐÐ	
­‰ÚÐ-ˆÐÐ	
­ŠÚÐ-‰ÐÐ	
­‹ÚÐ-ŠÐÐ	
­ŒÚÐ-‹ÐÐ	
­ÚÐ-ŒÐÐ	
­ŽÚÐ-ÐÐ	
­ÚÐ-ŽÐÐ	
­ÚÐ-ÐÐ	
­‘ÚÐ-ÐÐ	
­’ÚÐ-‰ÐÐ	
­“ÚÐ-ŠÐÐ	
­”ÚÐ-ÐÐ	
­•ÚÐ-‘ÐÐ	
­–ÚÐ-’ÐÐ	
­—ÚÐ-“ÐÐ	
­˜ÚÐ-”ÐÐ	
­™ÚÐ-•ÐÐ	
­šÚÐ-FÐÐ	
­›ÚÐ-GÐÐ	
­œÚÐ-ÐÐ	
­ÚÐ-–ÐÐ	
­žÚÐ-—ÐÐ	
­ŸÚÐ-˜ÐÐ	
­ ÚÐ-™ÐÐ	
­¡ÚÐ-šÐÐ	
­¢ÚÐ-FÐÐ	
­£ÚÐ-GÐÐ	
­¤ÚÐ-ÐÐ	
­¥ÚÐ-›ÐÐ	
­¦ÚÐ-œÐÐ	
­§ÚÐ-ÐÐ	
­¨ÚÐ-žÐÐ	
­©ÚÐ-ŸÐÐ	
­ªÚÐ-FÐÐ	
­«ÚÐ-GÐÐ	
­¬ÚÐ-ÐÐ	
­­ÚÐ- ÐÐ	
­®ÚÐ-¡ÐÐ	
­¯ÚÐ-¢ÐÐ	
­°ÚÐ-£ÐÐ	
­±ÚÐ-¤ÐÐ	
­²ÚÐ-FÐÐ	
­³ÚÐ-GÐÐ	
­´ÚÐ-ÐÐ	
­µÚÐ-¥ÐÐ	
­¶ÚÐ-¦ÐÐ	
­·ÚÐ-§ÐÐ	
­¸ÚÐ-¨ÐÐ	
­¹ÚÐ-©ÐÐ	
­ºÚÐ-FÐÐ	
­»ÚÐ-GÐÐ	
­¼ÚÐ-ÐÐ	
­½ÚÐ-ªÐÐ	
­¾ÚÐ-«ÐÐ	
­¿ÚÐ-¬ÐÐ	
­ÀÚÐ-­ÐÐ	
­ÁÚÐ-®ÐÐ	
­ÂÚÐ-FÐÐ	
­ÃÚÐ-GÐÐ	
­ÄÚÐ-ÐÐ	
­ÅÚÐ-¯ÐÐ	
­ÆÚÐ-°ÐÐ	
­ÇÚÐ-±ÐÐ	
­ÈÚÐ-²ÐÐ	
­ÉÚÐ-³ÐÐ	
­ÊÚÐ-FÐÐ	
­ËÚÐ-GÐÐ	
­ÌÚÐ-ÐÐ	
­ÍÚÐ-ÐÐ	
­ÎÚÐ-ÐÐ	
­ÏÚÐ-´ÐÐ	
­ÐÚÐ-µÐÐ	
­ÑÚÐ-¶ÐÐ	
­ÒÚÐ-ÐÐ	
­ÓÚÐ-·ÐÐ	
­ÔÚÐ-¸ÐÐ	
­ÕÚÐ-¹ÐÐ	
­ÖÚÐ-ºÐÐ	
­×ÚÐ-»ÐÐ	
­ØÚÐ-¼ÐÐ	
­ÙÚÐ-½ÐÐ	
­ÚÚÐ-¹ÐÐ	
­ÛÚÐ-¾ÐÐ	
­ÜÚÐ-»ÐÐ	
­ÝÚÐ-¿ÐÐ	
­ÞÚÐ-ÀÐÐ	
­ßÚÐ-ÁÐÐ	
­àÚÐ-ÂÐÐ	
­áÚÐ-ÃÐÐ	
­âÚÐ-ÄÐÐ	
­ãÚÐ-;ÐÐ	
­äÚÐ-ÅÐÐ	
­åÚÐ-ÐÐ	
­æÚÐ-ÆÐÐ	
­çÚÐ-ÇÐÐ	
­èÚÐ-ÈÐÐ	
­éÚÐ-ÉÐÐ	
­êÚÐ-ÊÐÐ	
­ëÚÐ-;ÐÐ	
­ìÚÐ-ËÐÐ	
­íÚÐ-ÐÐ	
­îÚÐ-ÐÐ	
­ïÚÐ-ÌÐÐ	
­ðÚÐ-ÍÐÐ	
­ñÚÐ-ÎÐÐ	
­òÚÐ-ÏÐÐ	
­óÚÐ-ÐÐÐ	
­ôÚÐ-ÑÐÐ	
­õÚÐ-ÒÐÐ	
­öÚÐ-ÓÐÐ	
­÷ÚÐ-ÔÐÐ	
­øÚÐ-ÐÐ	
­ùÚÐ-ÕÐÐ	
­úÚÐ-ÖÐÐ	
­ûÚÐ-×ÐÐ	
­üÚÐ-ÐÐ	
­ýÚÐ-ØÐÐ	
­þÚÐ-ÙÐÐ	
­ÿÚÐ-ÚÐÐ	
­ÚÐ-ÛÐÐ	
­ÚÐ-ÐÜÝÐEhÐÐ	
­=ÚÐ-ÞÐÐ	
­ÚÐ-ßÐÐ	
­>ÚÐ-àÐÐ	
­?ÚÐ-áÐÐ	
­@ÚÐ-ÐÐ	
­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ÚÐ-éÐÐ	
­[ÚÐ-òÐÐ	
­\ÚÐ-ëÐÐ	
­]ÚÐ-ÐÐ	
­^ÚÐ-óÐÐ	
­_ÚÐ-íÐÐ	
­`ÚÐ-îÐÐ	
­aÚÐ-ïÐÐ	
­<ÚÐ-ðÐÐ	
­bÚÐ-ÐÐ	
­fÚÐ-ôÐÐ	
­gÚÐ-õÐÐ	
­hÚÐ-öÐÐ	
­iÚÐ-÷ÐÐ	
­jÚÐ-øÐÐ	
­kÚÐ-ùÐÐ	
­lÚÐ-úÐÐ	
­mÚÐ-ûÐÐ	
­nÚÐ-üÐÐ	
­oÚÐ-ýÐÐ	
­pÚÐ-þÐÐ	
­qÚÐ-ÿÐÐ	
­rÚÐ-ÐÐ	
­sÚÐ-€ÐÐ	
­tÚÐ-ÐÐ	
­uÚÐ-‚ÐÐ	
­vÚÐ-ƒÐÐ	
­wÚÐ-„ÐÐ	
­xÚÐ-…ÐÐ	
­yÚÐ-†ÐÐ	
­zÚÐ-‡ÐÐ	
­{ÚÐ-ˆÐÐ	
­|ÚÐ-‰ÐÐ	
­}ÚÐ-ŠÐÐ	
­~ÚÐ-‹ÐÐ	
­ÚÐ-ŒÐÐ	
­€ÚÐ-ÐÐ	
­ÚÐ-ŽÐÐ	
­‚ÚÐ-ÐÐ	
­ƒÚÐ-ÐÐ	
­„ÚÐ-‘ÐÐ	
­…ÚÐ-’ÐÐ	
­†ÚÐ-“ÐÐ	
­‡ÚÐ-”ÐÐ	
­ˆÚÐ-•ÐÐ	
­‰ÚÐ-–ÐÐ	
­ŠÚÐ-—ÐÐ	
­‹ÚÐ-˜ÐÐ	
­ŒÚÐ-™ÐÐ	
­ÚÐ-šÐÐ	
­ŽÚÐ-›ÐÐ	
­ÖÚÐ-œÐÐ	
­×ÚÐ-ÐÐ	
­ÚÐ-žÐÐ	
­ÚÐ-ŸÐÐ	
­‘ÚÐ- ÐÐ	
­’ÚÐ-¡ÐÐ	
­“ÚÐ-¢ÐÐ	
­”ÚÐ-£ÐÐ	
­•ÚÐ-¤ÐÐ	
­–ÚÐ-¥ÐÐ	
­—ÚÐ-¦ÐÐ	
­˜ÚÐ-§ÐÐ	
­™ÚÐ-¨ÐÐ	
­šÚÐ-©ÐÐ	
­›ÚÐ-ªÐÐ	
­œÚÐ-«ÐÐ	
­ÚÐ-¬ÐÐ	
­žÚÐ-­ÐÐ	
­ŸÚÐ-®ÐÐ	
­ ÚÐ-¯ÐÐ	
­¡ÚÐ-°ÐÐ	
­¢ÚÐ-±ÐÐ	
­ÚÐ-ù