os/kernelhwsrv/kerneltest/e32test/buffer/t_char.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     1 // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     4 // under the terms of the License "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 //
     8 // Initial Contributors:
     9 // Nokia Corporation - initial contribution.
    10 //
    11 // Contributors:
    12 //
    13 // Description:
    14 // e32test\buffer\t_char.cpp
    15 // Overview:
    16 // Test TChar, TCharF, TChaLC and TCharUC character classes.
    17 // API Information:
    18 // TChar, TCharF, TChaLC, TCharUC.
    19 // Details:
    20 // - For different characters 
    21 // - Verify character's standard category information
    22 // - CR1080 verification of standard category information for additional Indic characters
    23 // - Verify character's bi-directional Unicode character category.
    24 // - Check if character is printable.
    25 // - Check if character is a graphical character.
    26 // - Verify for Chinese, Japanese, Korean (CJK) notional width.
    27 // - Verify that it is upper case, lower case form.
    28 // - Verify character's title case.
    29 // - Verify mirrored property of character.
    30 // - Verify integer numeric property of character.
    31 // - Verify character can be decomposed.
    32 // - For different unicode strings, verify unicode collation
    33 // - Compare data of two descriptors using the different collation methods and 
    34 // check results are as expected.
    35 // - Call the methods in the TChar, TCharF, TCharUC and TCharUC
    36 // - For TChar, TCharF, TChaLC, TCharUC
    37 // - Check the constructor and operators are as expected.
    38 // - Check folded character is same when it is converted to folded uppercase.
    39 // - Check folded and uppercase character is same when it is converted to 
    40 // uppercase letter stripped of accents.
    41 // - Convert lowercase, uppercase characters to it's lowercase form, check the conversion 
    42 // is as expected, and lowercase characters are unchanged.
    43 // - Convert lowercase, uppercase characters to it's uppercase form, check the conversion 
    44 // is as expected, and uppercase characters are unchanged.
    45 // Platforms/Drives/Compatibility:
    46 // All 
    47 // Assumptions/Requirement/Pre-requisites:
    48 // Failures and causes:
    49 // Base Port information:
    50 // 
    51 //
    52 
    53 #include <e32test.h>
    54 #include <collate.h>	  
    55 
    56 #ifdef __VC32__
    57     // Solve compilation problem caused by non-English locale
    58     #pragma setlocale("english")
    59 #endif
    60 
    61 LOCAL_D RTest test(_L("T_CHAR"));
    62 
    63 enum
    64 	{
    65 	Ydieresis=0x178,
    66 	nobreakspace=160,
    67 	exclamdown,
    68 	cent,
    69 	sterling,
    70 	currency,
    71 	yen,
    72 	brokenbar,
    73 	section,
    74 	dieresis,
    75 	copyright,
    76 	ordfeminine,
    77 	leftdoubleanglequote,
    78 	logicalnot,
    79 	softhyphen,
    80 	registered,
    81 	macron,
    82 	degree,
    83 	plusminus,
    84 	twosuperior,
    85 	threesuperior,
    86 	acute,
    87 	micro,
    88 	pilcrow,
    89 	dotaccent,
    90 	cedilla,
    91 	onesuperior,
    92 	ordmasculine,
    93 	rightdoubleanglequote,
    94 	onequarter,
    95 	onehalf,
    96 	threequarters,
    97 	questiondown,
    98 	Agrave,
    99 	Aacute,
   100 	Acircumflex,
   101 	Atilde,
   102 	Adieresis,
   103 	Aring,
   104 	AE,
   105 	Ccedilla,
   106 	Egrave,
   107 	Eacute,
   108 	Ecircumflex,
   109 	Edieresis,
   110 	Igrave,
   111 	Iacute,
   112 	Icircumflex,
   113 	Idieresis,
   114 	Eth,
   115 	Ntilde,
   116 	Ograve,
   117 	Oacute,
   118 	Ocircumflex,
   119 	Otilde,
   120 	Odieresis,
   121 	multiplication,
   122 	Oslash,
   123 	Ugrave,
   124 	Uacute,
   125 	Ucircumflex,
   126 	Udieresis,
   127 	Yacute,
   128 	Thorn,
   129 	germanbls,
   130 	agrave,
   131 	aacute,
   132 	acircumflex,
   133 	atilde,
   134 	adieresis,
   135 	aring,
   136 	ae,
   137 	ccedilla,
   138 	egrave,
   139 	eacute,
   140 	ecircumflex,
   141 	edieresis,
   142 	igrave,
   143 	iacute,
   144 	icircumflex,
   145 	idieresis,
   146 	eth,
   147 	ntilde,
   148 	ograve,
   149 	oacute,
   150 	ocircumflex,
   151 	otilde,
   152 	odieresis,
   153 	division,
   154 	oslash,
   155 	ugrave,
   156 	uacute,
   157 	ucircumflex,
   158 	udieresis,
   159 	yacute,
   160 	thorn,
   161 	ydieresis,
   162 	Dzcaron = 0x01C5, 
   163 	Lj = 0x01C8, 
   164 	Udearesismacron = 0x01D5,
   165 	Adotabove = 0x01E0,
   166 	AEmacron = 0x01E2,
   167 	aringacute = 0x01FB,
   168 	scommabelow = 0x0219, 
   169 	Otildemacron = 0x022C,
   170 	Cstroke = 0x023B,
   171 	doubleprime = 0x02BA, 
   172 	lowleftarrow = 0x02FF,
   173 	candrabindu = 0x0310, 
   174 	doublerightwardsarrowbelow = 0x0362,
   175 	latinsmalla = 0x0363	
   176 	};
   177 
   178 struct TCharDump
   179 	{
   180 	TUint iChar;
   181 	};
   182 
   183 /*EXPORT_C*/ void TChar::__DbgTest(void* pTCharDump) const
   184 	{
   185 	((TCharDump*)pTCharDump)->iChar=iChar;
   186 	}
   187 
   188 typedef enum {eTChar, eTCharF, eTCharC, eTCharLC, eTCharUC} TCharTypes;
   189 
   190 template<class TCharType>	
   191 class TestTChar
   192 	{
   193 public:
   194 	void Test1();
   195 	void Test2(TCharTypes);
   196 	void Test3(TCharTypes);
   197 	void Test4(TCharTypes);
   198 	};
   199 
   200 template<class TCharType>
   201 GLDEF_C void TestTChar<TCharType>::Test1()
   202 // Test that the methods are in the DLL
   203 	{
   204 	test.Start(_L("Test methods are in DLL - TChar"));
   205 	TChar a('X');
   206 	TUint TU=0;
   207 	TChar b(TU);
   208 	TChar c(b);
   209 
   210 	c=TU;
   211 	c=a;
   212 	c-=TU;
   213 	c+=TU;
   214 	c-TU;
   215 	c+TU;
   216 	c=(TUint)(a);
   217 
   218 	a.Fold();
   219 	a.LowerCase();
   220 	a.UpperCase();
   221 	a.Eos();
   222 	a.IsLower();
   223 	a.IsUpper();
   224 	a.IsAlpha();
   225 	a.IsDigit();
   226 	a.IsAlphaDigit();
   227 	a.IsHexDigit();
   228 	a.IsSpace();
   229 	a.IsPunctuation();
   230 	a.IsGraph();
   231 	a.IsPrint();
   232 //	a.SetChar(TU); protected
   233 
   234 	test.Next(_L("Test methods are in DLL - TCharF"));	
   235 	TCharF d(TU);
   236 	TCharF e(a);
   237     e=d;
   238 	e=TU;
   239 	e=a;
   240 
   241 	test.Next(_L("Test methods are in DLL - TCharLC"));	
   242 	TCharLC h(TU);
   243 	TCharLC i(a);
   244     h=i;
   245 	h=TU;
   246 	h=a;
   247 
   248 	test.Next(_L("Test methods are in DLL - TCharUC"));	
   249 	TCharUC j(TU);
   250 	TCharUC k(a);
   251     k=j;
   252 	k=TU;
   253 	k=a;
   254 	test.End();
   255 	}
   256 			
   257 
   258 //*********************************
   259 // Test the constructors
   260 //*********************************
   261 template<class TCharType>
   262 GLDEF_C void TestTChar<TCharType>::Test2(TCharTypes CharType)
   263 	{
   264 	test.Start(_L("Test constructors"));
   265 	TCharDump dump;
   266 	TCharType b('x');
   267 	b.__DbgTest(&dump);
   268 	switch(CharType)
   269 		{
   270 		case eTChar:	
   271 		case eTCharLC:
   272 			test(dump.iChar=='x');
   273 			break;
   274 		case eTCharUC:
   275 			test(dump.iChar=='X');
   276 			break;
   277 		case eTCharF:
   278 		case eTCharC:
   279 			test(dump.iChar == 'x');
   280 		}
   281 	test.End();
   282 	}
   283 
   284 
   285 //*********************************
   286 // Test the operators
   287 //*********************************
   288 template<class TCharType>
   289 GLDEF_C void TestTChar<TCharType>::Test3(TCharTypes CharType)
   290 	{
   291 	test.Start(_L("Test the operators")); 
   292 	test.Next(_L("="));
   293 	TCharDump dump;
   294 	TUint TUx='x', TUX='X';
   295 	TChar TCy='y', TCY='Y';
   296 	TCharType aChar('m');
   297 
   298 	aChar=TUx;
   299 	aChar.__DbgTest(&dump);
   300 	switch(CharType)
   301 		{
   302 		case eTChar:	
   303 		case eTCharLC:	test(dump.iChar=='x'); break;
   304 		case eTCharUC:	test(dump.iChar=='X'); break;
   305 		case eTCharF:
   306 		case eTCharC:	
   307 			test(dump.iChar == 'x');
   308 		}
   309 
   310 	aChar=TUX; 
   311 	aChar.__DbgTest(&dump);
   312 	switch(CharType)
   313 		{	
   314 		case eTCharLC:	test(dump.iChar=='x'); break;
   315 		case eTChar:
   316 		case eTCharUC:	test(dump.iChar=='X'); break;
   317 		case eTCharF:
   318 		case eTCharC:	
   319 			test(dump.iChar == 'x');
   320 		}
   321 
   322 	aChar=TCy;
   323 	aChar.__DbgTest(&dump);
   324 	switch(CharType)
   325 		{
   326 		case eTChar:	
   327 		case eTCharLC:	test(dump.iChar=='y'); break;
   328 		case eTCharUC:	test(dump.iChar=='Y'); break;
   329 		case eTCharF:
   330 		case eTCharC:	
   331 			test(dump.iChar == 'y');
   332 		}
   333 
   334 	aChar=TCY;
   335 	aChar.__DbgTest(&dump);
   336 	switch(CharType)
   337 		{	
   338 		case eTCharLC:	test(dump.iChar=='y'); break;
   339 		case eTChar:
   340 		case eTCharUC:	test(dump.iChar=='Y'); break;
   341 		case eTCharF:
   342 		case eTCharC:	
   343 			test(dump.iChar == 'y');
   344 		}
   345 
   346 
   347 	test.Next(_L("-=, +=, -, + and cast"));
   348 	TCharType x(10);
   349 	x-=5;
   350 	x.__DbgTest(&dump);
   351 	test(dump.iChar==5);
   352 
   353 	x+=5;
   354 	x.__DbgTest(&dump);
   355 	test(dump.iChar==10);
   356 
   357 	test((x-(TUint)5)==5);
   358 	x.__DbgTest(&dump);
   359 	test(dump.iChar==10);
   360 
   361 	test((x+(TUint)5)==15);
   362 	x.__DbgTest(&dump);
   363 	test(dump.iChar==10);
   364 
   365 	TChar z('a');
   366 	TUint w=z;
   367 	test(w==97);
   368 
   369 	test.End();
   370 	}
   371 
   372 
   373 //////////////////////////////////////////////
   374 // Test Fold, Fold(TChar::EFoldAccents), Collate, LowerCase, UpperCase
   375 ////////////////////////////////////////////
   376 template<class TCharType>
   377 GLDEF_C void TestTChar<TCharType>::Test4(TCharTypes CharType)
   378 	{
   379 	test.Start(_L("Fold(), Fold(TChar::EFoldAccents), Collate(), LowerCase() UpperCase() & Eos()"));
   380 	TCharDump dump1, dump2;
   381 	TCharType c(0);
   382 
   383 	// Is the folded version the same as the folded uppercase version?
   384 	test.Next(_L("Fold() 0-127"));
   385     TUint i;
   386 	for(i=0; i<=127; i++)
   387 		{
   388 		c = i;
   389 		c.Fold();
   390 		c.__DbgTest(&dump1);
   391 		c.UpperCase();
   392 		c.Fold();
   393 		c.__DbgTest(&dump2);
   394 		test(dump1.iChar == dump2.iChar);
   395 		}
   396 
   397 	// Is the folded and uppercased version the same as an uppercase letter stripped of accents?
   398 	test.Next(_L("Fold() >127"));
   399 	for(i=128; i<=255; i++)
   400 		{
   401 		c=i;
   402 		c.Fold();
   403 		c.UpperCase();
   404 		c.__DbgTest(&dump1);
   405 		if(CharType==eTChar)
   406 			{
   407 			switch(i)
   408 				{
   409 			case ccedilla:	
   410 			case Ccedilla:
   411                 test(dump1.iChar=='C');
   412                 break;
   413 
   414 			case udieresis:	
   415 			case ucircumflex:
   416 			case ugrave:
   417 			case uacute:		
   418 			case Udieresis:
   419 			case Ucircumflex:
   420 			case Ugrave:
   421 			case Uacute:
   422                 test(dump1.iChar=='U');
   423                 break;
   424 
   425 			case ydieresis:
   426 			case yacute:
   427 			case Yacute:
   428                 test(dump1.iChar=='Y');
   429                 break;
   430 
   431 			case ecircumflex:
   432 			case edieresis:
   433 			case egrave:
   434 			case eacute:		
   435 			case Ecircumflex:
   436 			case Edieresis:
   437 			case Egrave:
   438 			case Eacute:
   439                 test(dump1.iChar=='E');
   440                 break;
   441 
   442 			case acircumflex:
   443 			case adieresis:
   444 			case agrave:		
   445 			case aacute:
   446 			case Acircumflex: 
   447 			case Adieresis:	
   448 			case Agrave:			
   449 			case Aacute:
   450 			case atilde:
   451 			case Atilde:
   452 			case aring:		
   453 			case Aring:
   454                 test(dump1.iChar=='A');
   455                 break;
   456 
   457 			case idieresis:
   458 			case icircumflex:
   459 			case iacute:
   460 			case igrave:			
   461 			case Idieresis:
   462 			case Icircumflex:
   463 			case Iacute:
   464 			case Igrave:
   465                 test(dump1.iChar=='I');
   466                 break;
   467 
   468 			case ocircumflex:
   469 			case odieresis:
   470 			case ograve:
   471 			case oacute:		
   472 			case otilde:
   473 			case Ocircumflex:
   474 			case Odieresis:
   475 			case Ograve:
   476 			case Oacute:
   477 			case Otilde:
   478                 test(dump1.iChar=='O');
   479                 break;
   480 
   481 			case ntilde:
   482 			case Ntilde:
   483                 test(dump1.iChar=='N'); break;
   484 
   485 			case oslash:
   486 			case Oslash:
   487 
   488 				test(dump1.iChar==Oslash); break;
   489 
   490 			case ae:
   491 			case AE:
   492 				test(dump1.iChar==AE); break;
   493 
   494 			case eth:
   495 			case Eth:
   496                 test(dump1.iChar==Eth); break;
   497 
   498 			case thorn:
   499 			case Thorn:
   500                 test(dump1.iChar==Thorn);
   501                 break;
   502 
   503 			case nobreakspace:
   504 				test(dump1.iChar == ' ');
   505 				break;
   506 
   507 			case micro:
   508 				test(dump1.iChar == 0x039C);
   509 				break;
   510 
   511 			default:
   512                 test(dump1.iChar==i); 
   513 				}
   514 			}
   515 		}
   516 	
   517 	// In the following test section We test Fold(TChar::EFoldAccents) - This code tests this function for all the
   518 	// set of unicode characters located between 0x0080 and 0x00FF which are already tested for Fold(). 
   519 	// I added to this test 13 unicode character located between 0x01C5 and 0x0363.
   520 	
   521 	test.Next(_L("Fold(TChar::EFoldAccents) >127"));
   522 	for(i=128; i<=255; i++)
   523 		{
   524 		c=i;
   525 		c.Fold(TChar::EFoldAccents);
   526 		c.__DbgTest(&dump1);
   527 		if(CharType==eTChar)
   528 			{
   529 			switch(i)
   530 				{
   531 			case ccedilla:
   532 				test(dump1.iChar=='c');
   533 				break;
   534 				
   535 			case Ccedilla:
   536 				test(dump1.iChar=='C');
   537 				break;
   538 				
   539 			case acircumflex:
   540 			case adieresis:
   541 			case agrave:		
   542 			case aacute:
   543 			case atilde:
   544 			case aring:
   545 			case aringacute:			
   546             	test(dump1.iChar=='a');
   547             	break;
   548             	
   549 			case Acircumflex: 
   550 			case Adieresis:	
   551 			case Agrave:			
   552 			case Aacute:
   553 			case Atilde:		
   554 			case Aring:		
   555                 test(dump1.iChar=='A');
   556                 break;
   557 
   558 			case udieresis:	
   559 			case ucircumflex:
   560 			case ugrave:
   561 			case uacute:
   562 				test(dump1.iChar=='u');
   563 				break;
   564 				
   565 			case Udieresis:
   566 			case Ucircumflex:
   567 			case Ugrave:
   568 			case Uacute:
   569                 test(dump1.iChar=='U');
   570                 break;
   571 
   572 			case ydieresis:
   573 			case yacute:
   574 				test(dump1.iChar=='y');
   575 				break;
   576             
   577 			case Yacute:
   578                 test(dump1.iChar=='Y');
   579                 break;
   580 
   581 			case ecircumflex:
   582 			case edieresis:
   583 			case egrave:
   584 			case eacute:		
   585             	test(dump1.iChar=='e');
   586             	break;
   587             	
   588 			case Ecircumflex:
   589 			case Edieresis:
   590 			case Egrave:
   591 			case Eacute:
   592                 test(dump1.iChar=='E');
   593                 break;			
   594 				
   595 			case idieresis:
   596 			case icircumflex:
   597 			case iacute:
   598 			case igrave:
   599 				test(dump1.iChar=='i');
   600 				break;
   601 				
   602 			case Idieresis:
   603 			case Icircumflex:
   604 			case Iacute:
   605 			case Igrave:
   606                 test(dump1.iChar=='I');
   607                 break;
   608 
   609 			case ocircumflex:
   610 			case odieresis:
   611 			case ograve:
   612 			case oacute:		
   613 			case otilde:
   614 				test(dump1.iChar=='o');
   615 				break;
   616 			
   617 			case Ocircumflex:
   618 			case Odieresis:
   619 			case Ograve:
   620 			case Oacute:
   621 			case Otilde:
   622                 test(dump1.iChar=='O');
   623                 break;
   624 
   625 			case ntilde: test(dump1.iChar=='n'); break;
   626 				
   627 			case Ntilde: test(dump1.iChar=='N'); break;
   628 
   629 			case oslash: test(dump1.iChar==oslash); break;
   630 			case Oslash: test(dump1.iChar==Oslash); break;
   631 
   632 			case ae: 	test(dump1.iChar==ae); break;
   633 			case AE: 	test(dump1.iChar==AE); break;
   634 
   635 			case eth:   test(dump1.iChar==eth); break;
   636 			case Eth:   test(dump1.iChar==Eth); break;
   637 
   638 			case thorn: test(dump1.iChar==thorn);break;
   639 			case Thorn: test(dump1.iChar==Thorn);break;
   640 
   641 			case micro:
   642 				test(dump1.iChar == 0x00B5);
   643 				break;
   644 							
   645 			default:
   646                 test(dump1.iChar==i); 
   647 				}
   648 			}
   649 		}
   650 	
   651 	TUint specialCasesTable [] = 
   652 		{
   653 		0x01C5, // Dzcaron
   654 		0x01C8, // Lj
   655 		0x01D5,//  Udearesismacron
   656 		0x01E0,//  Adotabove
   657 		0x01E2,//  AEmacron
   658 		0x0219, // scommabelow
   659 		0x022C,//  Otildemacron
   660 		0x023B,//  Cstroke
   661 		0x02BA, // doubleprime
   662 		0x02FF,//  lowleftarrow
   663 		0x0310, // candrabindu
   664 		0x0362, // doublerightwardsarrowbelow
   665 		0x0363 //  latinsmalla
   666 		};
   667 	    
   668 	for (i=0;i<=12; i++)
   669 		{
   670 		c=specialCasesTable[i];
   671 		c.Fold(TChar::EFoldAccents);
   672 		c.__DbgTest(&dump1);
   673 		if(CharType==eTChar)
   674 			{
   675 			switch(specialCasesTable[i])
   676 				{
   677 			case Dzcaron					:	test(dump1.iChar==Dzcaron);	break; 
   678 			case Lj							:	test(dump1.iChar==Lj);		break; 
   679 			case Udearesismacron			:	test(dump1.iChar=='U');		break; 
   680 			case Adotabove					:	test(dump1.iChar=='A');		break;
   681 			case AEmacron					:	test(dump1.iChar==AE);		break; 
   682 			case scommabelow				:	test(dump1.iChar=='s');		break;
   683 			case Otildemacron				:	test(dump1.iChar=='O');		break; 
   684 			case Cstroke					:	test(dump1.iChar==Cstroke);			break; 
   685 			case doubleprime				:	test(dump1.iChar==doubleprime);		break; 
   686 			case lowleftarrow				:	test(dump1.iChar==lowleftarrow);	break; 
   687 			case candrabindu				:	test(dump1.iChar==candrabindu);		break; 
   688 			case doublerightwardsarrowbelow	:	test(dump1.iChar==doublerightwardsarrowbelow);	break; 
   689 			case latinsmalla 				:	test(dump1.iChar==latinsmalla);		break; 
   690 			default							:	test(dump1.iChar==specialCasesTable[i]); 
   691 				}
   692 			}
   693 		}
   694 
   695 	test.Next(_L("LowerCase() 0-127"));
   696 	for(i=0;i<=127; i++)
   697 		{ 
   698 		c=i;
   699 		if(c.IsUpper())
   700 			{
   701 			c.__DbgTest(&dump1);
   702 			c.LowerCase();
   703 			c.__DbgTest(&dump2);
   704 			test(dump1.iChar==dump2.iChar-32);
   705 			}
   706 		else
   707 			{
   708 			c.__DbgTest(&dump1);
   709 			c.LowerCase();
   710 			c.__DbgTest(&dump2);
   711 			test(dump1.iChar==dump2.iChar);
   712 			}
   713 		}
   714 
   715 
   716 	test.Next(_L("LowerCase() >127"));
   717 	for(i=128; i<=255; i++)
   718 		{
   719 		c=i;
   720 		c.LowerCase();
   721 		c.__DbgTest(&dump1);
   722 		if(CharType==eTChar)
   723 			{
   724 			switch(i)
   725 				{
   726 			case Acircumflex:	test(dump1.iChar==acircumflex);	break;
   727 			case Adieresis:		test(dump1.iChar==adieresis);	break;
   728 			case Agrave:		test(dump1.iChar==agrave);		break;
   729 			case Aacute:		test(dump1.iChar==aacute);		break;
   730 			case Atilde:		test(dump1.iChar==atilde);		break;
   731 			case Aring:			test(dump1.iChar==aring);		break;
   732 			case AE:			test(dump1.iChar==ae);			break;
   733 			case Ccedilla:		test(dump1.iChar==ccedilla); 	break;
   734 			case Ecircumflex:	test(dump1.iChar==ecircumflex);	break;
   735 			case Edieresis:		test(dump1.iChar==edieresis);	break;
   736 			case Egrave:		test(dump1.iChar==egrave);		break;
   737 			case Eacute:		test(dump1.iChar==eacute);		break;
   738 			case Eth:			test(dump1.iChar==eth);			break;
   739 			case Icircumflex:	test(dump1.iChar==icircumflex);	break;
   740 			case Idieresis:		test(dump1.iChar==idieresis);	break;
   741 			case Igrave:		test(dump1.iChar==igrave);		break;
   742 			case Iacute:		test(dump1.iChar==iacute);		break;
   743 			case Ntilde:		test(dump1.iChar==ntilde);		break;
   744 			case Oslash:		test(dump1.iChar==oslash);		break;
   745 			case Ocircumflex:	test(dump1.iChar==ocircumflex);	break;
   746 			case Odieresis:		test(dump1.iChar==odieresis);	break;
   747 			case Ograve:		test(dump1.iChar==ograve);		break;
   748 			case Oacute:		test(dump1.iChar==oacute);		break;
   749 			case Otilde:		test(dump1.iChar==otilde);		break;
   750 			case Thorn:			test(dump1.iChar==thorn);		break;
   751 			case Ucircumflex:	test(dump1.iChar==ucircumflex);	break;
   752 			case Udieresis:		test(dump1.iChar==udieresis);	break;
   753 			case Ugrave:		test(dump1.iChar==ugrave);		break;
   754 			case Uacute:		test(dump1.iChar==uacute);		break;
   755 			case Yacute:		test(dump1.iChar==yacute);		break;
   756 			default: 			test(dump1.iChar==i); 		
   757 				}
   758 			}
   759 		}
   760 
   761 
   762 	test.Next(_L("UpperCase() 0-127"));
   763 	for(i=0;i<=127; i++)
   764 		{ 
   765 		c=i;
   766 		if(c.IsLower())
   767 			{
   768 			c.__DbgTest(&dump1);
   769 			c.UpperCase();
   770 			c.__DbgTest(&dump2);
   771 			test(dump1.iChar==dump2.iChar+32);
   772 			}
   773 		else
   774 			{
   775 			c.__DbgTest(&dump1);
   776 			c.UpperCase();
   777 			c.__DbgTest(&dump2);
   778 			test(dump1.iChar==dump2.iChar);
   779 			}
   780 		}
   781 
   782 
   783 	test.Next(_L("UpperCase() >127"));
   784 	for(i=128; i<=255; i++)
   785 		{
   786 		c=i;
   787 		c.UpperCase();
   788 		c.__DbgTest(&dump1);
   789 		if(CharType==eTChar)
   790 			{
   791 			switch(i)	
   792 				{
   793 			case acircumflex:	test(dump1.iChar==Acircumflex);	break;
   794 			case adieresis:		test(dump1.iChar==Adieresis);	break;
   795 			case agrave:		test(dump1.iChar==Agrave);		break;
   796 			case aacute:		test(dump1.iChar==Aacute);		break;
   797 			case atilde:		test(dump1.iChar==Atilde);		break;
   798 			case aring:			test(dump1.iChar==Aring);		break;
   799 			case ae:			test(dump1.iChar==AE);			break;
   800 			case ccedilla:		test(dump1.iChar==Ccedilla); 	break;
   801 			case ecircumflex:	test(dump1.iChar==Ecircumflex);	break;
   802 			case edieresis:		test(dump1.iChar==Edieresis);	break;
   803 			case egrave:		test(dump1.iChar==Egrave);		break;
   804 			case eacute:		test(dump1.iChar==Eacute);		break;
   805 			case eth:			test(dump1.iChar==Eth);			break;
   806 			case icircumflex:	test(dump1.iChar==Icircumflex);	break;
   807 			case idieresis:		test(dump1.iChar==Idieresis);	break;
   808 			case igrave:		test(dump1.iChar==Igrave);		break;
   809 			case iacute:		test(dump1.iChar==Iacute);		break;
   810 			case ntilde:		test(dump1.iChar==Ntilde);		break;
   811 			case oslash:		test(dump1.iChar==Oslash);		break;
   812 			case ocircumflex:	test(dump1.iChar==Ocircumflex);	break;
   813 			case odieresis:		test(dump1.iChar==Odieresis);	break;
   814 			case ograve:		test(dump1.iChar==Ograve);		break;
   815 			case oacute:		test(dump1.iChar==Oacute);		break;
   816 			case otilde:		test(dump1.iChar==Otilde);		break;
   817 			case thorn:			test(dump1.iChar==Thorn);		break;
   818 			case ucircumflex:	test(dump1.iChar==Ucircumflex);	break;
   819 			case udieresis:		test(dump1.iChar==Udieresis);	break;
   820 			case ugrave:		test(dump1.iChar==Ugrave);		break;
   821 			case uacute:		test(dump1.iChar==Uacute);		break;
   822 			case yacute:		test(dump1.iChar==Yacute);		break;
   823 			case ydieresis:		test(dump1.iChar==Ydieresis);	break;
   824 			case micro:			test(dump1.iChar==0x039C);		break;
   825 			default: 			test(dump1.iChar==i); 		
   826 				}
   827 			}
   828 		}
   829 		   
   830 	test.Next(_L("Eos()"));
   831 	c=0;
   832 	test(c.Eos()==TRUE);
   833 	for(i=1;i<=255;i++)
   834 		{
   835 		c=i;
   836 		test(c.Eos()==FALSE);
   837 		}
   838 	test.End();	
   839 	}
   840 
   841 
   842 //*********************************
   843 // Test the Isxxx functions
   844 //*********************************
   845 //
   846 // Deleted as it can no longer use the C library
   847 //
   848 /*
   849 template<class TCharType>
   850 GLDEF_C void TestTChar<TCharType>::Test5(TCharTypes CharType)
   851 	{
   852 	test.Start(_L("Isxxxxx()"));
   853 	test.End();
   854 	}
   855 */
   856 
   857 #ifndef _DEBUG
   858 #pragma warning (disable :4710) //Function not expanded 
   859 #pragma warning (disable :4700) //Local variable used without being initialized
   860 #endif
   861 
   862 /*
   863 Put all the information about a character into a string. This can then be compared with
   864 a previously verified string to test the character classification functions.
   865 
   866 To keep the string short, only non-default information is appended, except for the first
   867 attribute, the category.
   868 
   869 The format is:
   870 
   871 1. The two-letter Unicode category code: e.g., Lu for an uppercase letter, Nd for a digit, etc.
   872 2. If the bidirectional category is not TChar::ELeftToRight, ' b=' then the one or two-letter code.
   873 3. If the combining class is not 0, ' c=' then the combining class number in decimal.
   874 4. If the uppercase form is different from the character code, ' u=' then the uppercase form in hex.
   875 5. If the titlecase form is different from the character code, ' t=' then the titlecase form in hex.
   876 6. If the lowercase form is different from the character code, ' l=' then the lowercase form in hex.
   877 ** REMOVED ** 7. If the folded form is different from the character code, ' f=' then the folded form in hex.
   878 8. If the character has the mirrored property, ' m'.
   879 9. If the character has a numeric value, ' n=' then the numeric value in decimal, or -2 for fractions.
   880 10. If the CJK width is not neutral, ' w=' then 1 for halfwidth, 2 for fullwidth, 3 for narrow, 4 for wide
   881 11. If there is a canonical decomposition, ' d=' then the characters of the decomposition in hex, comma-separated.
   882 */
   883 void char_info_to_string(TDes16& info,TUint x)
   884 	{
   885 	TChar c(x);
   886 
   887 	TChar::TCharInfo ci;
   888 	c.GetInfo(ci);
   889 
   890 	TBuf<16> cat;
   891 	switch (ci.iCategory)
   892 		{
   893 		case TChar::ELuCategory: cat = _L("Lu"); break;
   894 		case TChar::ELlCategory: cat = _L("Ll"); break;
   895 		case TChar::ELtCategory: cat = _L("Lt"); break; 
   896 		case TChar::ELoCategory: cat = _L("Lo"); break; 
   897 		case TChar::ELmCategory: cat = _L("Lm"); break; 
   898 		case TChar::EMnCategory: cat = _L("Mn"); break; 
   899 		case TChar::EMcCategory: cat = _L("Mc"); break; 
   900 		case TChar::ENdCategory: cat = _L("Nd"); break; 
   901 		case TChar::ENlCategory: cat = _L("Nl"); break;
   902 		case TChar::ENoCategory: cat = _L("No"); break; 
   903 		case TChar::EPdCategory: cat = _L("Pd"); break; 
   904 		case TChar::EPsCategory: cat = _L("Ps"); break; 
   905 		case TChar::EPeCategory: cat = _L("Pe"); break; 
   906 		case TChar::EPoCategory: cat = _L("Po"); break; 
   907 		case TChar::EPiCategory: cat = _L("Pi"); break; 
   908 		case TChar::EPfCategory: cat = _L("Pf"); break; 
   909 		case TChar::ESmCategory: cat = _L("Sm"); break; 
   910 		case TChar::EScCategory: cat = _L("Sc"); break; 
   911 		case TChar::ESkCategory: cat = _L("Sk"); break;
   912 		case TChar::ESoCategory: cat = _L("So"); break; 
   913 		case TChar::EZsCategory: cat = _L("Zs"); break; 
   914 		case TChar::EZlCategory: cat = _L("Zl"); break; 
   915 		case TChar::EZpCategory: cat = _L("Zp"); break; 
   916 		case TChar::ECcCategory: cat = _L("Cc"); break; 
   917 		case TChar::ECoCategory: cat = _L("Co"); break; 
   918 		case TChar::ECnCategory: cat = _L("Cn"); break;
   919 		case TChar::ECfCategory: cat = _L("Cf"); break;
   920 		default: User::Panic(_L("bad char category"),0); break; 
   921 		}
   922 	info.Append(cat);
   923 
   924 	TBuf<16> bdcat;
   925 	switch (ci.iBdCategory)
   926 		{
   927 		case TChar::ELeftToRight: bdcat=_L("L"); break;
   928 		case TChar::ELeftToRightEmbedding: bdcat=_L("LRE"); break;
   929 		case TChar::ELeftToRightOverride: bdcat=_L("LRO"); break;
   930 		case TChar::ERightToLeft: bdcat=_L("R"); break;
   931 		case TChar::ERightToLeftArabic: bdcat=_L("AL"); break; 
   932 		case TChar::ERightToLeftEmbedding: bdcat=_L("RLE"); break;
   933 		case TChar::ERightToLeftOverride: bdcat=_L("RLO"); break;
   934 		case TChar::EPopDirectionalFormat: bdcat=_L("PDF"); break;
   935 		case TChar::EEuropeanNumber: bdcat=_L("EN"); break; 
   936 		case TChar::EEuropeanNumberSeparator: bdcat=_L("ES"); break;  
   937 		case TChar::EEuropeanNumberTerminator: bdcat=_L("ET"); break;
   938 		case TChar::EArabicNumber: bdcat=_L("AN"); break; 
   939 		case TChar::ECommonNumberSeparator: bdcat=_L("CS"); break; 
   940 		case TChar::ENonSpacingMark: bdcat=_L("NSM"); break;
   941 		case TChar::EBoundaryNeutral: bdcat=_L("BN"); break; 
   942 		case TChar::EParagraphSeparator: bdcat=_L("B"); break;
   943 		case TChar::ESegmentSeparator: bdcat=_L("S"); break;
   944 		case TChar::EWhitespace: bdcat=_L("WS"); break; 
   945 		case TChar::EOtherNeutral: bdcat=_L("ON"); break; 
   946 		default: User::Panic(_L("bad bd category"),0); break; 
   947 		}
   948 	if (ci.iBdCategory != TChar::ELeftToRight)
   949 		{
   950 		info.Append(_L(" b="));
   951 		info.Append(bdcat);
   952 		}
   953 
   954 	if (ci.iCombiningClass != 0)
   955 		{
   956 		info.Append(_L(" c="));
   957 		info.AppendNum(ci.iCombiningClass);
   958 		}
   959 
   960 	if (ci.iUpperCase != x)
   961 		{
   962 		info.Append(_L(" u="));
   963 		info.AppendNum(ci.iUpperCase,EHex);
   964 		}
   965 		
   966 	if (ci.iTitleCase != x)
   967 		{
   968 		info.Append(_L(" t="));
   969 		info.AppendNum(ci.iTitleCase,EHex);
   970 		}
   971 
   972 	if (ci.iLowerCase != x)
   973 		{
   974 		info.Append(_L(" l="));
   975 		info.AppendNum(ci.iLowerCase,EHex);
   976 		}
   977 
   978 	if (ci.iMirrored)
   979 		info.Append(_L(" m"));
   980 
   981 	if (ci.iNumericValue != -1)
   982 		{
   983 		info.Append(_L(" n="));
   984 		info.AppendNum(ci.iNumericValue);
   985 		}
   986 
   987 	switch (c.GetCjkWidth())
   988 		{
   989 		case TChar::EHalfWidth: info.Append(_L(" w=1")); break;
   990 		case TChar::EFullWidth: info.Append(_L(" w=2")); break;
   991 		case TChar::ENarrow: info.Append(_L(" w=3")); break;
   992 		case TChar::EWide: info.Append(_L(" w=4")); break;
   993 		default: break;
   994 		}
   995 
   996 	TPtrC16 d;
   997 	if (c.Decompose(d))
   998 		{
   999 		info.Append(_L(" d="));
  1000 		for (int i = 0; i < d.Length(); i++)
  1001 			{
  1002 			info.AppendNum((TUint)d[i],EHex);
  1003 			if (i < d.Length() - 1)
  1004 				info.Append(',');
  1005 			}
  1006 		}
  1007 
  1008 	if (!c.IsPrint())
  1009 		info.Append(_L(" np"));
  1010 	if (!c.IsGraph())
  1011 		info.Append(_L(" ng"));
  1012 	}
  1013 
  1014 void test_unicode_char(TUint c,const TDesC& desired_info,const TDesC& name)
  1015 	{
  1016 	test.Next(name);
  1017 	TBuf<128> info;
  1018 	char_info_to_string(info,c);
  1019 //	test.Printf(_L("code=0x%x desired='%S' actual='%S'\n"),c,&desired_info,&info);
  1020 //	if (info != desired_info)
  1021 //		test.Printf(_L(" (mismatch!)\n"));
  1022 	test(info == desired_info);
  1023 	}
  1024 
  1025 void test_unicode_chars()
  1026 	{
  1027 	test_unicode_char(0x0000,_L("Cc b=BN np ng"),_L("NULL"));
  1028 	test_unicode_char(0x000A,_L("Cc b=B np ng"),_L("linefeed"));
  1029 	test_unicode_char(0x0020,_L("Zs b=WS w=3 ng"),_L("space"));
  1030 	test_unicode_char(0x0028,_L("Ps b=ON m w=3"),_L("("));
  1031 	test_unicode_char(0x0038,_L("Nd b=EN n=8 w=3"),_L("8"));
  1032 	test_unicode_char(0x0040,_L("Po b=ON w=3"),_L("@"));
  1033 	test_unicode_char(0x0062,_L("Ll u=42 w=3"),_L("b"));
  1034 	test_unicode_char(0x0042,_L("Lu l=62 w=3"),_L("B"));
  1035 	test_unicode_char(0x0067,_L("Ll u=47 w=3"),_L("g"));
  1036 	test_unicode_char(0x0047,_L("Lu l=67 w=3"),_L("G"));
  1037 	test_unicode_char(0x0077,_L("Ll u=57 w=3"),_L("w"));
  1038 	test_unicode_char(0x0057,_L("Lu l=77 w=3"),_L("W"));
  1039 	test_unicode_char(0x00A0,_L("Zs b=CS ng"),_L("non-break space"));
  1040 	test_unicode_char(0x00BC,_L("No b=ON n=-2"),_L("1/4"));
  1041 	test_unicode_char(0x00DD,_L("Lu l=fd d=59,301"),_L("Y acute"));
  1042 	test_unicode_char(0x00FF,_L("Ll u=178 d=79,308"),_L("y umlaut"));
  1043 	test_unicode_char(0x0178,_L("Lu l=ff d=59,308"),_L("Y umlaut"));
  1044 	test_unicode_char(0x01C4,_L("Lu t=1c5 l=1c6"),_L("DZ caron"));
  1045 	test_unicode_char(0x01C5,_L("Lt u=1c4 l=1c6"),_L("Dz caron"));
  1046 	test_unicode_char(0x01C6,_L("Ll u=1c4 t=1c5"),_L("dz caron"));
  1047 	test_unicode_char(0x022A,_L("Lu l=22b d=4f,308,304"),_L("O with diaeresis and macron"));
  1048 	test_unicode_char(0x0267,_L("Ll"),_L("latin small letter heng with hook"));
  1049 	test_unicode_char(0x02b0,_L("Lm"),_L("modifier letter small h"));
  1050 	test_unicode_char(0x030a,_L("Mn b=NSM c=230"),_L("combining ring above"));
  1051 	test_unicode_char(0x03a8,_L("Lu l=3c8"),_L("Greek Psi"));
  1052 	test_unicode_char(0x03c8,_L("Ll u=3a8"),_L("Greek psi"));
  1053 	test_unicode_char(0x0401,_L("Lu l=451 d=415,308"),_L("Cyrillic IO"));
  1054 	test_unicode_char(0x0451,_L("Ll u=401 d=435,308"),_L("Cyrillic io"));
  1055 	test_unicode_char(0x04e0,_L("Lu l=4e1"),_L("Cyrillic Abkhasian Dze"));
  1056 	test_unicode_char(0x04e1,_L("Ll u=4e0"),_L("Cyrillic Abkhasian dze"));
  1057 	test_unicode_char(0x05A8,_L("Mn b=NSM c=230"),_L("Hebrew accent qadma"));
  1058 	test_unicode_char(0x05D2,_L("Lo b=R"),_L("Hebrew letter gimel"));
  1059 	test_unicode_char(0x05F0,_L("Lo b=R"),_L("Hebrew ligature Yiddish double vav"));
  1060 	test_unicode_char(0x0627,_L("Lo b=AL"),_L("Arabic letter alef"));
  1061 	test_unicode_char(0x0660,_L("Nd b=AN n=0"),_L("Arabic-Indic digit 0"));
  1062 	test_unicode_char(0x0669,_L("Nd b=AN n=9"),_L("Arabic-Indic digit 9"));
  1063 	test_unicode_char(0x06F4,_L("Nd b=EN n=4"),_L("Extended Arabic-Indic digit 4"));
  1064 	test_unicode_char(0x0B9C,_L("Lo"),_L("Tamil letter ja"));
  1065 	test_unicode_char(0x0BCD,_L("Mn b=NSM c=9"),_L("Tamil sign virama"));
  1066 	test_unicode_char(0x0BF0,_L("No n=10"),_L("Tamil number 10"));
  1067 	test_unicode_char(0x0BF1,_L("No n=100"),_L("Tamil number 100"));
  1068 	test_unicode_char(0x0BF2,_L("No n=1000"),_L("Tamil number 1000"));
  1069 	test_unicode_char(0x0E3F,_L("Sc b=ET"),_L("Thai currency symbol baht"));
  1070 	test_unicode_char(0x0ED5,_L("Nd n=5"),_L("Lao digit 5"));
  1071 	test_unicode_char(0x104E,_L("Po"),_L("Myanmar symbol aforementioned"));
  1072 	test_unicode_char(0x124B,_L("Lo"),_L("Ethiopic syllable QWAA"));
  1073 	test_unicode_char(0x137C,_L("No n=10000"),_L("Ethiopic number 10000"));
  1074 	test_unicode_char(0x217F,_L("Nl u=216f n=1000"),_L("small Roman numeral 1000"));
  1075 	test_unicode_char(0x2180,_L("Nl n=1000"),_L("Roman numeral 1000 CD"));
  1076 	test_unicode_char(0x2181,_L("Nl n=5000"),_L("Roman numeral 5000"));
  1077 	test_unicode_char(0x2182,_L("Nl n=10000"),_L("Roman numeral 10000"));
  1078 	test_unicode_char(0x2208,_L("Sm b=ON m"),_L("element of"));
  1079 	test_unicode_char(0x2248,_L("Sm b=ON m"),_L("almost equal to"));
  1080 	test_unicode_char(0x3000,_L("Zs b=WS w=4 ng"),_L("ideographic space"));
  1081 	test_unicode_char(0x3030,_L("Pd b=ON w=4"),_L("wavy dash"));
  1082 	test_unicode_char(0x305F,_L("Lo w=4"),_L("Hiragana ta"));
  1083 	test_unicode_char(0x3060,_L("Lo w=4 d=305f,3099"),_L("Hiragana da"));
  1084 	test_unicode_char(0x3099,_L("Mn b=NSM c=8 w=4"),_L("combining Katakana-Hiragana voiced sound mark"));
  1085 	test_unicode_char(0x30B3,_L("Lo w=4"),_L("Katakana ko"));
  1086 	test_unicode_char(0x30B4,_L("Lo w=4 d=30b3,3099"),_L("Katakana go"));
  1087 	test_unicode_char(0x51FF,_L("Lo w=4"),_L("CJK ideograph 51FF"));
  1088 	test_unicode_char(0x52FF,_L("Lo w=4"),_L("CJK ideograph 52FF"));
  1089 	test_unicode_char(0xCEFF,_L("Lo w=4"),_L("Hangul syllable CEFF"));
  1090 	test_unicode_char(0xFF17,_L("Nd b=EN n=7 w=2"),_L("fullwidth digit 7"));
  1091 	test_unicode_char(0xFF33,_L("Lu l=ff53 w=2"),_L("fullwidth S"));
  1092 	test_unicode_char(0xFF53,_L("Ll u=ff33 w=2"),_L("fullwidth s"));
  1093 	test_unicode_char(0xFF85,_L("Lo w=1"),_L("halfwidth Katakana na"));
  1094 	test_unicode_char(0xFFE1,_L("Sc b=ET w=2"),_L("fullwidth pound sign"));
  1095 	test_unicode_char(0xE000, _L("Co"), _L("End user private use character"));
  1096 	test_unicode_char(0xE3FF, _L("Co"), _L("End user private use character"));
  1097 	test_unicode_char(0xE400, _L("Co"), _L("Corporate private use character"));
  1098 	test_unicode_char(0xF6DA, _L("Co np ng"), _L("Corporate private use character - Java string marker"));
  1099 	test_unicode_char(0xF6DB, _L("Co"), _L("Corporate private use character - Replacement character"));
  1100 	test_unicode_char(0xF6DC, _L("Co np ng"), _L("Corporate private use character - switch to next"));
  1101 	test_unicode_char(0xF6DD, _L("Co np ng"), _L("Corporate private use character - switch to previous"));
  1102 	test_unicode_char(0xF6DB, _L("Co"), _L("Corporate private use character - Latin superscript y"));
  1103 	test_unicode_char(0xF6FF, _L("Co"), _L("Corporate private use character - Alarm bell"));
  1104 	test_unicode_char(0xF700, _L("Co np ng"), _L("Corporate private use character - Key code"));
  1105 	test_unicode_char(0xF8FF, _L("Co np ng"), _L("Corporate private use character - Key code"));
  1106 	
  1107 	// CR1080 - Testing additional Indic Chars
  1108 	// Test properties of new Indic characters added in CR1080, and also the properties of
  1109 	// existing characters immediately preceding and proceding the new characters, to test
  1110 	// for any regression.
  1111 	test_unicode_char(0x0903, _L("Mc"), _L("DEVANAGARI SIGN VISARGA"));  		// Existing
  1112 	test_unicode_char(0x0904, _L("Lo"), _L("DEVANAGARI LETTER SHORT A"));		// New
  1113 	test_unicode_char(0x0905, _L("Lo"), _L("DEVANAGARI LETTER A"));				// Existing
  1114 	
  1115 	test_unicode_char(0x0970, _L("Po"), _L("DEVANAGARI ABBREVIATION SIGN"));	// Existing
  1116 	test_unicode_char(0x097B, _L("Lo"), _L("DEVANAGARI LETTER GGA"));			// New
  1117 	test_unicode_char(0x097C, _L("Lo"), _L("DEVANAGARI LETTER JJA"));			// New
  1118 	test_unicode_char(0x097D, _L("Lo"), _L("DEVANAGARI LETTER GLOTTAL STOP"));	// New
  1119 	test_unicode_char(0x097E, _L("Lo"), _L("DEVANAGARI LETTER DDDA"));			// New
  1120 	test_unicode_char(0x097F, _L("Lo"), _L("DEVANAGARI LETTER BBA"));			// New
  1121 	test_unicode_char(0x0981, _L("Mn b=NSM"), _L("BENGALI SIGN CANDRABINDU"));	// Existing
  1122 	
  1123 	test_unicode_char(0x09BC, _L("Mn b=NSM c=7"), _L("BENGALI SIGN NUKTA"));	// Existing
  1124 	test_unicode_char(0x09BD, _L("Lo"), _L("BENGALI SIGN AVAGRAHA"));			// New
  1125 	test_unicode_char(0x09BE, _L("Mc"), _L("BENGALI VOWEL SIGN AA"));			// Existing
  1126 	
  1127 	test_unicode_char(0x09CD, _L("Mn b=NSM c=9"), _L("BENGALI SIGN VIRAMA"));	// Existing
  1128 	test_unicode_char(0x09CE, _L("Lo"), _L("BENGALI LETTER KHANDA TA"));		// New
  1129 	test_unicode_char(0x09D7, _L("Mc"), _L("BENGALI AU LENGTH MARK"));			// Existing
  1130 
  1131 	test_unicode_char(0x09FA, _L("So"), _L("BENGALI ISSHAR"));					// Existing
  1132 	test_unicode_char(0x0A01, _L("Mn b=NSM"), _L("GURMUKHI SIGN ADAK BINDI"));	// New
  1133 	test_unicode_char(0x0A02, _L("Mn b=NSM"), _L("GURMUKHI SIGN BINDI"));		// Existing
  1134 	test_unicode_char(0x0A03, _L("Mc"), _L("GURMUKHI SIGN VISARGA"));			// New
  1135 	test_unicode_char(0x0A05, _L("Lo"), _L("GURMUKHI LETTER A"));				// Existing
  1136 	
  1137 	test_unicode_char(0x0A8B, _L("Lo"), _L("GUJARATI LETTER VOCALIC R"));		// Existing
  1138 	test_unicode_char(0x0A8C, _L("Lo"), _L("GUJARATI LETTER VOCALIC L"));		// New
  1139 	test_unicode_char(0x0A8D, _L("Lo"), _L("GUJARATI VOWEL CANDRA E"));			// Existing
  1140 	
  1141 	test_unicode_char(0x0AE0, _L("Lo"), _L("GUJARATI LETTER VOCALIC RR"));				// Existing
  1142 	test_unicode_char(0x0AE1, _L("Lo"), _L("GUJARATI LETTER VOCALIC LL"));				// New
  1143 	test_unicode_char(0x0AE2, _L("Mn b=NSM"), _L("GUJARATI VOWEL SIGN VOCALIC L"));		// New
  1144 	test_unicode_char(0x0AE3, _L("Mn b=NSM"), _L("GUJARATI VOWEL SIGN VOCALIC LL"));	// New
  1145 	test_unicode_char(0x0AE6, _L("Nd n=0"), _L("GUJARATI DIGIT ZERO")); 				// Existing
  1146 	
  1147 	test_unicode_char(0x0AEF, _L("Nd n=9"), _L("GUJARATI DIGIT NINE"));			// Existing
  1148 	test_unicode_char(0x0AF1, _L("Sc b=ET"), _L("GUJARATI RUPEE SIGN"));		// New
  1149 	test_unicode_char(0x0B01, _L("Mn b=NSM"), _L("ORIYA SIGN CANDRABINDU")); 	// Existing
  1150 
  1151 	test_unicode_char(0x0B33, _L("Lo"), _L("ORIYA LETTER LLA"));				// Existing
  1152 	test_unicode_char(0x0B35, _L("Lo"), _L("ORIYA LETTER VA"));					// New
  1153 	test_unicode_char(0x0B36, _L("Lo"), _L("ORIYA LETTER SHA"));				// Existing
  1154 
  1155 	test_unicode_char(0x0B70, _L("So"), _L("ORIYA ISSHAR"));					// Existing
  1156 	test_unicode_char(0x0B71, _L("Lo"), _L("ORIYA LETTER WA"));					// New
  1157 	test_unicode_char(0x0B82, _L("Mn b=NSM"), _L("TAMIL SIGN ANUSVARA")); 		// Existing
  1158 
  1159 	test_unicode_char(0x0BB5, _L("Lo"), _L("TAMIL LETTER VA"));					// Existing
  1160 	test_unicode_char(0x0BB6, _L("Lo"), _L("TAMIL LETTER SHA"));				// New
  1161 	test_unicode_char(0x0BB7, _L("Lo"), _L("TAMIL LETTER SSA"));				// Existing
  1162 
  1163 	test_unicode_char(0x0BD7, _L("Mc"), _L("TAMIL AU LENGTH MARK"));			// Existing
  1164 	test_unicode_char(0x0BE6, _L("Nd n=0"), _L("TAMIL DIGIT ZERO"));			// New
  1165 	test_unicode_char(0x0BE7, _L("Nd n=1"), _L("TAMIL DIGIT ZERO"));			// Existing
  1166 
  1167 	test_unicode_char(0x0BF2, _L("No n=1000"), _L("TAMIL NUMBER ONE THOUSAND"));// Existing
  1168 	test_unicode_char(0x0BF3, _L("So b=ON"), _L("TAMIL DAY SIGN"));				// New
  1169 	test_unicode_char(0x0BF4, _L("So b=ON"), _L("TAMIL MONTH SIGN"));			// New
  1170 	test_unicode_char(0x0BF5, _L("So b=ON"), _L("TAMIL YEAR SIGN"));			// New
  1171 	test_unicode_char(0x0BF6, _L("So b=ON"), _L("TAMIL DEBIT SIGN"));			// New
  1172 	test_unicode_char(0x0BF7, _L("So b=ON"), _L("TAMIL CREDIT SIGN"));			// New
  1173 	test_unicode_char(0x0BF8, _L("So b=ON"), _L("TAMIL AS ABOVE SIGN"));		// New
  1174 	test_unicode_char(0x0BF9, _L("Sc b=ET"), _L("TAMIL RUPEE SIGN"));			// New
  1175 	test_unicode_char(0x0BFA, _L("So b=ON"), _L("TAMIL NUMBER SIGN"));			// New
  1176 	test_unicode_char(0x0C01, _L("Mc"), _L("TELUGU SIGN CANDRABINDU"));			// Existing
  1177 	
  1178 	test_unicode_char(0x0CB9, _L("Lo"), _L("KANNADA LETTER HA"));				// Existing
  1179 	test_unicode_char(0x0CBC, _L("Mn b=NSM c=7"), _L("KANNADA SIGN NUKTA"));	// New
  1180 	test_unicode_char(0x0CBD, _L("Lo"), _L("KANNADA SIGN AVAGRAHA"));			// New
  1181 	test_unicode_char(0x0CBE, _L("Mc"), _L("KANNADA VOWEL SIGN AA"));			// Existing
  1182 
  1183 	test_unicode_char(0x0CE1, _L("Lo"), _L("KANNADA LETTER VOCALIC LL"));			// Existing
  1184 	test_unicode_char(0x0CE2, _L("Mn b=NSM"), _L("KANNADA VOWEL SIGN VOCALIC L"));	// New
  1185 	test_unicode_char(0x0CE3, _L("Mn b=NSM"), _L("KANNADA VOWEL SIGN VOCALIC LL"));	// New
  1186 	test_unicode_char(0x0CE6, _L("Nd n=0"), _L("KANNADA DIGIT ZERO"));				// Existing
  1187 
  1188 	test_unicode_char(0x0CEF, _L("Nd n=9"), _L("KANNADA DIGIT NINE"));				// Existing
  1189 	test_unicode_char(0x0CF1, _L("So b=ON"), _L("KANNADA SIGN JIHVAMULIYA"));		// New
  1190 	test_unicode_char(0x0CF2, _L("So b=ON"), _L("KANNADA SIGN UPADHMANIYA"));		// New
  1191 	test_unicode_char(0x0D02, _L("Mc"), _L("MALAYALAM SIGN ANUSVARA"));				// Existing
  1192 	
  1193 	test_unicode_char(0x0B83, _L("Lo"), _L("TAMIL SIGN VISARGA"));					// Modified	
  1194 	test_unicode_char(0x0CBF, _L("Mn"), _L("KANNADA VOWEL SIGN I"));				// Modified
  1195 	test_unicode_char(0x0CC6, _L("Mn"), _L("KANNADA VOWEL SIGN E"));				// Modified
  1196 
  1197 	// Unicode 5.0 specific
  1198 	test_unicode_char(0x0220, _L("Lu l=19e"), _L("LATIN CAPITAL LETTER N WITH LONG RIGHT LEG"));		// New
  1199 	test_unicode_char(0x0294, _L("Lo"), _L("LATIN LETTER GLOTTAL STOP"));								// Modified
  1200 	test_unicode_char(0x10400, _L("Lu l=10428"), _L("DESERET CAPITAL LETTER LONG I"));				// out BMP fold
  1201 	// Don't test those title case equal to upper case. See TUnicode::GetTitleCase().
  1202 	//test_unicode_char(0x10428, _L("Ll u=10400 t=10400"), _L("DESERET SMALL LETTER LONG I"));				// out BMP fold
  1203 	test_unicode_char(0x10428, _L("Ll u=10400"), _L("DESERET SMALL LETTER LONG I"));				// out BMP fold
  1204 	test_unicode_char(0x2F85B, _L("Lo w=4 d=58f7"), _L("CJK COMPATIBILITY IDEOGRAPH-2F85B"));			// New
  1205 	}
  1206 
  1207 void test_unicode_collation(const TDesC& x,const TDesC& y,TInt desired_order,
  1208 							TInt level = 3,const TCollationMethod* method = NULL)
  1209 	{
  1210 	TInt order = x.CompareC(y,level,method);
  1211 
  1212 	// Normalise order to -1, 0 or 1.
  1213 	if (order < 0)
  1214 		order = -1;
  1215 	else if (order > 0)
  1216 		order = 1;
  1217 
  1218 	test(order == desired_order);
  1219 	}
  1220 
  1221 static const TUint32 TheSwedishKey[] = 
  1222 	{
  1223 	0x8f60109,0x8f70109,0x8f80109,0x8f60121,0x8f70121,0x8f80121,0x8dd0109,0x8dd0121,
  1224 	0x8c50121,0x8c50109,
  1225 	};
  1226 
  1227 static const TUint32 TheSwedishIndex[] = 
  1228 	{
  1229 	0x570008,0x770009,
  1230 	};
  1231 
  1232 static const TUint16 TheSwedishStringElement[] = 
  1233 	{
  1234 	0x2,0x61,0x30a,0x2,0x61,0x308,0x2,0x6f,
  1235 	0x308,0x2,0x41,0x30a,0x2,0x41,0x308,0x2,
  1236 	0x4f,0x308,0x2,0x75,0x308,0x2,0x55,0x308,
  1237 	};
  1238 
  1239 static const TUint32 TheSwedishStringIndex[] = 
  1240 	{
  1241 	0xc0004,0x90003,0xf0005,0x150007,0x30001,0x0,0x60002,0x120006,
  1242 	};
  1243 
  1244 static const TCollationKeyTable TheSwedishTable = 
  1245 	{ TheSwedishKey, TheSwedishIndex, 2, TheSwedishStringElement, TheSwedishStringIndex, 8 };
  1246 
  1247 static const TCollationMethod TheSwedishMethod =
  1248 	{ 0, NULL, &TheSwedishTable, 0 };
  1249 
  1250 static const TCollationMethod TheSwapCaseMethod =
  1251 	{ 0, NULL, NULL, TCollationMethod::ESwapCase };
  1252 
  1253 static const TCollationMethod TheFoldCaseMethod =
  1254 	{ 0, NULL, NULL, TCollationMethod::EFoldCase };
  1255 
  1256 static const TUint32 TheKanaKey[] = 
  1257 	{
  1258 	0xc949,0xca09,0x2010f,0x20113,0x4010b,0x4010f,0x5010b,0x5010f,
  1259 	0x8010b,0x8010f,0xa010f,0xa014b,0xc010b,0xc010f,0xe010b,0xe010f,
  1260 	0xe013f,0x10010b,0x10010f,0x12010b,0x12010f,0x14c90b,0x14c90f,0x16ca0b,
  1261 	0x16ca0f,0x17010b,0x18030f,0x1a060b,0x1a060f,0x1c160f,0x1e0d0b,0x1e0d0f,
  1262 	0x20290f,0x22020b,0x22020f,0x24010d,0x28010d,0x2c010d,0x2e010d,0x30010d,
  1263 	0x32010d,0x34010d,0x36010b,0x36010f,0x38010f,0x3a010f,0x3c0109,0x3c010d,
  1264 	0x3e0109,0x3e010d,0x40010d,0x400109,0x42010d,0x440109,0x44010d,0x46010d,
  1265 	0x48010d,0x4a010f,0x4c010f,0x4e010b,0x4f010b,0x50010b,0x50010f,0x52010b,
  1266 	0x52010f,0x54010b,0x56010b,0x58010b,0x58010f,0x5a010b,0x5a010f,0x5c010b,
  1267 	0x5c010f,0x5e010b,0x5e010f,0x60010b,0x62010b,0x64010b,0x66010b,0x68010f,
  1268 	0x68010b,0x6a010f,0x6a010b,0x6c010b,0x6e010b,0x6f010b,0x70010b,0x72010b,
  1269 	0x72010f,0x74010b,0x74010f,0x76010f,0x78010f,0x7a010f,0x7c010b,0x7c010f,
  1270 	0x80010b,0x80010f,0x82010b,0x82010f,0x84010f,0x86010f,0x88010f,0x8a010f,
  1271 	0x8c010b,0x8e010f,0x90010f,0x92010f,0x94010d,0x960109,0x96010d,0x980109,
  1272 	0x98010d,0x9a010d,0x9c0109,0x9c010d,0x9e010b,0x9e010f,0x100010b,0x100010f,
  1273 	0x102010b,0x102010f,0x104010b,0x104010f,0x106010b,0x106010f,0x107010f,0x108010f,
  1274 	0x109010f,0x10a010f,0x10b010f,0x10c010f,0x10d010f,0x10e010f,0x10f010f,0x110010f,
  1275 	0x111010f,0x112010f,0x113010f,0x114010f,0x115010f,0x116010f,0x117010f,0x118010f,
  1276 	0x119010f,0x11a010f,0x11b010f,0x11c010f,0x11d010f,0x11e010f,0x11f010f,0x120010f,
  1277 	0x121010f,0x122010f,0x123010f,0x124010f,0x125010f,0x126010f,0x127010f,0x128010f,
  1278 	0x129010f,0x12a010f,0x12b010f,0x12c010f,0x12d010f,0x12e010f,0x12f010f,0x130010f,
  1279 	0x131010f,0x132010f,0x133010f,0x134010f,0x135010f,0x136010f,0x137010f,0x138010f,
  1280 	0x139010f,0x13b010f,0x13c010d,0x13d010d,0x13e010f,0x13f010f,0x140010f,0x141010f,
  1281 	0x142010f,0x143010d,0x144010d,0x145010d,0x146010d,0x147010d,0x148010d,0x149010d,
  1282 	0x14a010d,0x14b010d,0x14c010d,0x14d010d,0x14e010d,0x14f010d,0x150010d,0x151010d,
  1283 	0x152010d,0x153010d,0x154010d,0x155010d,0x156010d,0x157010d,0x158010d,0x159010d,
  1284 	0x15a010d,0x15b010d,0x15c010d,0x15d010d,0x15e010d,0x15f010d,0x160010f,0x161010f,
  1285 	0x162010f,0x163010f,0x164010f,0x165010f,0x166010f,0x167010f,0x168010f,0x169010f,
  1286 	0x16a010f,0x16b010f,0x16c010f,0x16d010f,0x16e010f,0x16f010f,0x170010f,0x171010f,
  1287 	0x172010f,0x174010f,0x175010f,0x176010f,0x177010f,0x178010f,0x179010f,0x17a010d,
  1288 	0x17b010d,0x17c010d,0x17d0119,0x17e0119,0x17f0119,0x1800119,0x1810119,0x182010d,
  1289 	0x183010d,0x184010d,0x185010d,0x186010d,0x187010d,0x189010f,0x18a010f,0x18b010f,
  1290 	0x18c010f,0x18d0111,0x18e0111,0x18f0111,0x1900111,0x1910111,0x1920111,0x1930111,
  1291 	0x1940111,0x1950111,0x1960111,0x197010f,0x198010f,0x199010b,0x199010f,0x6c50109,
  1292 	0x6c60109,0x6c70109,0x6c80109,0x6c90109,0x6ca0109,0x6cb0109,0x6cc0109,0x6cd0109,
  1293 	0x6ce0109,0x6cf0109,0x6cf010d,0x6cf0121,0x6cf0125,0x6e30109,0x6e3010d,0x6e30121,
  1294 	0x6e30125,0x6fb0109,0x6fb010d,0x6fb0121,0x6fb0125,0x7070109,0x707010d,0x7070121,
  1295 	0x7070125,0x72f0109,0x72f010d,0x72f0121,0x72f0125,0x75b0109,0x75b010d,0x75b0121,
  1296 	0x75b0125,0x7630109,0x763010d,0x7630121,0x7630125,0x7830109,0x783010d,0x7830121,
  1297 	0x7830125,0x79d0109,0x79d010d,0x79d0121,0x79d0125,0x7b10109,0x7b1010d,0x7b10121,
  1298 	0x7b10125,0x7c10109,0x7c1010d,0x7c10121,0x7c10125,0x7cd0109,0x7cd010d,0x7cd0121,
  1299 	0x7cd0125,0x7f50109,0x7f5010d,0x7f50121,0x7f50125,0x7fd0109,0x7fd010d,0x7fd0121,
  1300 	0x7fd0125,0x8150109,0x815010d,0x8150121,0x8150125,0x82d0109,0x82d010d,0x82d0121,
  1301 	0x82d0125,0x8390109,0x839010d,0x8390121,0x8390125,0x8450109,0x845010d,0x8450121,
  1302 	0x8450125,0x86d0109,0x86d010d,0x86d0121,0x86d0125,0x8890109,0x889010d,0x8890121,
  1303 	0x8890125,0x8ad0109,0x8ad010d,0x8ad0121,0x8ad0125,0x8c50109,0x8c5010d,0x8c50121,
  1304 	0x8c50125,0x8d10109,0x8d1010d,0x8d10121,0x8d10125,0x8d90109,0x8d9010d,0x8d90121,
  1305 	0x8d90125,0x8dd0109,0x8dd010d,0x8dd0121,0x8dd0125,0x8e90109,0x8e9010d,0x8e90121,
  1306 	0x8e90125,0x10200139,0x10200135,0x10200149,0x10200141,0x10200145,0x1020013d,0x10260139,
  1307 	0x10260135,0x10260149,0x10260141,0x10260145,0x1026013d,0x102c0139,0x102c0135,0x102c0149,
  1308 	0x102c0141,0x102c0145,0x102c013d,0x10330139,0x10330135,0x10330149,0x10330141,0x10330145,
  1309 	0x1033013d,0x10390139,0x10390135,0x10390149,0x10390141,0x10390145,0x1039013d,0x103f0135,
  1310 	0x103f0145,0x103f013d,0x10440135,0x10440145,0x1044013d,0x10490135,0x10490145,0x1049013d,
  1311 	0x104e0135,0x104e0145,0x104e013d,0x10530135,0x10530145,0x1053013d,0x10580135,0x10580145,
  1312 	0x1058013d,0x105d0135,0x105d0145,0x105d013d,0x10620135,0x10620145,0x1062013d,0x10670135,
  1313 	0x10670145,0x1067013d,0x106c0135,0x106c0145,0x106c013d,0x10710135,0x10710145,0x1071013d,
  1314 	0x10760135,0x10760145,0x1076013d,0x107b0139,0x107b0135,0x107b0149,0x107b0141,0x107b0145,
  1315 	0x107b013d,0x10830135,0x10830145,0x1083013d,0x10880135,0x10880145,0x1088013d,0x108d0135,
  1316 	0x108d0145,0x108d013d,0x10900135,0x10900145,0x1090013d,0x10930135,0x10930145,0x1093013d,
  1317 	0x10960135,0x10960145,0x1096013d,0x10990135,0x10990145,0x1099013d,0x109c0135,0x109c0145,
  1318 	0x109c013d,0x10a30135,0x10a30145,0x10a3013d,0x10aa0135,0x10aa0145,0x10aa013d,0x10b10135,
  1319 	0x10b10145,0x10b1013d,0x10b80135,0x10b80145,0x10b8013d,0x10bf0135,0x10bf0145,0x10bf013d,
  1320 	0x10c20135,0x10c20145,0x10c2013d,0x10c50135,0x10c50145,0x10c5013d,0x10c80135,0x10c80145,
  1321 	0x10c8013d,0x10cb0135,0x10cb0145,0x10cb013d,0x10ce0139,0x10ce0135,0x10ce0149,0x10ce0141,
  1322 	0x10ce0145,0x10ce013d,0x10d40139,0x10d40135,0x10d40149,0x10d40141,0x10d40145,0x10d4013d,
  1323 	0x10da0139,0x10da0135,0x10da0149,0x10da0141,0x10da0145,0x10da013d,0x10e00135,0x10e00145,
  1324 	0x10e0013d,0x10e30135,0x10e30145,0x10e3013d,0x10e60135,0x10e60145,0x10e6013d,0x10e90135,
  1325 	0x10e90145,0x10e9013d,0x10ec0135,0x10ec0145,0x10ec013d,0x10ef0139,0x10ef0135,0x10ef0149,
  1326 	0x10ef0145,0x10ef013d,0x10f40135,0x10f40145,0x10f60135,0x10f60145,0x10f80135,0x10f80145,
  1327 	0x10f8013d,0x10fb0135,0x10fb0145,0x10fb013d,
  1328 	};
  1329 
  1330 static const TUint32 TheKanaIndex[] = 
  1331 	{
  1332 	0x210013,0x22010d,0x230076,0x24006f,0x250074,0x260078,0x270019,0x28003d,
  1333 	0x29003f,0x2a007a,0x2b0057,0x2c0006,0x2d0059,0x2e0008,0x2f002e,0x30010f,
  1334 	0x310110,0x320111,0x330112,0x340113,0x350114,0x360115,0x370116,0x380117,
  1335 	0x390118,0x3a000c,0x3b000e,0x3c0060,0x3d005e,0x3e0062,0x3f0011,0x40007c,
  1336 	0x41011b,0x42011f,0x430123,0x440127,0x45012b,0x46012f,0x470133,0x480137,
  1337 	0x49013b,0x4a013f,0x4b0143,0x4c0147,0x4d014b,0x4e014f,0x4f0153,0x500157,
  1338 	0x51015b,0x52015f,0x530163,0x540167,0x55016b,0x56016f,0x570173,0x580177,
  1339 	0x59017b,0x5a017f,0x5b0043,0x5c0030,0x5d0045,0x5e001e,0x5f0021,0x60001b,
  1340 	0x610119,0x62011d,0x630121,0x640125,0x650129,0x66012d,0x670131,0x680135,
  1341 	0x690139,0x6a013d,0x6b0141,0x6c0145,0x6d0149,0x6e014d,0x6f0151,0x700155,
  1342 	0x710159,0x72015d,0x730161,0x740165,0x750169,0x76016d,0x770171,0x780175,
  1343 	0x790179,0x7a017d,0x7b0047,0x7c0035,0x7d0049,0x7e0033,0xa20071,0xa30072,
  1344 	0xa5006d,0xa7007e,0xa8001d,0xb00069,0xb1005b,0xb4001a,0xb600b7,0xd7005c,
  1345 	0xf7005d,0x2010002d,0x2015002c,0x20180039,0x2019003a,0x201c003b,0x201d003c,0x202000b5,
  1346 	0x202100b6,0x20250038,0x20260037,0x203000b1,0x2032006a,0x2033006b,0x203b008c,0x2103006c,
  1347 	0x211600ef,0x212100f1,0x216000cc,0x216100cd,0x216200ce,0x216300cf,0x216400d0,0x216500d1,
  1348 	0x216600d2,0x216700d3,0x216800d4,0x216900d5,0x21700101,0x21710102,0x21720103,0x21730104,
  1349 	0x21740105,0x21750106,0x21760107,0x21770108,0x21780109,0x2179010a,0x2190008f,0x21910090,
  1350 	0x2192008e,0x21930091,0x21d2009e,0x21d4009f,0x220000a0,0x220200a5,0x220300a1,0x220700a6,
  1351 	0x22080093,0x220b0094,0x221100fe,0x2212005a,0x221a00ab,0x221d00ad,0x221e0066,0x221f00ff,
  1352 	0x222000a2,0x22250034,0x2227009b,0x2228009c,0x2229009a,0x222a0099,0x222b00af,0x222c00b0,
  1353 	0x222e00fd,0x22340066,0x223500ae,0x223d00ac,0x225200a8,0x226100a7,0x22660064,0x22670065,
  1354 	0x226a00a9,0x226b00aa,0x22820097,0x22830098,0x22860095,0x22870096,0x22a500a3,0x22bf0100,
  1355 	0x231200a4,0x246000b9,0x246100ba,0x246200bb,0x246300bc,0x246400bd,0x246500be,0x246600bf,
  1356 	0x246700c0,0x246800c1,0x246900c2,0x246a00c3,0x246b00c3,0x246c00c4,0x246d00c5,0x246e00c6,
  1357 	0x246f00c7,0x247000c8,0x247100c9,0x247200ca,0x247300cb,0x25a00087,0x25a10086,0x25b20089,
  1358 	0x25b30088,0x25bc008b,0x25bd008a,0x25c60085,0x25c70084,0x25cb0081,0x25ce0083,0x25cf0082,
  1359 	0x25ef00b8,0x26050080,0x2606007f,0x26400068,0x26420067,0x266a00b4,0x266d00b3,0x266f00b2,
  1360 	0x30010003,0x30020005,0x30030025,0x30050027,0x30060028,0x30070029,0x3008004b,0x3009004c,
  1361 	0x300a004d,0x300b004e,0x300c004f,0x300d0051,0x300e0053,0x300f0054,0x30100055,0x30110056,
  1362 	0x3012008d,0x30130092,0x30140041,0x30150042,0x301c0032,0x301d00ed,0x301f00ee,0x30410181,
  1363 	0x30420182,0x30430187,0x30440188,0x3045018d,0x3046018e,0x30470193,0x30480194,0x30490199,
  1364 	0x304a019a,0x304b019f,0x304d01a2,0x304f01a5,0x305101a8,0x305301ab,0x305501ae,0x305701b1,
  1365 	0x305901b4,0x305b01b7,0x305d01ba,0x305f01bd,0x306101c0,0x306301c3,0x306401c4,0x306601c9,
  1366 	0x306801cc,0x306a01cf,0x306b01d2,0x306c01d5,0x306d01d8,0x306e01db,0x306f01de,0x307201e1,
  1367 	0x307501e4,0x307801e7,0x307b01ea,0x307e01ed,0x307f01f0,0x308001f3,0x308101f6,0x308201f9,
  1368 	0x308301fc,0x308401fd,0x30850202,0x30860203,0x30870208,0x30880209,0x3089020e,0x308a0211,
  1369 	0x308b0214,0x308c0217,0x308d021a,0x308e021d,0x308f021e,0x30900222,0x30910224,0x30920226,
  1370 	0x30930229,0x30990000,0x309a0001,0x309b0016,0x309c0018,0x309d0024,0x30a10183,0x30a20185,
  1371 	0x30a30189,0x30a4018b,0x30a5018f,0x30a60191,0x30a70195,0x30a80197,0x30a9019b,0x30aa019d,
  1372 	0x30ab01a0,0x30ad01a3,0x30af01a6,0x30b101a9,0x30b301ac,0x30b501af,0x30b701b2,0x30b901b5,
  1373 	0x30bb01b8,0x30bd01bb,0x30bf01be,0x30c101c1,0x30c301c5,0x30c401c7,0x30c601ca,0x30c801cd,
  1374 	0x30ca01d0,0x30cb01d3,0x30cc01d6,0x30cd01d9,0x30ce01dc,0x30cf01df,0x30d201e2,0x30d501e5,
  1375 	0x30d801e8,0x30db01eb,0x30de01ee,0x30df01f1,0x30e001f4,0x30e101f7,0x30e201fa,0x30e301fe,
  1376 	0x30e40200,0x30e50204,0x30e60206,0x30e7020a,0x30e8020c,0x30e9020f,0x30ea0212,0x30eb0215,
  1377 	0x30ec0218,0x30ed021b,0x30ee021f,0x30ef0220,0x30f00223,0x30f10225,0x30f20227,0x30f3022a,
  1378 	0x30fb000a,0x30fc002b,0x30fd0023,0x323100f7,0x323200f8,0x323900f9,0x32a400f2,0x32a500f3,
  1379 	0x32a600f4,0x32a700f5,0x32a800f6,0x330300dc,0x330d00e0,0x331400d7,0x331800da,0x332200d8,
  1380 	0x332300e2,0x332600e1,0x332700db,0x332b00e3,0x333600dd,0x333b00e5,0x334900d6,0x334a00e4,
  1381 	0x334d00d9,0x335100de,0x335700df,0x337b00ec,0x337c00fc,0x337d00fb,0x337e00fa,0x338f00e9,
  1382 	0x339c00e6,0x339d00e7,0x339e00e8,0x33a100eb,0x33c400ea,0x33cd00f0,0x4edd0026,0xfe540010,
  1383 	0xff010014,0xff02010e,0xff030077,0xff040070,0xff050075,0xff060079,0xff07010c,0xff08003e,
  1384 	0xff090040,0xff0a007b,0xff0b0058,0xff0c0007,0xff0d005a,0xff0e0009,0xff0f002f,0xff1a000d,
  1385 	0xff1b000f,0xff1c0061,0xff1d005f,0xff1e0063,0xff1f0012,0xff20007d,0xff21011c,0xff220120,
  1386 	0xff230124,0xff240128,0xff25012c,0xff260130,0xff270134,0xff280138,0xff29013c,0xff2a0140,
  1387 	0xff2b0144,0xff2c0148,0xff2d014c,0xff2e0150,0xff2f0154,0xff300158,0xff31015c,0xff320160,
  1388 	0xff330164,0xff340168,0xff35016c,0xff360170,0xff370174,0xff380178,0xff39017c,0xff3a0180,
  1389 	0xff3b0044,0xff3c0031,0xff3d0046,0xff3e001f,0xff3f0022,0xff40001c,0xff41011a,0xff42011e,
  1390 	0xff430122,0xff440126,0xff45012a,0xff46012e,0xff470132,0xff480136,0xff49013a,0xff4a013e,
  1391 	0xff4b0142,0xff4c0146,0xff4d014a,0xff4e014e,0xff4f0152,0xff500156,0xff51015a,0xff52015e,
  1392 	0xff530162,0xff540166,0xff55016a,0xff56016e,0xff570172,0xff580176,0xff59017a,0xff5a017e,
  1393 	0xff5b0048,0xff5c0036,0xff5d004a,0xff5e0032,0xff610004,0xff620050,0xff630052,0xff640002,
  1394 	0xff65000b,0xff660228,0xff670184,0xff68018a,0xff690190,0xff6a0196,0xff6b019c,0xff6c01ff,
  1395 	0xff6d0205,0xff6e020b,0xff6f01c6,0xff70002a,0xff710186,0xff72018c,0xff730192,0xff740198,
  1396 	0xff75019e,0xff7601a1,0xff7701a4,0xff7801a7,0xff7901aa,0xff7a01ad,0xff7b01b0,0xff7c01b3,
  1397 	0xff7d01b6,0xff7e01b9,0xff7f01bc,0xff8001bf,0xff8101c2,0xff8201c8,0xff8301cb,0xff8401ce,
  1398 	0xff8501d1,0xff8601d4,0xff8701d7,0xff8801da,0xff8901dd,0xff8a01e0,0xff8b01e3,0xff8c01e6,
  1399 	0xff8d01e9,0xff8e01ec,0xff8f01ef,0xff9001f2,0xff9101f5,0xff9201f8,0xff9301fb,0xff940201,
  1400 	0xff950207,0xff96020d,0xff970210,0xff980213,0xff990216,0xff9a0219,0xff9b021c,0xff9c0221,
  1401 	0xff9d022b,0xff9e0015,0xff9f0017,0xffe00071,0xffe10073,0xffe2009d,0xffe30020,0xffe4010b,
  1402 	0xffe5006e,
  1403 	};
  1404 
  1405 /*
  1406 Collation keys for the Hiragana and Katakana syllabaries, built by
  1407 running coltab on \loce32\japanese\source\japanese_basekeys.txt after deleting all CJK characters.
  1408 */
  1409 static const TCollationKeyTable TheKanaTable = 
  1410 	{ TheKanaKey, TheKanaIndex, 561, NULL, NULL, 0 };
  1411 
  1412 static const TCollationMethod TheKanaMethod =
  1413 	{ 0, NULL, &TheKanaTable, 0 };
  1414 
  1415 static const TCollationMethod TheSwapKanaMethod =
  1416 	{ 0, NULL, &TheKanaTable, TCollationMethod::ESwapKana };
  1417 
  1418 static const TUint32 TheQazKey[] = 
  1419 	{
  1420 	0x6d00121,0x6e40121,
  1421 	};
  1422 
  1423 static const TUint32 TheQazIndex[] = 
  1424 	{
  1425 	0
  1426 	};
  1427 
  1428 static const TUint16 TheQazStringElement[] = 
  1429 	{
  1430 	0x2,0x53,0x45,0x3,0x53,0x45,0x58,
  1431 	};
  1432 
  1433 static const TUint32 TheQazStringIndex[] = 
  1434 	{
  1435 	0x0,0x30001,
  1436 	};
  1437 
  1438 static const TCollationKeyTable TheQazTable = 
  1439 	{ TheQazKey, TheQazIndex, 0, TheQazStringElement, TheQazStringIndex, 2 };
  1440 
  1441 // A bizarre collation method that sorts 'SE' between A and B and 'SEX' between B and C
  1442 static const TCollationMethod TheQazMethod = 
  1443 	{ 0, NULL, &TheQazTable, 0 };
  1444 
  1445 // A collation method to sort accents starting at the end of the string, as in France
  1446 static const TCollationMethod TheAccentsBackwardsMethod = 
  1447 	{ 0, NULL, NULL, TCollationMethod::EAccentsBackwards };
  1448 
  1449 void test_unicode_collations()
  1450 	{
  1451 	/*
  1452 	Note: the curious method of getting values greater than 255 into the strings is needed
  1453 	because GCC doesn't handle the \x notation properly: it zeroes the high byte, so
  1454 	L"\x2011" puts the value 0x0011, not 0x2011, into the string.
  1455 	*/
  1456 	TBuf<32> x, y;
  1457 
  1458 	test.Next(_L("collation"));
  1459 	test_unicode_collation(_L("SEZ"),_L("BZ"),-1,3,&TheQazMethod); // test 2-character combination 'SE'
  1460 	test_unicode_collation(_L("SEXY"),_L("CY"),-1,3,&TheQazMethod); // test 3-character combination 'SEX'
  1461 	test_unicode_collation(_L("Graham"),_L("Graham"),0);		// equality
  1462 	test_unicode_collation(_L("something"),_L(""),1);			// something after nothing
  1463 	test_unicode_collation(_L("inform"),_L("information"),-1);	// prefixes come first
  1464 	test_unicode_collation(_L("unicode"),_L("consortium"),1);	// standard alphabetic ordering: lowercase
  1465 	test_unicode_collation(_L("AARON"),_L("AARDVARK"),1);		// standard alphabetic ordering: uppercase
  1466 	test_unicode_collation(_L("AARON"),_L("AARDVARK"),1,0);		// alphabetic ordering is significant at level 0
  1467 	test_unicode_collation(_L("hello"),_L("Hello"),-1,3);		// lowercase before uppercase
  1468 	test_unicode_collation(_L("hello"),_L("Hello"),-1,3,&TheSwapKanaMethod);// swapping kana ordering doesn't affect case
  1469 	test_unicode_collation(_L("hello"),_L("Hello"),1,3,&TheSwapCaseMethod); // uppercase before lowercase if ESwapCase used
  1470 	test_unicode_collation(_L("hello"),_L("Hello"),0,2,&TheFoldCaseMethod); // uppercase = lowercase if EFoldCase used at level 2
  1471 	test_unicode_collation(_L("hello"),_L("Hello"),-1,2);		// case is significant at level 2
  1472 	test_unicode_collation(_L("hello"),_L("Hello"),0,1);		// ignore case at level 1
  1473 	test_unicode_collation(_L("hello"),_L("[H E L L O !]"),0,1);// ignore punctuation and case at level 1
  1474 	test_unicode_collation(_L("1234"),_L("abc"),-1);			// digits before letters
  1475 	x = _L("week day"); x[4] = 0x2011;							// (week-day with non-breaking hyphen)
  1476 	test_unicode_collation(x,_L("weekend"),-1);					// ignore punctuation if letters differ; d < e
  1477 	test_unicode_collation(x,_L("week-day"),1);					// compare punctuation if otherwise equal
  1478 	test_unicode_collation(x,_L("week-day"),0,2);				// ignore difference between hyphens at level 2
  1479 	test_unicode_collation(x,_L("Week-day"),-1);				// case difference outweighs punctuation ordering
  1480 	y = _L("a ngstro m"); y[1] = 0x30a; y[8] = 0x308;			// (a<ring>ngstro<umlaut>m with piece accents)
  1481 	test_unicode_collation(_L("\xe5ngstr\xf6m"),y,0);			// base+accent = precomposed (a<ring>ngstro<umlaut>m)
  1482 	test_unicode_collation(_L("Liege"),_L("Li\xe8ge"),-1);		// unaccented before accented...
  1483 	test_unicode_collation(_L("Liege"),_L("Li\xe8ge"),-1,1);	// accents are significant at level 1
  1484 	test_unicode_collation(_L("Liege"),_L("li\xe8ge"),-1);		// accentuation outweighs case
  1485 	test_unicode_collation(_L("Liege"),_L("li\xe8ge"),0,0);		// ignore accents and case at level 0
  1486 	test_unicode_collation(_L("\xe5ngstr\xf6m"),_L("zoo"),-1);	// a-ring before z by default
  1487 	test_unicode_collation(_L("\xe5ngstr\xf6m"),_L("zoo"),1,3,&TheSwedishMethod);	// a-ring after z in Sweden
  1488 	test_unicode_collation(_L("Antidisestablishmentarian"),_L("antidisestablishmentariac"),1);
  1489 																// long strings that don't have identical prefixes
  1490 	x = _L("\x304b\x306a"); y = _L("\x30ab\x30ca");				// 'kana' in Hiragana and Katakana
  1491 	test_unicode_collation(x,y,-1,3,&TheKanaMethod);			// Hiragana before Katakana 
  1492 	test_unicode_collation(x,y,1,3,&TheSwapKanaMethod);			// Katakana before Hiragana if ESwapKana used
  1493 	x = _L("p\xe9"L"ch\xe9"); y = _L("p\xea"L"che");			// x = pe<acute>che<acute>, y = pe<circumflex>che
  1494 	test_unicode_collation(x,y,-1,3);							// normal order; accents compared from start
  1495 	test_unicode_collation(x,y,1,3,&TheAccentsBackwardsMethod);	// reverse order; accents compared from end
  1496 	test_unicode_collation(_L("aaAA"),_L("aAaA"),0,3,&TheFoldCaseMethod); // case folding should work even at level 3
  1497 	test_unicode_collation(_L("\x2113"),_L("L"),1,3,&TheFoldCaseMethod); // script l and L should not be equal;
  1498 																// script l before L because L folds to lower case,
  1499 																// which sorts after secondary key type for script l
  1500 	test_unicode_collation(_L("\x3c2"),_L("\x3c3"),-1,3); // Greek final and non-final sigma
  1501 	test_unicode_collation(_L("\x3c2"),_L("\x3c3"),0,3,&TheFoldCaseMethod); // Greek final and non-final sigma
  1502 	test_unicode_collation(_L("\xee0"),_L("\x4e00"),1,3);		// undefined character after CJK character not in table
  1503 	test_unicode_collation(_L("\xee0"),_L("\xef0"),-1,3);		// undefined characters must differ
  1504 	test_unicode_collation(_L("\xee0\xee1"),_L("\xef0"),-1,3);	// undefined characters in Unicode order, not string length
  1505 	test_unicode_collation(_L("\xd800\xdc00"),_L("\xceff"),1,3);	// character U+10000 (using surrogates) 
  1506 																// after Hangul character not in table
  1507 	}
  1508 
  1509 // range of characters newly added or changed in Unicode 5.0
  1510 // Inside BMP
  1511 static const TUint32 Unicode5NewCharRange[] = 
  1512 	{
  1513 	0x0220, 0x0221, 0x0234, 0x024F, 0x02AE, 0x02AF, 0x02EF, 0x02FF,
  1514 	0x034F, 0x035F, 0x0363, 0x036F, 0x037B, 0x037D, 0x03D8, 0x03D9,
  1515 	0x03F4, 0x03FF, 0x048A, 0x048B, 0x04C5, 0x04C6, 0x04C9, 0x04CA,
  1516 	0x04CD, 0x04CF, 0x04F6, 0x0513, 0x05A2, 0x05A2, 0x05BA, 0x05BA,
  1517 	0x05C5, 0x05C7, 0x0600, 0x0603, 0x060B, 0x0615, 0x061E, 0x061F,
  1518 	0x0656, 0x065E, 0x066E, 0x066F, 0x06EE, 0x06EF, 0x06FF, 0x06FF,
  1519 	0x072D, 0x072F, 0x074D, 0x076D, 0x07B1, 0x07B1, 0x07C0, 0x07FA,
  1520 	0x0904, 0x0904, 0x097B, 0x097F, 0x09BD, 0x09BD, 0x09CE, 0x09CE,
  1521 	0x0A01, 0x0A03, 0x0A8C, 0x0A8C, 0x0AE1, 0x0AE3, 0x0AF1, 0x0AF1,
  1522 	0x0B35, 0x0B35, 0x0B71, 0x0B71, 0x0BB6, 0x0BB6, 0x0BE6, 0x0BE6,
  1523 	0x0BF3, 0x0BFA, 0x0CBC, 0x0CBD, 0x0CE2, 0x0CE3, 0x0CF1, 0x0CF2,
  1524 	0x0FD0, 0x0FD1, 0x10F7, 0x10FC, 0x1207, 0x1207, 0x1247, 0x1247,
  1525 	0x1287, 0x1287, 0x12AF, 0x12AF, 0x12CF, 0x12CF, 0x12EF, 0x12EF,
  1526 	0x130F, 0x130F, 0x131F, 0x131F, 0x1347, 0x1347, 0x135F, 0x1360,
  1527 	0x1380, 0x1399, 0x1700, 0x170C, 0x170E, 0x1714, 0x1720, 0x1736, 
  1528 	0x1740, 0x1753,	0x1760, 0x176C, 0x176E, 0x1770, 0x1772, 0x1773, 
  1529 	0x17DD, 0x17DD, 0x17F0, 0x17F9, 0x1900, 0x191C, 0x1920, 0x192B, 
  1530 	0x1930, 0x193B, 0x1940, 0x1940, 0x1944, 0x196D, 0x1970, 0x1974,
  1531 	0x1980, 0x19A9, 0x19B0, 0x19C9, 0x19D0, 0x19D9, 0x19DE, 0x1A1B,
  1532 	0x1A1E, 0x1A1F, 0x1B00, 0x1B4B, 0x1B50, 0x1B7C, 0x1D00, 0x1DCA, 
  1533 	0x1DFE, 0x1DFF, 0x2047, 0x2063, 0x2071, 0x2071, 0x2090, 0x2094, 
  1534 	0x20B0, 0x20B5, 0x20E4, 0x20EF, 0x213B, 0x214E, 0x2184, 0x2184,
  1535  	0x21F4, 0x21FF, 0x22F2, 0x22FF, 0x237C, 0x237C, 0x239B, 0x23E7, 
  1536 	0x24EB, 0x24FF, 0x2596, 0x259F, 0x25F8, 0x25FF, 0x2614, 0x2618, 
  1537 	0x2672, 0x269C, 0x26A0, 0x26B2, 0x2768, 0x2775, 0x27C0, 0x27CA,
  1538  	0x27D0, 0x27EB, 0x27F0, 0x27FF, 0x2900, 0x2B1A, 0x2B20, 0x2B23, 
  1539 	0x2C00, 0x2C2E, 0x2C30, 0x2C5E, 0x2C60, 0x2C6C, 0x2C74, 0x2C77,
  1540  	0x2C80, 0x2CEA, 0x2CF9, 0x2D25, 0x2D30, 0x2D65, 0x2D6F, 0x2D6F,
  1541  	0x2D80, 0x2D96, 0x2DA0, 0x2DA6, 0x2DA8, 0x2DAE, 0x2DB0, 0x2DB6, 
  1542 	0x2DB8, 0x2DBE, 0x2DC0, 0x2DC6, 0x2DC8, 0x2DCE, 0x2DD0, 0x2DD6, 
  1543 	0x2DD8, 0x2DDE, 0x2E00, 0x2E17, 0x2E1C, 0x2E1D, 0x303B, 0x303D,
  1544 	0x3095, 0x3096, 0x309F, 0x30A0, 0x30FF, 0x30FF, 0x31C0, 0x31CF,
  1545 	0x31F0, 0x31FF, 0x321D, 0x321E, 0x3250, 0x325F, 0x327C, 0x327E,
  1546 	0x32B1, 0x32BF, 0x32CC, 0x32CF, 0x3377, 0x337A, 0x33DE, 0x33DF,
  1547 	0x33FF, 0x33FF, 0x4DC0, 0x4DFF, 0x9FA6, 0x9FBB, 0xA4A2, 0xA4A3,
  1548 	0xA4B4, 0xA4B4, 0xA4C1, 0xA4C1, 0xA4C5, 0xA4C5, 0xA700, 0xA71A,
  1549 	0xA720, 0xA721, 0xA800, 0xA82B, 0xA840, 0xA877, 0xFA30, 0xFA6A,
  1550 	0xFA70, 0xFAD9, 0xFDFC, 0xFDFD, 0xFE00, 0xFE19, 0xFE45, 0xFE48,
  1551 	0xFE73, 0xFE73, 0xFF5F, 0xFF60, 
  1552 	};
  1553 
  1554 // characters Codepoint out of BMP, newly added or changed in Unicode 5.0
  1555 static const TUint32 Unicode5NewCharOutBMPIndex[] =
  1556 {
  1557 	0x10000, 0x10001, 0x10002, 0x10003, 0x10004, 0x10005, 0x10006, 0x10007, 
  1558 	0x10008, 0x10009, 0x1000A, 0x1000B, 0x1000D, 0x1000E, 0x1000F, 0x10010, 
  1559 	0x10011, 0x10012, 0x10013, 0x10014, 0x10015, 0x10016, 0x10017, 0x10018, 
  1560 	0x10019, 0x1001A, 0x1001B, 0x1001C, 0x1001D, 0x1001E, 0x1001F, 0x10020, 
  1561 	0x10021, 0x10022, 0x10023, 0x10024, 0x10025, 0x10026, 0x10028, 0x10029, 
  1562 	0x1002A, 0x1002B, 0x1002C, 0x1002D, 0x1002E, 0x1002F, 0x10030, 0x10031, 
  1563 	0x10032, 0x10033, 0x10034, 0x10035, 0x10036, 0x10037, 0x10038, 0x10039, 
  1564 	0x1003A, 0x1003C, 0x1003D, 0x1003F, 0x10040, 0x10041, 0x10042, 0x10043, 
  1565 	0x10044, 0x10045, 0x10046, 0x10047, 0x10048, 0x10049, 0x1004A, 0x1004B, 
  1566 	0x1004C, 0x1004D, 0x10050, 0x10051, 0x10052, 0x10053, 0x10054, 0x10055, 
  1567 	0x10056, 0x10057, 0x10058, 0x10059, 0x1005A, 0x1005B, 0x1005C, 0x1005D, 
  1568 	0x10080, 0x10081, 0x10082, 0x10083, 0x10084, 0x10085, 0x10086, 0x10087, 
  1569 	0x10088, 0x10089, 0x1008A, 0x1008B, 0x1008C, 0x1008D, 0x1008E, 0x1008F, 
  1570 	0x10090, 0x10091, 0x10092, 0x10093, 0x10094, 0x10095, 0x10096, 0x10097, 
  1571 	0x10098, 0x10099, 0x1009A, 0x1009B, 0x1009C, 0x1009D, 0x1009E, 0x1009F, 
  1572 	0x100A0, 0x100A1, 0x100A2, 0x100A3, 0x100A4, 0x100A5, 0x100A6, 0x100A7, 
  1573 	0x100A8, 0x100A9, 0x100AA, 0x100AB, 0x100AC, 0x100AD, 0x100AE, 0x100AF, 
  1574 	0x100B0, 0x100B1, 0x100B2, 0x100B3, 0x100B4, 0x100B5, 0x100B6, 0x100B7, 
  1575 	0x100B8, 0x100B9, 0x100BA, 0x100BB, 0x100BC, 0x100BD, 0x100BE, 0x100BF, 
  1576 	0x100C0, 0x100C1, 0x100C2, 0x100C3, 0x100C4, 0x100C5, 0x100C6, 0x100C7, 
  1577 	0x100C8, 0x100C9, 0x100CA, 0x100CB, 0x100CC, 0x100CD, 0x100CE, 0x100CF, 
  1578 	0x100D0, 0x100D1, 0x100D2, 0x100D3, 0x100D4, 0x100D5, 0x100D6, 0x100D7, 
  1579 	0x100D8, 0x100D9, 0x100DA, 0x100DB, 0x100DC, 0x100DD, 0x100DE, 0x100DF, 
  1580 	0x100E0, 0x100E1, 0x100E2, 0x100E3, 0x100E4, 0x100E5, 0x100E6, 0x100E7, 
  1581 	0x100E8, 0x100E9, 0x100EA, 0x100EB, 0x100EC, 0x100ED, 0x100EE, 0x100EF, 
  1582 	0x100F0, 0x100F1, 0x100F2, 0x100F3, 0x100F4, 0x100F5, 0x100F6, 0x100F7, 
  1583 	0x100F8, 0x100F9, 0x100FA, 0x10100, 0x10101, 0x10102, 0x10107, 0x10108, 
  1584 	0x10109, 0x1010A, 0x1010B, 0x1010C, 0x1010D, 0x1010E, 0x1010F, 0x10110, 
  1585 	0x10111, 0x10112, 0x10113, 0x10114, 0x10115, 0x10116, 0x10117, 0x10118, 
  1586 	0x10119, 0x1011A, 0x1011B, 0x1011C, 0x1011D, 0x1011E, 0x1011F, 0x10120, 
  1587 	0x10121, 0x10122, 0x10123, 0x10124, 0x10125, 0x10126, 0x10127, 0x10128, 
  1588 	0x10129, 0x1012A, 0x1012B, 0x1012C, 0x1012D, 0x1012E, 0x1012F, 0x10130, 
  1589 	0x10131, 0x10132, 0x10133, 0x10137, 0x10138, 0x10139, 0x1013A, 0x1013B, 
  1590 	0x1013C, 0x1013D, 0x1013E, 0x1013F, 0x10140, 0x10141, 0x10142, 0x10143, 
  1591 	0x10144, 0x10145, 0x10146, 0x10147, 0x10148, 0x10149, 0x1014A, 0x1014B, 
  1592 	0x1014C, 0x1014D, 0x1014E, 0x1014F, 0x10150, 0x10151, 0x10152, 0x10153, 
  1593 	0x10154, 0x10155, 0x10156, 0x10157, 0x10158, 0x10159, 0x1015A, 0x1015B, 
  1594 	0x1015C, 0x1015D, 0x1015E, 0x1015F, 0x10160, 0x10161, 0x10162, 0x10163, 
  1595 	0x10164, 0x10165, 0x10166, 0x10167, 0x10168, 0x10169, 0x1016A, 0x1016B, 
  1596 	0x1016C, 0x1016D, 0x1016E, 0x1016F, 0x10170, 0x10171, 0x10172, 0x10173, 
  1597 	0x10174, 0x10175, 0x10176, 0x10177, 0x10178, 0x10179, 0x1017A, 0x1017B, 
  1598 	0x1017C, 0x1017D, 0x1017E, 0x1017F, 0x10180, 0x10181, 0x10182, 0x10183, 
  1599 	0x10184, 0x10185, 0x10186, 0x10187, 0x10188, 0x10189, 0x1018A, 0x10300, 
  1600 	0x10301, 0x10302, 0x10303, 0x10304, 0x10305, 0x10306, 0x10307, 0x10308, 
  1601 	0x10309, 0x1030A, 0x1030B, 0x1030C, 0x1030D, 0x1030E, 0x1030F, 0x10310, 
  1602 	0x10311, 0x10312, 0x10313, 0x10314, 0x10315, 0x10316, 0x10317, 0x10318, 
  1603 	0x10319, 0x1031A, 0x1031B, 0x1031C, 0x1031D, 0x1031E, 0x10320, 0x10321, 
  1604 	0x10322, 0x10323, 0x10330, 0x10331, 0x10332, 0x10333, 0x10334, 0x10335, 
  1605 	0x10336, 0x10337, 0x10338, 0x10339, 0x1033A, 0x1033B, 0x1033C, 0x1033D, 
  1606 	0x1033E, 0x1033F, 0x10340, 0x10341, 0x10342, 0x10343, 0x10344, 0x10345, 
  1607 	0x10346, 0x10347, 0x10348, 0x10349, 0x1034A, 0x10380, 0x10381, 0x10382, 
  1608 	0x10383, 0x10384, 0x10385, 0x10386, 0x10387, 0x10388, 0x10389, 0x1038A, 
  1609 	0x1038B, 0x1038C, 0x1038D, 0x1038E, 0x1038F, 0x10390, 0x10391, 0x10392, 
  1610 	0x10393, 0x10394, 0x10395, 0x10396, 0x10397, 0x10398, 0x10399, 0x1039A, 
  1611 	0x1039B, 0x1039C, 0x1039D, 0x1039F, 0x103A0, 0x103A1, 0x103A2, 0x103A3, 
  1612 	0x103A4, 0x103A5, 0x103A6, 0x103A7, 0x103A8, 0x103A9, 0x103AA, 0x103AB, 
  1613 	0x103AC, 0x103AD, 0x103AE, 0x103AF, 0x103B0, 0x103B1, 0x103B2, 0x103B3, 
  1614 	0x103B4, 0x103B5, 0x103B6, 0x103B7, 0x103B8, 0x103B9, 0x103BA, 0x103BB, 
  1615 	0x103BC, 0x103BD, 0x103BE, 0x103BF, 0x103C0, 0x103C1, 0x103C2, 0x103C3, 
  1616 	0x103C8, 0x103C9, 0x103CA, 0x103CB, 0x103CC, 0x103CD, 0x103CE, 0x103CF, 
  1617 	0x103D0, 0x103D1, 0x103D2, 0x103D3, 0x103D4, 0x103D5, 0x10400, 0x10401, 
  1618 	0x10402, 0x10403, 0x10404, 0x10405, 0x10406, 0x10407, 0x10408, 0x10409, 
  1619 	0x1040A, 0x1040B, 0x1040C, 0x1040D, 0x1040E, 0x1040F, 0x10410, 0x10411, 
  1620 	0x10412, 0x10413, 0x10414, 0x10415, 0x10416, 0x10417, 0x10418, 0x10419, 
  1621 	0x1041A, 0x1041B, 0x1041C, 0x1041D, 0x1041E, 0x1041F, 0x10420, 0x10421, 
  1622 	0x10422, 0x10423, 0x10424, 0x10425, 0x10426, 0x10427, 0x10428, 0x10429, 
  1623 	0x1042A, 0x1042B, 0x1042C, 0x1042D, 0x1042E, 0x1042F, 0x10430, 0x10431, 
  1624 	0x10432, 0x10433, 0x10434, 0x10435, 0x10436, 0x10437, 0x10438, 0x10439, 
  1625 	0x1043A, 0x1043B, 0x1043C, 0x1043D, 0x1043E, 0x1043F, 0x10440, 0x10441, 
  1626 	0x10442, 0x10443, 0x10444, 0x10445, 0x10446, 0x10447, 0x10448, 0x10449, 
  1627 	0x1044A, 0x1044B, 0x1044C, 0x1044D, 0x1044E, 0x1044F, 0x10450, 0x10451, 
  1628 	0x10452, 0x10453, 0x10454, 0x10455, 0x10456, 0x10457, 0x10458, 0x10459, 
  1629 	0x1045A, 0x1045B, 0x1045C, 0x1045D, 0x1045E, 0x1045F, 0x10460, 0x10461, 
  1630 	0x10462, 0x10463, 0x10464, 0x10465, 0x10466, 0x10467, 0x10468, 0x10469, 
  1631 	0x1046A, 0x1046B, 0x1046C, 0x1046D, 0x1046E, 0x1046F, 0x10470, 0x10471, 
  1632 	0x10472, 0x10473, 0x10474, 0x10475, 0x10476, 0x10477, 0x10478, 0x10479, 
  1633 	0x1047A, 0x1047B, 0x1047C, 0x1047D, 0x1047E, 0x1047F, 0x10480, 0x10481, 
  1634 	0x10482, 0x10483, 0x10484, 0x10485, 0x10486, 0x10487, 0x10488, 0x10489, 
  1635 	0x1048A, 0x1048B, 0x1048C, 0x1048D, 0x1048E, 0x1048F, 0x10490, 0x10491, 
  1636 	0x10492, 0x10493, 0x10494, 0x10495, 0x10496, 0x10497, 0x10498, 0x10499, 
  1637 	0x1049A, 0x1049B, 0x1049C, 0x1049D, 0x104A0, 0x104A1, 0x104A2, 0x104A3, 
  1638 	0x104A4, 0x104A5, 0x104A6, 0x104A7, 0x104A8, 0x104A9, 0x10800, 0x10801, 
  1639 	0x10802, 0x10803, 0x10804, 0x10805, 0x10808, 0x1080A, 0x1080B, 0x1080C, 
  1640 	0x1080D, 0x1080E, 0x1080F, 0x10810, 0x10811, 0x10812, 0x10813, 0x10814, 
  1641 	0x10815, 0x10816, 0x10817, 0x10818, 0x10819, 0x1081A, 0x1081B, 0x1081C, 
  1642 	0x1081D, 0x1081E, 0x1081F, 0x10820, 0x10821, 0x10822, 0x10823, 0x10824, 
  1643 	0x10825, 0x10826, 0x10827, 0x10828, 0x10829, 0x1082A, 0x1082B, 0x1082C, 
  1644 	0x1082D, 0x1082E, 0x1082F, 0x10830, 0x10831, 0x10832, 0x10833, 0x10834, 
  1645 	0x10835, 0x10837, 0x10838, 0x1083C, 0x1083F, 0x10900, 0x10901, 0x10902, 
  1646 	0x10903, 0x10904, 0x10905, 0x10906, 0x10907, 0x10908, 0x10909, 0x1090A, 
  1647 	0x1090B, 0x1090C, 0x1090D, 0x1090E, 0x1090F, 0x10910, 0x10911, 0x10912, 
  1648 	0x10913, 0x10914, 0x10915, 0x10916, 0x10917, 0x10918, 0x10919, 0x1091F, 
  1649 	0x10A00, 0x10A01, 0x10A02, 0x10A03, 0x10A05, 0x10A06, 0x10A0C, 0x10A0D, 
  1650 	0x10A0E, 0x10A0F, 0x10A10, 0x10A11, 0x10A12, 0x10A13, 0x10A15, 0x10A16, 
  1651 	0x10A17, 0x10A19, 0x10A1A, 0x10A1B, 0x10A1C, 0x10A1D, 0x10A1E, 0x10A1F, 
  1652 	0x10A20, 0x10A21, 0x10A22, 0x10A23, 0x10A24, 0x10A25, 0x10A26, 0x10A27, 
  1653 	0x10A28, 0x10A29, 0x10A2A, 0x10A2B, 0x10A2C, 0x10A2D, 0x10A2E, 0x10A2F, 
  1654 	0x10A30, 0x10A31, 0x10A32, 0x10A33, 0x10A38, 0x10A39, 0x10A3A, 0x10A3F, 
  1655 	0x10A40, 0x10A41, 0x10A42, 0x10A43, 0x10A44, 0x10A45, 0x10A46, 0x10A47, 
  1656 	0x10A50, 0x10A51, 0x10A52, 0x10A53, 0x10A54, 0x10A55, 0x10A56, 0x10A57, 
  1657 	0x10A58, 0x12000, 0x12001, 0x12002, 0x12003, 0x12004, 0x12005, 0x12006, 
  1658 	0x12007, 0x12008, 0x12009, 0x1200A, 0x1200B, 0x1200C, 0x1200D, 0x1200E, 
  1659 	0x1200F, 0x12010, 0x12011, 0x12012, 0x12013, 0x12014, 0x12015, 0x12016, 
  1660 	0x12017, 0x12018, 0x12019, 0x1201A, 0x1201B, 0x1201C, 0x1201D, 0x1201E, 
  1661 	0x1201F, 0x12020, 0x12021, 0x12022, 0x12023, 0x12024, 0x12025, 0x12026, 
  1662 	0x12027, 0x12028, 0x12029, 0x1202A, 0x1202B, 0x1202C, 0x1202D, 0x1202E, 
  1663 	0x1202F, 0x12030, 0x12031, 0x12032, 0x12033, 0x12034, 0x12035, 0x12036, 
  1664 	0x12037, 0x12038, 0x12039, 0x1203A, 0x1203B, 0x1203C, 0x1203D, 0x1203E, 
  1665 	0x1203F, 0x12040, 0x12041, 0x12042, 0x12043, 0x12044, 0x12045, 0x12046, 
  1666 	0x12047, 0x12048, 0x12049, 0x1204A, 0x1204B, 0x1204C, 0x1204D, 0x1204E, 
  1667 	0x1204F, 0x12050, 0x12051, 0x12052, 0x12053, 0x12054, 0x12055, 0x12056, 
  1668 	0x12057, 0x12058, 0x12059, 0x1205A, 0x1205B, 0x1205C, 0x1205D, 0x1205E, 
  1669 	0x1205F, 0x12060, 0x12061, 0x12062, 0x12063, 0x12064, 0x12065, 0x12066, 
  1670 	0x12067, 0x12068, 0x12069, 0x1206A, 0x1206B, 0x1206C, 0x1206D, 0x1206E, 
  1671 	0x1206F, 0x12070, 0x12071, 0x12072, 0x12073, 0x12074, 0x12075, 0x12076, 
  1672 	0x12077, 0x12078, 0x12079, 0x1207A, 0x1207B, 0x1207C, 0x1207D, 0x1207E, 
  1673 	0x1207F, 0x12080, 0x12081, 0x12082, 0x12083, 0x12084, 0x12085, 0x12086, 
  1674 	0x12087, 0x12088, 0x12089, 0x1208A, 0x1208B, 0x1208C, 0x1208D, 0x1208E, 
  1675 	0x1208F, 0x12090, 0x12091, 0x12092, 0x12093, 0x12094, 0x12095, 0x12096, 
  1676 	0x12097, 0x12098, 0x12099, 0x1209A, 0x1209B, 0x1209C, 0x1209D, 0x1209E, 
  1677 	0x1209F, 0x120A0, 0x120A1, 0x120A2, 0x120A3, 0x120A4, 0x120A5, 0x120A6, 
  1678 	0x120A7, 0x120A8, 0x120A9, 0x120AA, 0x120AB, 0x120AC, 0x120AD, 0x120AE, 
  1679 	0x120AF, 0x120B0, 0x120B1, 0x120B2, 0x120B3, 0x120B4, 0x120B5, 0x120B6, 
  1680 	0x120B7, 0x120B8, 0x120B9, 0x120BA, 0x120BB, 0x120BC, 0x120BD, 0x120BE, 
  1681 	0x120BF, 0x120C0, 0x120C1, 0x120C2, 0x120C3, 0x120C4, 0x120C5, 0x120C6, 
  1682 	0x120C7, 0x120C8, 0x120C9, 0x120CA, 0x120CB, 0x120CC, 0x120CD, 0x120CE, 
  1683 	0x120CF, 0x120D0, 0x120D1, 0x120D2, 0x120D3, 0x120D4, 0x120D5, 0x120D6, 
  1684 	0x120D7, 0x120D8, 0x120D9, 0x120DA, 0x120DB, 0x120DC, 0x120DD, 0x120DE, 
  1685 	0x120DF, 0x120E0, 0x120E1, 0x120E2, 0x120E3, 0x120E4, 0x120E5, 0x120E6, 
  1686 	0x120E7, 0x120E8, 0x120E9, 0x120EA, 0x120EB, 0x120EC, 0x120ED, 0x120EE, 
  1687 	0x120EF, 0x120F0, 0x120F1, 0x120F2, 0x120F3, 0x120F4, 0x120F5, 0x120F6, 
  1688 	0x120F7, 0x120F8, 0x120F9, 0x120FA, 0x120FB, 0x120FC, 0x120FD, 0x120FE, 
  1689 	0x120FF, 0x12100, 0x12101, 0x12102, 0x12103, 0x12104, 0x12105, 0x12106, 
  1690 	0x12107, 0x12108, 0x12109, 0x1210A, 0x1210B, 0x1210C, 0x1210D, 0x1210E, 
  1691 	0x1210F, 0x12110, 0x12111, 0x12112, 0x12113, 0x12114, 0x12115, 0x12116, 
  1692 	0x12117, 0x12118, 0x12119, 0x1211A, 0x1211B, 0x1211C, 0x1211D, 0x1211E, 
  1693 	0x1211F, 0x12120, 0x12121, 0x12122, 0x12123, 0x12124, 0x12125, 0x12126, 
  1694 	0x12127, 0x12128, 0x12129, 0x1212A, 0x1212B, 0x1212C, 0x1212D, 0x1212E, 
  1695 	0x1212F, 0x12130, 0x12131, 0x12132, 0x12133, 0x12134, 0x12135, 0x12136, 
  1696 	0x12137, 0x12138, 0x12139, 0x1213A, 0x1213B, 0x1213C, 0x1213D, 0x1213E, 
  1697 	0x1213F, 0x12140, 0x12141, 0x12142, 0x12143, 0x12144, 0x12145, 0x12146, 
  1698 	0x12147, 0x12148, 0x12149, 0x1214A, 0x1214B, 0x1214C, 0x1214D, 0x1214E, 
  1699 	0x1214F, 0x12150, 0x12151, 0x12152, 0x12153, 0x12154, 0x12155, 0x12156, 
  1700 	0x12157, 0x12158, 0x12159, 0x1215A, 0x1215B, 0x1215C, 0x1215D, 0x1215E, 
  1701 	0x1215F, 0x12160, 0x12161, 0x12162, 0x12163, 0x12164, 0x12165, 0x12166, 
  1702 	0x12167, 0x12168, 0x12169, 0x1216A, 0x1216B, 0x1216C, 0x1216D, 0x1216E, 
  1703 	0x1216F, 0x12170, 0x12171, 0x12172, 0x12173, 0x12174, 0x12175, 0x12176, 
  1704 	0x12177, 0x12178, 0x12179, 0x1217A, 0x1217B, 0x1217C, 0x1217D, 0x1217E, 
  1705 	0x1217F, 0x12180, 0x12181, 0x12182, 0x12183, 0x12184, 0x12185, 0x12186, 
  1706 	0x12187, 0x12188, 0x12189, 0x1218A, 0x1218B, 0x1218C, 0x1218D, 0x1218E, 
  1707 	0x1218F, 0x12190, 0x12191, 0x12192, 0x12193, 0x12194, 0x12195, 0x12196, 
  1708 	0x12197, 0x12198, 0x12199, 0x1219A, 0x1219B, 0x1219C, 0x1219D, 0x1219E, 
  1709 	0x1219F, 0x121A0, 0x121A1, 0x121A2, 0x121A3, 0x121A4, 0x121A5, 0x121A6, 
  1710 	0x121A7, 0x121A8, 0x121A9, 0x121AA, 0x121AB, 0x121AC, 0x121AD, 0x121AE, 
  1711 	0x121AF, 0x121B0, 0x121B1, 0x121B2, 0x121B3, 0x121B4, 0x121B5, 0x121B6, 
  1712 	0x121B7, 0x121B8, 0x121B9, 0x121BA, 0x121BB, 0x121BC, 0x121BD, 0x121BE, 
  1713 	0x121BF, 0x121C0, 0x121C1, 0x121C2, 0x121C3, 0x121C4, 0x121C5, 0x121C6, 
  1714 	0x121C7, 0x121C8, 0x121C9, 0x121CA, 0x121CB, 0x121CC, 0x121CD, 0x121CE, 
  1715 	0x121CF, 0x121D0, 0x121D1, 0x121D2, 0x121D3, 0x121D4, 0x121D5, 0x121D6, 
  1716 	0x121D7, 0x121D8, 0x121D9, 0x121DA, 0x121DB, 0x121DC, 0x121DD, 0x121DE, 
  1717 	0x121DF, 0x121E0, 0x121E1, 0x121E2, 0x121E3, 0x121E4, 0x121E5, 0x121E6, 
  1718 	0x121E7, 0x121E8, 0x121E9, 0x121EA, 0x121EB, 0x121EC, 0x121ED, 0x121EE, 
  1719 	0x121EF, 0x121F0, 0x121F1, 0x121F2, 0x121F3, 0x121F4, 0x121F5, 0x121F6, 
  1720 	0x121F7, 0x121F8, 0x121F9, 0x121FA, 0x121FB, 0x121FC, 0x121FD, 0x121FE, 
  1721 	0x121FF, 0x12200, 0x12201, 0x12202, 0x12203, 0x12204, 0x12205, 0x12206, 
  1722 	0x12207, 0x12208, 0x12209, 0x1220A, 0x1220B, 0x1220C, 0x1220D, 0x1220E, 
  1723 	0x1220F, 0x12210, 0x12211, 0x12212, 0x12213, 0x12214, 0x12215, 0x12216, 
  1724 	0x12217, 0x12218, 0x12219, 0x1221A, 0x1221B, 0x1221C, 0x1221D, 0x1221E, 
  1725 	0x1221F, 0x12220, 0x12221, 0x12222, 0x12223, 0x12224, 0x12225, 0x12226, 
  1726 	0x12227, 0x12228, 0x12229, 0x1222A, 0x1222B, 0x1222C, 0x1222D, 0x1222E, 
  1727 	0x1222F, 0x12230, 0x12231, 0x12232, 0x12233, 0x12234, 0x12235, 0x12236, 
  1728 	0x12237, 0x12238, 0x12239, 0x1223A, 0x1223B, 0x1223C, 0x1223D, 0x1223E, 
  1729 	0x1223F, 0x12240, 0x12241, 0x12242, 0x12243, 0x12244, 0x12245, 0x12246, 
  1730 	0x12247, 0x12248, 0x12249, 0x1224A, 0x1224B, 0x1224C, 0x1224D, 0x1224E, 
  1731 	0x1224F, 0x12250, 0x12251, 0x12252, 0x12253, 0x12254, 0x12255, 0x12256, 
  1732 	0x12257, 0x12258, 0x12259, 0x1225A, 0x1225B, 0x1225C, 0x1225D, 0x1225E, 
  1733 	0x1225F, 0x12260, 0x12261, 0x12262, 0x12263, 0x12264, 0x12265, 0x12266, 
  1734 	0x12267, 0x12268, 0x12269, 0x1226A, 0x1226B, 0x1226C, 0x1226D, 0x1226E, 
  1735 	0x1226F, 0x12270, 0x12271, 0x12272, 0x12273, 0x12274, 0x12275, 0x12276, 
  1736 	0x12277, 0x12278, 0x12279, 0x1227A, 0x1227B, 0x1227C, 0x1227D, 0x1227E, 
  1737 	0x1227F, 0x12280, 0x12281, 0x12282, 0x12283, 0x12284, 0x12285, 0x12286, 
  1738 	0x12287, 0x12288, 0x12289, 0x1228A, 0x1228B, 0x1228C, 0x1228D, 0x1228E, 
  1739 	0x1228F, 0x12290, 0x12291, 0x12292, 0x12293, 0x12294, 0x12295, 0x12296, 
  1740 	0x12297, 0x12298, 0x12299, 0x1229A, 0x1229B, 0x1229C, 0x1229D, 0x1229E, 
  1741 	0x1229F, 0x122A0, 0x122A1, 0x122A2, 0x122A3, 0x122A4, 0x122A5, 0x122A6, 
  1742 	0x122A7, 0x122A8, 0x122A9, 0x122AA, 0x122AB, 0x122AC, 0x122AD, 0x122AE, 
  1743 	0x122AF, 0x122B0, 0x122B1, 0x122B2, 0x122B3, 0x122B4, 0x122B5, 0x122B6, 
  1744 	0x122B7, 0x122B8, 0x122B9, 0x122BA, 0x122BB, 0x122BC, 0x122BD, 0x122BE, 
  1745 	0x122BF, 0x122C0, 0x122C1, 0x122C2, 0x122C3, 0x122C4, 0x122C5, 0x122C6, 
  1746 	0x122C7, 0x122C8, 0x122C9, 0x122CA, 0x122CB, 0x122CC, 0x122CD, 0x122CE, 
  1747 	0x122CF, 0x122D0, 0x122D1, 0x122D2, 0x122D3, 0x122D4, 0x122D5, 0x122D6, 
  1748 	0x122D7, 0x122D8, 0x122D9, 0x122DA, 0x122DB, 0x122DC, 0x122DD, 0x122DE, 
  1749 	0x122DF, 0x122E0, 0x122E1, 0x122E2, 0x122E3, 0x122E4, 0x122E5, 0x122E6, 
  1750 	0x122E7, 0x122E8, 0x122E9, 0x122EA, 0x122EB, 0x122EC, 0x122ED, 0x122EE, 
  1751 	0x122EF, 0x122F0, 0x122F1, 0x122F2, 0x122F3, 0x122F4, 0x122F5, 0x122F6, 
  1752 	0x122F7, 0x122F8, 0x122F9, 0x122FA, 0x122FB, 0x122FC, 0x122FD, 0x122FE, 
  1753 	0x122FF, 0x12300, 0x12301, 0x12302, 0x12303, 0x12304, 0x12305, 0x12306, 
  1754 	0x12307, 0x12308, 0x12309, 0x1230A, 0x1230B, 0x1230C, 0x1230D, 0x1230E, 
  1755 	0x1230F, 0x12310, 0x12311, 0x12312, 0x12313, 0x12314, 0x12315, 0x12316, 
  1756 	0x12317, 0x12318, 0x12319, 0x1231A, 0x1231B, 0x1231C, 0x1231D, 0x1231E, 
  1757 	0x1231F, 0x12320, 0x12321, 0x12322, 0x12323, 0x12324, 0x12325, 0x12326, 
  1758 	0x12327, 0x12328, 0x12329, 0x1232A, 0x1232B, 0x1232C, 0x1232D, 0x1232E, 
  1759 	0x1232F, 0x12330, 0x12331, 0x12332, 0x12333, 0x12334, 0x12335, 0x12336, 
  1760 	0x12337, 0x12338, 0x12339, 0x1233A, 0x1233B, 0x1233C, 0x1233D, 0x1233E, 
  1761 	0x1233F, 0x12340, 0x12341, 0x12342, 0x12343, 0x12344, 0x12345, 0x12346, 
  1762 	0x12347, 0x12348, 0x12349, 0x1234A, 0x1234B, 0x1234C, 0x1234D, 0x1234E, 
  1763 	0x1234F, 0x12350, 0x12351, 0x12352, 0x12353, 0x12354, 0x12355, 0x12356, 
  1764 	0x12357, 0x12358, 0x12359, 0x1235A, 0x1235B, 0x1235C, 0x1235D, 0x1235E, 
  1765 	0x1235F, 0x12360, 0x12361, 0x12362, 0x12363, 0x12364, 0x12365, 0x12366, 
  1766 	0x12367, 0x12368, 0x12369, 0x1236A, 0x1236B, 0x1236C, 0x1236D, 0x1236E, 
  1767 	0x12400, 0x12401, 0x12402, 0x12403, 0x12404, 0x12405, 0x12406, 0x12407, 
  1768 	0x12408, 0x12409, 0x1240A, 0x1240B, 0x1240C, 0x1240D, 0x1240E, 0x1240F, 
  1769 	0x12410, 0x12411, 0x12412, 0x12413, 0x12414, 0x12415, 0x12416, 0x12417, 
  1770 	0x12418, 0x12419, 0x1241A, 0x1241B, 0x1241C, 0x1241D, 0x1241E, 0x1241F, 
  1771 	0x12420, 0x12421, 0x12422, 0x12423, 0x12424, 0x12425, 0x12426, 0x12427, 
  1772 	0x12428, 0x12429, 0x1242A, 0x1242B, 0x1242C, 0x1242D, 0x1242E, 0x1242F, 
  1773 	0x12430, 0x12431, 0x12432, 0x12433, 0x12434, 0x12435, 0x12436, 0x12437, 
  1774 	0x12438, 0x12439, 0x1243A, 0x1243B, 0x1243C, 0x1243D, 0x1243E, 0x1243F, 
  1775 	0x12440, 0x12441, 0x12442, 0x12443, 0x12444, 0x12445, 0x12446, 0x12447, 
  1776 	0x12448, 0x12449, 0x1244A, 0x1244B, 0x1244C, 0x1244D, 0x1244E, 0x1244F, 
  1777 	0x12450, 0x12451, 0x12452, 0x12453, 0x12454, 0x12455, 0x12456, 0x12457, 
  1778 	0x12458, 0x12459, 0x1245A, 0x1245B, 0x1245C, 0x1245D, 0x1245E, 0x1245F, 
  1779 	0x12460, 0x12461, 0x12462, 0x12470, 0x12471, 0x12472, 0x12473, 0x1D000, 
  1780 	0x1D001, 0x1D002, 0x1D003, 0x1D004, 0x1D005, 0x1D006, 0x1D007, 0x1D008, 
  1781 	0x1D009, 0x1D00A, 0x1D00B, 0x1D00C, 0x1D00D, 0x1D00E, 0x1D00F, 0x1D010, 
  1782 	0x1D011, 0x1D012, 0x1D013, 0x1D014, 0x1D015, 0x1D016, 0x1D017, 0x1D018, 
  1783 	0x1D019, 0x1D01A, 0x1D01B, 0x1D01C, 0x1D01D, 0x1D01E, 0x1D01F, 0x1D020, 
  1784 	0x1D021, 0x1D022, 0x1D023, 0x1D024, 0x1D025, 0x1D026, 0x1D027, 0x1D028, 
  1785 	0x1D029, 0x1D02A, 0x1D02B, 0x1D02C, 0x1D02D, 0x1D02E, 0x1D02F, 0x1D030, 
  1786 	0x1D031, 0x1D032, 0x1D033, 0x1D034, 0x1D035, 0x1D036, 0x1D037, 0x1D038, 
  1787 	0x1D039, 0x1D03A, 0x1D03B, 0x1D03C, 0x1D03D, 0x1D03E, 0x1D03F, 0x1D040, 
  1788 	0x1D041, 0x1D042, 0x1D043, 0x1D044, 0x1D045, 0x1D046, 0x1D047, 0x1D048, 
  1789 	0x1D049, 0x1D04A, 0x1D04B, 0x1D04C, 0x1D04D, 0x1D04E, 0x1D04F, 0x1D050, 
  1790 	0x1D051, 0x1D052, 0x1D053, 0x1D054, 0x1D055, 0x1D056, 0x1D057, 0x1D058, 
  1791 	0x1D059, 0x1D05A, 0x1D05B, 0x1D05C, 0x1D05D, 0x1D05E, 0x1D05F, 0x1D060, 
  1792 	0x1D061, 0x1D062, 0x1D063, 0x1D064, 0x1D065, 0x1D066, 0x1D067, 0x1D068, 
  1793 	0x1D069, 0x1D06A, 0x1D06B, 0x1D06C, 0x1D06D, 0x1D06E, 0x1D06F, 0x1D070, 
  1794 	0x1D071, 0x1D072, 0x1D073, 0x1D074, 0x1D075, 0x1D076, 0x1D077, 0x1D078, 
  1795 	0x1D079, 0x1D07A, 0x1D07B, 0x1D07C, 0x1D07D, 0x1D07E, 0x1D07F, 0x1D080, 
  1796 	0x1D081, 0x1D082, 0x1D083, 0x1D084, 0x1D085, 0x1D086, 0x1D087, 0x1D088, 
  1797 	0x1D089, 0x1D08A, 0x1D08B, 0x1D08C, 0x1D08D, 0x1D08E, 0x1D08F, 0x1D090, 
  1798 	0x1D091, 0x1D092, 0x1D093, 0x1D094, 0x1D095, 0x1D096, 0x1D097, 0x1D098, 
  1799 	0x1D099, 0x1D09A, 0x1D09B, 0x1D09C, 0x1D09D, 0x1D09E, 0x1D09F, 0x1D0A0, 
  1800 	0x1D0A1, 0x1D0A2, 0x1D0A3, 0x1D0A4, 0x1D0A5, 0x1D0A6, 0x1D0A7, 0x1D0A8, 
  1801 	0x1D0A9, 0x1D0AA, 0x1D0AB, 0x1D0AC, 0x1D0AD, 0x1D0AE, 0x1D0AF, 0x1D0B0, 
  1802 	0x1D0B1, 0x1D0B2, 0x1D0B3, 0x1D0B4, 0x1D0B5, 0x1D0B6, 0x1D0B7, 0x1D0B8, 
  1803 	0x1D0B9, 0x1D0BA, 0x1D0BB, 0x1D0BC, 0x1D0BD, 0x1D0BE, 0x1D0BF, 0x1D0C0, 
  1804 	0x1D0C1, 0x1D0C2, 0x1D0C3, 0x1D0C4, 0x1D0C5, 0x1D0C6, 0x1D0C7, 0x1D0C8, 
  1805 	0x1D0C9, 0x1D0CA, 0x1D0CB, 0x1D0CC, 0x1D0CD, 0x1D0CE, 0x1D0CF, 0x1D0D0, 
  1806 	0x1D0D1, 0x1D0D2, 0x1D0D3, 0x1D0D4, 0x1D0D5, 0x1D0D6, 0x1D0D7, 0x1D0D8, 
  1807 	0x1D0D9, 0x1D0DA, 0x1D0DB, 0x1D0DC, 0x1D0DD, 0x1D0DE, 0x1D0DF, 0x1D0E0, 
  1808 	0x1D0E1, 0x1D0E2, 0x1D0E3, 0x1D0E4, 0x1D0E5, 0x1D0E6, 0x1D0E7, 0x1D0E8, 
  1809 	0x1D0E9, 0x1D0EA, 0x1D0EB, 0x1D0EC, 0x1D0ED, 0x1D0EE, 0x1D0EF, 0x1D0F0, 
  1810 	0x1D0F1, 0x1D0F2, 0x1D0F3, 0x1D0F4, 0x1D0F5, 0x1D100, 0x1D101, 0x1D102, 
  1811 	0x1D103, 0x1D104, 0x1D105, 0x1D106, 0x1D107, 0x1D108, 0x1D109, 0x1D10A, 
  1812 	0x1D10B, 0x1D10C, 0x1D10D, 0x1D10E, 0x1D10F, 0x1D110, 0x1D111, 0x1D112, 
  1813 	0x1D113, 0x1D114, 0x1D115, 0x1D116, 0x1D117, 0x1D118, 0x1D119, 0x1D11A, 
  1814 	0x1D11B, 0x1D11C, 0x1D11D, 0x1D11E, 0x1D11F, 0x1D120, 0x1D121, 0x1D122, 
  1815 	0x1D123, 0x1D124, 0x1D125, 0x1D126, 0x1D12A, 0x1D12B, 0x1D12C, 0x1D12D, 
  1816 	0x1D12E, 0x1D12F, 0x1D130, 0x1D131, 0x1D132, 0x1D133, 0x1D134, 0x1D135, 
  1817 	0x1D136, 0x1D137, 0x1D138, 0x1D139, 0x1D13A, 0x1D13B, 0x1D13C, 0x1D13D, 
  1818 	0x1D13E, 0x1D13F, 0x1D140, 0x1D141, 0x1D142, 0x1D143, 0x1D144, 0x1D145, 
  1819 	0x1D146, 0x1D147, 0x1D148, 0x1D149, 0x1D14A, 0x1D14B, 0x1D14C, 0x1D14D, 
  1820 	0x1D14E, 0x1D14F, 0x1D150, 0x1D151, 0x1D152, 0x1D153, 0x1D154, 0x1D155, 
  1821 	0x1D156, 0x1D157, 0x1D158, 0x1D159, 0x1D15A, 0x1D15B, 0x1D15C, 0x1D15D, 
  1822 	0x1D15E, 0x1D15F, 0x1D160, 0x1D161, 0x1D162, 0x1D163, 0x1D164, 0x1D165, 
  1823 	0x1D166, 0x1D167, 0x1D168, 0x1D169, 0x1D16A, 0x1D16B, 0x1D16C, 0x1D16D, 
  1824 	0x1D16E, 0x1D16F, 0x1D170, 0x1D171, 0x1D172, 0x1D173, 0x1D174, 0x1D175, 
  1825 	0x1D176, 0x1D177, 0x1D178, 0x1D179, 0x1D17A, 0x1D17B, 0x1D17C, 0x1D17D, 
  1826 	0x1D17E, 0x1D17F, 0x1D180, 0x1D181, 0x1D182, 0x1D183, 0x1D184, 0x1D185, 
  1827 	0x1D186, 0x1D187, 0x1D188, 0x1D189, 0x1D18A, 0x1D18B, 0x1D18C, 0x1D18D, 
  1828 	0x1D18E, 0x1D18F, 0x1D190, 0x1D191, 0x1D192, 0x1D193, 0x1D194, 0x1D195, 
  1829 	0x1D196, 0x1D197, 0x1D198, 0x1D199, 0x1D19A, 0x1D19B, 0x1D19C, 0x1D19D, 
  1830 	0x1D19E, 0x1D19F, 0x1D1A0, 0x1D1A1, 0x1D1A2, 0x1D1A3, 0x1D1A4, 0x1D1A5, 
  1831 	0x1D1A6, 0x1D1A7, 0x1D1A8, 0x1D1A9, 0x1D1AA, 0x1D1AB, 0x1D1AC, 0x1D1AD, 
  1832 	0x1D1AE, 0x1D1AF, 0x1D1B0, 0x1D1B1, 0x1D1B2, 0x1D1B3, 0x1D1B4, 0x1D1B5, 
  1833 	0x1D1B6, 0x1D1B7, 0x1D1B8, 0x1D1B9, 0x1D1BA, 0x1D1BB, 0x1D1BC, 0x1D1BD, 
  1834 	0x1D1BE, 0x1D1BF, 0x1D1C0, 0x1D1C1, 0x1D1C2, 0x1D1C3, 0x1D1C4, 0x1D1C5, 
  1835 	0x1D1C6, 0x1D1C7, 0x1D1C8, 0x1D1C9, 0x1D1CA, 0x1D1CB, 0x1D1CC, 0x1D1CD, 
  1836 	0x1D1CE, 0x1D1CF, 0x1D1D0, 0x1D1D1, 0x1D1D2, 0x1D1D3, 0x1D1D4, 0x1D1D5, 
  1837 	0x1D1D6, 0x1D1D7, 0x1D1D8, 0x1D1D9, 0x1D1DA, 0x1D1DB, 0x1D1DC, 0x1D1DD, 
  1838 	0x1D200, 0x1D201, 0x1D202, 0x1D203, 0x1D204, 0x1D205, 0x1D206, 0x1D207, 
  1839 	0x1D208, 0x1D209, 0x1D20A, 0x1D20B, 0x1D20C, 0x1D20D, 0x1D20E, 0x1D20F, 
  1840 	0x1D210, 0x1D211, 0x1D212, 0x1D213, 0x1D214, 0x1D215, 0x1D216, 0x1D217, 
  1841 	0x1D218, 0x1D219, 0x1D21A, 0x1D21B, 0x1D21C, 0x1D21D, 0x1D21E, 0x1D21F, 
  1842 	0x1D220, 0x1D221, 0x1D222, 0x1D223, 0x1D224, 0x1D225, 0x1D226, 0x1D227, 
  1843 	0x1D228, 0x1D229, 0x1D22A, 0x1D22B, 0x1D22C, 0x1D22D, 0x1D22E, 0x1D22F, 
  1844 	0x1D230, 0x1D231, 0x1D232, 0x1D233, 0x1D234, 0x1D235, 0x1D236, 0x1D237, 
  1845 	0x1D238, 0x1D239, 0x1D23A, 0x1D23B, 0x1D23C, 0x1D23D, 0x1D23E, 0x1D23F, 
  1846 	0x1D240, 0x1D241, 0x1D242, 0x1D243, 0x1D244, 0x1D245, 0x1D300, 0x1D301, 
  1847 	0x1D302, 0x1D303, 0x1D304, 0x1D305, 0x1D306, 0x1D307, 0x1D308, 0x1D309, 
  1848 	0x1D30A, 0x1D30B, 0x1D30C, 0x1D30D, 0x1D30E, 0x1D30F, 0x1D310, 0x1D311, 
  1849 	0x1D312, 0x1D313, 0x1D314, 0x1D315, 0x1D316, 0x1D317, 0x1D318, 0x1D319, 
  1850 	0x1D31A, 0x1D31B, 0x1D31C, 0x1D31D, 0x1D31E, 0x1D31F, 0x1D320, 0x1D321, 
  1851 	0x1D322, 0x1D323, 0x1D324, 0x1D325, 0x1D326, 0x1D327, 0x1D328, 0x1D329, 
  1852 	0x1D32A, 0x1D32B, 0x1D32C, 0x1D32D, 0x1D32E, 0x1D32F, 0x1D330, 0x1D331, 
  1853 	0x1D332, 0x1D333, 0x1D334, 0x1D335, 0x1D336, 0x1D337, 0x1D338, 0x1D339, 
  1854 	0x1D33A, 0x1D33B, 0x1D33C, 0x1D33D, 0x1D33E, 0x1D33F, 0x1D340, 0x1D341, 
  1855 	0x1D342, 0x1D343, 0x1D344, 0x1D345, 0x1D346, 0x1D347, 0x1D348, 0x1D349, 
  1856 	0x1D34A, 0x1D34B, 0x1D34C, 0x1D34D, 0x1D34E, 0x1D34F, 0x1D350, 0x1D351, 
  1857 	0x1D352, 0x1D353, 0x1D354, 0x1D355, 0x1D356, 0x1D360, 0x1D361, 0x1D362, 
  1858 	0x1D363, 0x1D364, 0x1D365, 0x1D366, 0x1D367, 0x1D368, 0x1D369, 0x1D36A, 
  1859 	0x1D36B, 0x1D36C, 0x1D36D, 0x1D36E, 0x1D36F, 0x1D370, 0x1D371, 0x1D400, 
  1860 	0x1D401, 0x1D402, 0x1D403, 0x1D404, 0x1D405, 0x1D406, 0x1D407, 0x1D408, 
  1861 	0x1D409, 0x1D40A, 0x1D40B, 0x1D40C, 0x1D40D, 0x1D40E, 0x1D40F, 0x1D410, 
  1862 	0x1D411, 0x1D412, 0x1D413, 0x1D414, 0x1D415, 0x1D416, 0x1D417, 0x1D418, 
  1863 	0x1D419, 0x1D41A, 0x1D41B, 0x1D41C, 0x1D41D, 0x1D41E, 0x1D41F, 0x1D420, 
  1864 	0x1D421, 0x1D422, 0x1D423, 0x1D424, 0x1D425, 0x1D426, 0x1D427, 0x1D428, 
  1865 	0x1D429, 0x1D42A, 0x1D42B, 0x1D42C, 0x1D42D, 0x1D42E, 0x1D42F, 0x1D430, 
  1866 	0x1D431, 0x1D432, 0x1D433, 0x1D434, 0x1D435, 0x1D436, 0x1D437, 0x1D438, 
  1867 	0x1D439, 0x1D43A, 0x1D43B, 0x1D43C, 0x1D43D, 0x1D43E, 0x1D43F, 0x1D440, 
  1868 	0x1D441, 0x1D442, 0x1D443, 0x1D444, 0x1D445, 0x1D446, 0x1D447, 0x1D448, 
  1869 	0x1D449, 0x1D44A, 0x1D44B, 0x1D44C, 0x1D44D, 0x1D44E, 0x1D44F, 0x1D450, 
  1870 	0x1D451, 0x1D452, 0x1D453, 0x1D454, 0x1D456, 0x1D457, 0x1D458, 0x1D459, 
  1871 	0x1D45A, 0x1D45B, 0x1D45C, 0x1D45D, 0x1D45E, 0x1D45F, 0x1D460, 0x1D461, 
  1872 	0x1D462, 0x1D463, 0x1D464, 0x1D465, 0x1D466, 0x1D467, 0x1D468, 0x1D469, 
  1873 	0x1D46A, 0x1D46B, 0x1D46C, 0x1D46D, 0x1D46E, 0x1D46F, 0x1D470, 0x1D471, 
  1874 	0x1D472, 0x1D473, 0x1D474, 0x1D475, 0x1D476, 0x1D477, 0x1D478, 0x1D479, 
  1875 	0x1D47A, 0x1D47B, 0x1D47C, 0x1D47D, 0x1D47E, 0x1D47F, 0x1D480, 0x1D481, 
  1876 	0x1D482, 0x1D483, 0x1D484, 0x1D485, 0x1D486, 0x1D487, 0x1D488, 0x1D489, 
  1877 	0x1D48A, 0x1D48B, 0x1D48C, 0x1D48D, 0x1D48E, 0x1D48F, 0x1D490, 0x1D491, 
  1878 	0x1D492, 0x1D493, 0x1D494, 0x1D495, 0x1D496, 0x1D497, 0x1D498, 0x1D499, 
  1879 	0x1D49A, 0x1D49B, 0x1D49C, 0x1D49E, 0x1D49F, 0x1D4A2, 0x1D4A5, 0x1D4A6, 
  1880 	0x1D4A9, 0x1D4AA, 0x1D4AB, 0x1D4AC, 0x1D4AE, 0x1D4AF, 0x1D4B0, 0x1D4B1, 
  1881 	0x1D4B2, 0x1D4B3, 0x1D4B4, 0x1D4B5, 0x1D4B6, 0x1D4B7, 0x1D4B8, 0x1D4B9, 
  1882 	0x1D4BB, 0x1D4BD, 0x1D4BE, 0x1D4BF, 0x1D4C0, 0x1D4C1, 0x1D4C2, 0x1D4C3, 
  1883 	0x1D4C5, 0x1D4C6, 0x1D4C7, 0x1D4C8, 0x1D4C9, 0x1D4CA, 0x1D4CB, 0x1D4CC, 
  1884 	0x1D4CD, 0x1D4CE, 0x1D4CF, 0x1D4D0, 0x1D4D1, 0x1D4D2, 0x1D4D3, 0x1D4D4, 
  1885 	0x1D4D5, 0x1D4D6, 0x1D4D7, 0x1D4D8, 0x1D4D9, 0x1D4DA, 0x1D4DB, 0x1D4DC, 
  1886 	0x1D4DD, 0x1D4DE, 0x1D4DF, 0x1D4E0, 0x1D4E1, 0x1D4E2, 0x1D4E3, 0x1D4E4, 
  1887 	0x1D4E5, 0x1D4E6, 0x1D4E7, 0x1D4E8, 0x1D4E9, 0x1D4EA, 0x1D4EB, 0x1D4EC, 
  1888 	0x1D4ED, 0x1D4EE, 0x1D4EF, 0x1D4F0, 0x1D4F1, 0x1D4F2, 0x1D4F3, 0x1D4F4, 
  1889 	0x1D4F5, 0x1D4F6, 0x1D4F7, 0x1D4F8, 0x1D4F9, 0x1D4FA, 0x1D4FB, 0x1D4FC, 
  1890 	0x1D4FD, 0x1D4FE, 0x1D4FF, 0x1D500, 0x1D501, 0x1D502, 0x1D503, 0x1D504, 
  1891 	0x1D505, 0x1D507, 0x1D508, 0x1D509, 0x1D50A, 0x1D50D, 0x1D50E, 0x1D50F, 
  1892 	0x1D510, 0x1D511, 0x1D512, 0x1D513, 0x1D514, 0x1D516, 0x1D517, 0x1D518, 
  1893 	0x1D519, 0x1D51A, 0x1D51B, 0x1D51C, 0x1D51E, 0x1D51F, 0x1D520, 0x1D521, 
  1894 	0x1D522, 0x1D523, 0x1D524, 0x1D525, 0x1D526, 0x1D527, 0x1D528, 0x1D529, 
  1895 	0x1D52A, 0x1D52B, 0x1D52C, 0x1D52D, 0x1D52E, 0x1D52F, 0x1D530, 0x1D531, 
  1896 	0x1D532, 0x1D533, 0x1D534, 0x1D535, 0x1D536, 0x1D537, 0x1D538, 0x1D539, 
  1897 	0x1D53B, 0x1D53C, 0x1D53D, 0x1D53E, 0x1D540, 0x1D541, 0x1D542, 0x1D543, 
  1898 	0x1D544, 0x1D546, 0x1D54A, 0x1D54B, 0x1D54C, 0x1D54D, 0x1D54E, 0x1D54F, 
  1899 	0x1D550, 0x1D552, 0x1D553, 0x1D554, 0x1D555, 0x1D556, 0x1D557, 0x1D558, 
  1900 	0x1D559, 0x1D55A, 0x1D55B, 0x1D55C, 0x1D55D, 0x1D55E, 0x1D55F, 0x1D560, 
  1901 	0x1D561, 0x1D562, 0x1D563, 0x1D564, 0x1D565, 0x1D566, 0x1D567, 0x1D568, 
  1902 	0x1D569, 0x1D56A, 0x1D56B, 0x1D56C, 0x1D56D, 0x1D56E, 0x1D56F, 0x1D570, 
  1903 	0x1D571, 0x1D572, 0x1D573, 0x1D574, 0x1D575, 0x1D576, 0x1D577, 0x1D578, 
  1904 	0x1D579, 0x1D57A, 0x1D57B, 0x1D57C, 0x1D57D, 0x1D57E, 0x1D57F, 0x1D580, 
  1905 	0x1D581, 0x1D582, 0x1D583, 0x1D584, 0x1D585, 0x1D586, 0x1D587, 0x1D588, 
  1906 	0x1D589, 0x1D58A, 0x1D58B, 0x1D58C, 0x1D58D, 0x1D58E, 0x1D58F, 0x1D590, 
  1907 	0x1D591, 0x1D592, 0x1D593, 0x1D594, 0x1D595, 0x1D596, 0x1D597, 0x1D598, 
  1908 	0x1D599, 0x1D59A, 0x1D59B, 0x1D59C, 0x1D59D, 0x1D59E, 0x1D59F, 0x1D5A0, 
  1909 	0x1D5A1, 0x1D5A2, 0x1D5A3, 0x1D5A4, 0x1D5A5, 0x1D5A6, 0x1D5A7, 0x1D5A8, 
  1910 	0x1D5A9, 0x1D5AA, 0x1D5AB, 0x1D5AC, 0x1D5AD, 0x1D5AE, 0x1D5AF, 0x1D5B0, 
  1911 	0x1D5B1, 0x1D5B2, 0x1D5B3, 0x1D5B4, 0x1D5B5, 0x1D5B6, 0x1D5B7, 0x1D5B8, 
  1912 	0x1D5B9, 0x1D5BA, 0x1D5BB, 0x1D5BC, 0x1D5BD, 0x1D5BE, 0x1D5BF, 0x1D5C0, 
  1913 	0x1D5C1, 0x1D5C2, 0x1D5C3, 0x1D5C4, 0x1D5C5, 0x1D5C6, 0x1D5C7, 0x1D5C8, 
  1914 	0x1D5C9, 0x1D5CA, 0x1D5CB, 0x1D5CC, 0x1D5CD, 0x1D5CE, 0x1D5CF, 0x1D5D0, 
  1915 	0x1D5D1, 0x1D5D2, 0x1D5D3, 0x1D5D4, 0x1D5D5, 0x1D5D6, 0x1D5D7, 0x1D5D8, 
  1916 	0x1D5D9, 0x1D5DA, 0x1D5DB, 0x1D5DC, 0x1D5DD, 0x1D5DE, 0x1D5DF, 0x1D5E0, 
  1917 	0x1D5E1, 0x1D5E2, 0x1D5E3, 0x1D5E4, 0x1D5E5, 0x1D5E6, 0x1D5E7, 0x1D5E8, 
  1918 	0x1D5E9, 0x1D5EA, 0x1D5EB, 0x1D5EC, 0x1D5ED, 0x1D5EE, 0x1D5EF, 0x1D5F0, 
  1919 	0x1D5F1, 0x1D5F2, 0x1D5F3, 0x1D5F4, 0x1D5F5, 0x1D5F6, 0x1D5F7, 0x1D5F8, 
  1920 	0x1D5F9, 0x1D5FA, 0x1D5FB, 0x1D5FC, 0x1D5FD, 0x1D5FE, 0x1D5FF, 0x1D600, 
  1921 	0x1D601, 0x1D602, 0x1D603, 0x1D604, 0x1D605, 0x1D606, 0x1D607, 0x1D608, 
  1922 	0x1D609, 0x1D60A, 0x1D60B, 0x1D60C, 0x1D60D, 0x1D60E, 0x1D60F, 0x1D610, 
  1923 	0x1D611, 0x1D612, 0x1D613, 0x1D614, 0x1D615, 0x1D616, 0x1D617, 0x1D618, 
  1924 	0x1D619, 0x1D61A, 0x1D61B, 0x1D61C, 0x1D61D, 0x1D61E, 0x1D61F, 0x1D620, 
  1925 	0x1D621, 0x1D622, 0x1D623, 0x1D624, 0x1D625, 0x1D626, 0x1D627, 0x1D628, 
  1926 	0x1D629, 0x1D62A, 0x1D62B, 0x1D62C, 0x1D62D, 0x1D62E, 0x1D62F, 0x1D630, 
  1927 	0x1D631, 0x1D632, 0x1D633, 0x1D634, 0x1D635, 0x1D636, 0x1D637, 0x1D638, 
  1928 	0x1D639, 0x1D63A, 0x1D63B, 0x1D63C, 0x1D63D, 0x1D63E, 0x1D63F, 0x1D640, 
  1929 	0x1D641, 0x1D642, 0x1D643, 0x1D644, 0x1D645, 0x1D646, 0x1D647, 0x1D648, 
  1930 	0x1D649, 0x1D64A, 0x1D64B, 0x1D64C, 0x1D64D, 0x1D64E, 0x1D64F, 0x1D650, 
  1931 	0x1D651, 0x1D652, 0x1D653, 0x1D654, 0x1D655, 0x1D656, 0x1D657, 0x1D658, 
  1932 	0x1D659, 0x1D65A, 0x1D65B, 0x1D65C, 0x1D65D, 0x1D65E, 0x1D65F, 0x1D660, 
  1933 	0x1D661, 0x1D662, 0x1D663, 0x1D664, 0x1D665, 0x1D666, 0x1D667, 0x1D668, 
  1934 	0x1D669, 0x1D66A, 0x1D66B, 0x1D66C, 0x1D66D, 0x1D66E, 0x1D66F, 0x1D670, 
  1935 	0x1D671, 0x1D672, 0x1D673, 0x1D674, 0x1D675, 0x1D676, 0x1D677, 0x1D678, 
  1936 	0x1D679, 0x1D67A, 0x1D67B, 0x1D67C, 0x1D67D, 0x1D67E, 0x1D67F, 0x1D680, 
  1937 	0x1D681, 0x1D682, 0x1D683, 0x1D684, 0x1D685, 0x1D686, 0x1D687, 0x1D688, 
  1938 	0x1D689, 0x1D68A, 0x1D68B, 0x1D68C, 0x1D68D, 0x1D68E, 0x1D68F, 0x1D690, 
  1939 	0x1D691, 0x1D692, 0x1D693, 0x1D694, 0x1D695, 0x1D696, 0x1D697, 0x1D698, 
  1940 	0x1D699, 0x1D69A, 0x1D69B, 0x1D69C, 0x1D69D, 0x1D69E, 0x1D69F, 0x1D6A0, 
  1941 	0x1D6A1, 0x1D6A2, 0x1D6A3, 0x1D6A4, 0x1D6A5, 0x1D6A8, 0x1D6A9, 0x1D6AA, 
  1942 	0x1D6AB, 0x1D6AC, 0x1D6AD, 0x1D6AE, 0x1D6AF, 0x1D6B0, 0x1D6B1, 0x1D6B2, 
  1943 	0x1D6B3, 0x1D6B4, 0x1D6B5, 0x1D6B6, 0x1D6B7, 0x1D6B8, 0x1D6B9, 0x1D6BA, 
  1944 	0x1D6BB, 0x1D6BC, 0x1D6BD, 0x1D6BE, 0x1D6BF, 0x1D6C0, 0x1D6C1, 0x1D6C2, 
  1945 	0x1D6C3, 0x1D6C4, 0x1D6C5, 0x1D6C6, 0x1D6C7, 0x1D6C8, 0x1D6C9, 0x1D6CA, 
  1946 	0x1D6CB, 0x1D6CC, 0x1D6CD, 0x1D6CE, 0x1D6CF, 0x1D6D0, 0x1D6D1, 0x1D6D2, 
  1947 	0x1D6D3, 0x1D6D4, 0x1D6D5, 0x1D6D6, 0x1D6D7, 0x1D6D8, 0x1D6D9, 0x1D6DA, 
  1948 	0x1D6DB, 0x1D6DC, 0x1D6DD, 0x1D6DE, 0x1D6DF, 0x1D6E0, 0x1D6E1, 0x1D6E2, 
  1949 	0x1D6E3, 0x1D6E4, 0x1D6E5, 0x1D6E6, 0x1D6E7, 0x1D6E8, 0x1D6E9, 0x1D6EA, 
  1950 	0x1D6EB, 0x1D6EC, 0x1D6ED, 0x1D6EE, 0x1D6EF, 0x1D6F0, 0x1D6F1, 0x1D6F2, 
  1951 	0x1D6F3, 0x1D6F4, 0x1D6F5, 0x1D6F6, 0x1D6F7, 0x1D6F8, 0x1D6F9, 0x1D6FA, 
  1952 	0x1D6FB, 0x1D6FC, 0x1D6FD, 0x1D6FE, 0x1D6FF, 0x1D700, 0x1D701, 0x1D702, 
  1953 	0x1D703, 0x1D704, 0x1D705, 0x1D706, 0x1D707, 0x1D708, 0x1D709, 0x1D70A, 
  1954 	0x1D70B, 0x1D70C, 0x1D70D, 0x1D70E, 0x1D70F, 0x1D710, 0x1D711, 0x1D712, 
  1955 	0x1D713, 0x1D714, 0x1D715, 0x1D716, 0x1D717, 0x1D718, 0x1D719, 0x1D71A, 
  1956 	0x1D71B, 0x1D71C, 0x1D71D, 0x1D71E, 0x1D71F, 0x1D720, 0x1D721, 0x1D722, 
  1957 	0x1D723, 0x1D724, 0x1D725, 0x1D726, 0x1D727, 0x1D728, 0x1D729, 0x1D72A, 
  1958 	0x1D72B, 0x1D72C, 0x1D72D, 0x1D72E, 0x1D72F, 0x1D730, 0x1D731, 0x1D732, 
  1959 	0x1D733, 0x1D734, 0x1D735, 0x1D736, 0x1D737, 0x1D738, 0x1D739, 0x1D73A, 
  1960 	0x1D73B, 0x1D73C, 0x1D73D, 0x1D73E, 0x1D73F, 0x1D740, 0x1D741, 0x1D742, 
  1961 	0x1D743, 0x1D744, 0x1D745, 0x1D746, 0x1D747, 0x1D748, 0x1D749, 0x1D74A, 
  1962 	0x1D74B, 0x1D74C, 0x1D74D, 0x1D74E, 0x1D74F, 0x1D750, 0x1D751, 0x1D752, 
  1963 	0x1D753, 0x1D754, 0x1D755, 0x1D756, 0x1D757, 0x1D758, 0x1D759, 0x1D75A, 
  1964 	0x1D75B, 0x1D75C, 0x1D75D, 0x1D75E, 0x1D75F, 0x1D760, 0x1D761, 0x1D762, 
  1965 	0x1D763, 0x1D764, 0x1D765, 0x1D766, 0x1D767, 0x1D768, 0x1D769, 0x1D76A, 
  1966 	0x1D76B, 0x1D76C, 0x1D76D, 0x1D76E, 0x1D76F, 0x1D770, 0x1D771, 0x1D772, 
  1967 	0x1D773, 0x1D774, 0x1D775, 0x1D776, 0x1D777, 0x1D778, 0x1D779, 0x1D77A, 
  1968 	0x1D77B, 0x1D77C, 0x1D77D, 0x1D77E, 0x1D77F, 0x1D780, 0x1D781, 0x1D782, 
  1969 	0x1D783, 0x1D784, 0x1D785, 0x1D786, 0x1D787, 0x1D788, 0x1D789, 0x1D78A, 
  1970 	0x1D78B, 0x1D78C, 0x1D78D, 0x1D78E, 0x1D78F, 0x1D790, 0x1D791, 0x1D792, 
  1971 	0x1D793, 0x1D794, 0x1D795, 0x1D796, 0x1D797, 0x1D798, 0x1D799, 0x1D79A, 
  1972 	0x1D79B, 0x1D79C, 0x1D79D, 0x1D79E, 0x1D79F, 0x1D7A0, 0x1D7A1, 0x1D7A2, 
  1973 	0x1D7A3, 0x1D7A4, 0x1D7A5, 0x1D7A6, 0x1D7A7, 0x1D7A8, 0x1D7A9, 0x1D7AA, 
  1974 	0x1D7AB, 0x1D7AC, 0x1D7AD, 0x1D7AE, 0x1D7AF, 0x1D7B0, 0x1D7B1, 0x1D7B2, 
  1975 	0x1D7B3, 0x1D7B4, 0x1D7B5, 0x1D7B6, 0x1D7B7, 0x1D7B8, 0x1D7B9, 0x1D7BA, 
  1976 	0x1D7BB, 0x1D7BC, 0x1D7BD, 0x1D7BE, 0x1D7BF, 0x1D7C0, 0x1D7C1, 0x1D7C2, 
  1977 	0x1D7C3, 0x1D7C4, 0x1D7C5, 0x1D7C6, 0x1D7C7, 0x1D7C8, 0x1D7C9, 0x1D7CA, 
  1978 	0x1D7CB, 0x1D7CE, 0x1D7CF, 0x1D7D0, 0x1D7D1, 0x1D7D2, 0x1D7D3, 0x1D7D4, 
  1979 	0x1D7D5, 0x1D7D6, 0x1D7D7, 0x1D7D8, 0x1D7D9, 0x1D7DA, 0x1D7DB, 0x1D7DC, 
  1980 	0x1D7DD, 0x1D7DE, 0x1D7DF, 0x1D7E0, 0x1D7E1, 0x1D7E2, 0x1D7E3, 0x1D7E4, 
  1981 	0x1D7E5, 0x1D7E6, 0x1D7E7, 0x1D7E8, 0x1D7E9, 0x1D7EA, 0x1D7EB, 0x1D7EC, 
  1982 	0x1D7ED, 0x1D7EE, 0x1D7EF, 0x1D7F0, 0x1D7F1, 0x1D7F2, 0x1D7F3, 0x1D7F4, 
  1983 	0x1D7F5, 0x1D7F6, 0x1D7F7, 0x1D7F8, 0x1D7F9, 0x1D7FA, 0x1D7FB, 0x1D7FC, 
  1984 	0x1D7FD, 0x1D7FE, 0x1D7FF, 0x20000, 0x2A6D6, 0x2F800, 0x2F801, 0x2F802, 
  1985 	0x2F803, 0x2F804, 0x2F805, 0x2F806, 0x2F807, 0x2F808, 0x2F809, 0x2F80A, 
  1986 	0x2F80B, 0x2F80C, 0x2F80D, 0x2F80E, 0x2F80F, 0x2F810, 0x2F811, 0x2F812, 
  1987 	0x2F813, 0x2F814, 0x2F815, 0x2F816, 0x2F817, 0x2F818, 0x2F819, 0x2F81A, 
  1988 	0x2F81B, 0x2F81C, 0x2F81D, 0x2F81E, 0x2F81F, 0x2F820, 0x2F821, 0x2F822, 
  1989 	0x2F823, 0x2F824, 0x2F825, 0x2F826, 0x2F827, 0x2F828, 0x2F829, 0x2F82A, 
  1990 	0x2F82B, 0x2F82C, 0x2F82D, 0x2F82E, 0x2F82F, 0x2F830, 0x2F831, 0x2F832, 
  1991 	0x2F833, 0x2F834, 0x2F835, 0x2F836, 0x2F837, 0x2F838, 0x2F839, 0x2F83A, 
  1992 	0x2F83B, 0x2F83C, 0x2F83D, 0x2F83E, 0x2F83F, 0x2F840, 0x2F841, 0x2F842, 
  1993 	0x2F843, 0x2F844, 0x2F845, 0x2F846, 0x2F847, 0x2F848, 0x2F849, 0x2F84A, 
  1994 	0x2F84B, 0x2F84C, 0x2F84D, 0x2F84E, 0x2F84F, 0x2F850, 0x2F851, 0x2F852, 
  1995 	0x2F853, 0x2F854, 0x2F855, 0x2F856, 0x2F857, 0x2F858, 0x2F859, 0x2F85A, 
  1996 	0x2F85B, 0x2F85C, 0x2F85D, 0x2F85E, 0x2F85F, 0x2F860, 0x2F861, 0x2F862, 
  1997 	0x2F863, 0x2F864, 0x2F865, 0x2F866, 0x2F867, 0x2F868, 0x2F869, 0x2F86A, 
  1998 	0x2F86B, 0x2F86C, 0x2F86D, 0x2F86E, 0x2F86F, 0x2F870, 0x2F871, 0x2F872, 
  1999 	0x2F873, 0x2F874, 0x2F875, 0x2F876, 0x2F877, 0x2F878, 0x2F879, 0x2F87A, 
  2000 	0x2F87B, 0x2F87C, 0x2F87D, 0x2F87E, 0x2F87F, 0x2F880, 0x2F881, 0x2F882, 
  2001 	0x2F883, 0x2F884, 0x2F885, 0x2F886, 0x2F887, 0x2F888, 0x2F889, 0x2F88A, 
  2002 	0x2F88B, 0x2F88C, 0x2F88D, 0x2F88E, 0x2F88F, 0x2F890, 0x2F891, 0x2F892, 
  2003 	0x2F893, 0x2F894, 0x2F895, 0x2F896, 0x2F897, 0x2F898, 0x2F899, 0x2F89A, 
  2004 	0x2F89B, 0x2F89C, 0x2F89D, 0x2F89E, 0x2F89F, 0x2F8A0, 0x2F8A1, 0x2F8A2, 
  2005 	0x2F8A3, 0x2F8A4, 0x2F8A5, 0x2F8A6, 0x2F8A7, 0x2F8A8, 0x2F8A9, 0x2F8AA, 
  2006 	0x2F8AB, 0x2F8AC, 0x2F8AD, 0x2F8AE, 0x2F8AF, 0x2F8B0, 0x2F8B1, 0x2F8B2, 
  2007 	0x2F8B3, 0x2F8B4, 0x2F8B5, 0x2F8B6, 0x2F8B7, 0x2F8B8, 0x2F8B9, 0x2F8BA, 
  2008 	0x2F8BB, 0x2F8BC, 0x2F8BD, 0x2F8BE, 0x2F8BF, 0x2F8C0, 0x2F8C1, 0x2F8C2, 
  2009 	0x2F8C3, 0x2F8C4, 0x2F8C5, 0x2F8C6, 0x2F8C7, 0x2F8C8, 0x2F8C9, 0x2F8CA, 
  2010 	0x2F8CB, 0x2F8CC, 0x2F8CD, 0x2F8CE, 0x2F8CF, 0x2F8D0, 0x2F8D1, 0x2F8D2, 
  2011 	0x2F8D3, 0x2F8D4, 0x2F8D5, 0x2F8D6, 0x2F8D7, 0x2F8D8, 0x2F8D9, 0x2F8DA, 
  2012 	0x2F8DB, 0x2F8DC, 0x2F8DD, 0x2F8DE, 0x2F8DF, 0x2F8E0, 0x2F8E1, 0x2F8E2, 
  2013 	0x2F8E3, 0x2F8E4, 0x2F8E5, 0x2F8E6, 0x2F8E7, 0x2F8E8, 0x2F8E9, 0x2F8EA, 
  2014 	0x2F8EB, 0x2F8EC, 0x2F8ED, 0x2F8EE, 0x2F8EF, 0x2F8F0, 0x2F8F1, 0x2F8F2, 
  2015 	0x2F8F3, 0x2F8F4, 0x2F8F5, 0x2F8F6, 0x2F8F7, 0x2F8F8, 0x2F8F9, 0x2F8FA, 
  2016 	0x2F8FB, 0x2F8FC, 0x2F8FD, 0x2F8FE, 0x2F8FF, 0x2F900, 0x2F901, 0x2F902, 
  2017 	0x2F903, 0x2F904, 0x2F905, 0x2F906, 0x2F907, 0x2F908, 0x2F909, 0x2F90A, 
  2018 	0x2F90B, 0x2F90C, 0x2F90D, 0x2F90E, 0x2F90F, 0x2F910, 0x2F911, 0x2F912, 
  2019 	0x2F913, 0x2F914, 0x2F915, 0x2F916, 0x2F917, 0x2F918, 0x2F919, 0x2F91A, 
  2020 	0x2F91B, 0x2F91C, 0x2F91D, 0x2F91E, 0x2F91F, 0x2F920, 0x2F921, 0x2F922, 
  2021 	0x2F923, 0x2F924, 0x2F925, 0x2F926, 0x2F927, 0x2F928, 0x2F929, 0x2F92A, 
  2022 	0x2F92B, 0x2F92C, 0x2F92D, 0x2F92E, 0x2F92F, 0x2F930, 0x2F931, 0x2F932, 
  2023 	0x2F933, 0x2F934, 0x2F935, 0x2F936, 0x2F937, 0x2F938, 0x2F939, 0x2F93A, 
  2024 	0x2F93B, 0x2F93C, 0x2F93D, 0x2F93E, 0x2F93F, 0x2F940, 0x2F941, 0x2F942, 
  2025 	0x2F943, 0x2F944, 0x2F945, 0x2F946, 0x2F947, 0x2F948, 0x2F949, 0x2F94A, 
  2026 	0x2F94B, 0x2F94C, 0x2F94D, 0x2F94E, 0x2F94F, 0x2F950, 0x2F951, 0x2F952, 
  2027 	0x2F953, 0x2F954, 0x2F955, 0x2F956, 0x2F957, 0x2F958, 0x2F959, 0x2F95A, 
  2028 	0x2F95B, 0x2F95C, 0x2F95D, 0x2F95E, 0x2F95F, 0x2F960, 0x2F961, 0x2F962, 
  2029 	0x2F963, 0x2F964, 0x2F965, 0x2F966, 0x2F967, 0x2F968, 0x2F969, 0x2F96A, 
  2030 	0x2F96B, 0x2F96C, 0x2F96D, 0x2F96E, 0x2F96F, 0x2F970, 0x2F971, 0x2F972, 
  2031 	0x2F973, 0x2F974, 0x2F975, 0x2F976, 0x2F977, 0x2F978, 0x2F979, 0x2F97A, 
  2032 	0x2F97B, 0x2F97C, 0x2F97D, 0x2F97E, 0x2F97F, 0x2F980, 0x2F981, 0x2F982, 
  2033 	0x2F983, 0x2F984, 0x2F985, 0x2F986, 0x2F987, 0x2F988, 0x2F989, 0x2F98A, 
  2034 	0x2F98B, 0x2F98C, 0x2F98D, 0x2F98E, 0x2F98F, 0x2F990, 0x2F991, 0x2F992, 
  2035 	0x2F993, 0x2F994, 0x2F995, 0x2F996, 0x2F997, 0x2F998, 0x2F999, 0x2F99A, 
  2036 	0x2F99B, 0x2F99C, 0x2F99D, 0x2F99E, 0x2F99F, 0x2F9A0, 0x2F9A1, 0x2F9A2, 
  2037 	0x2F9A3, 0x2F9A4, 0x2F9A5, 0x2F9A6, 0x2F9A7, 0x2F9A8, 0x2F9A9, 0x2F9AA, 
  2038 	0x2F9AB, 0x2F9AC, 0x2F9AD, 0x2F9AE, 0x2F9AF, 0x2F9B0, 0x2F9B1, 0x2F9B2, 
  2039 	0x2F9B3, 0x2F9B4, 0x2F9B5, 0x2F9B6, 0x2F9B7, 0x2F9B8, 0x2F9B9, 0x2F9BA, 
  2040 	0x2F9BB, 0x2F9BC, 0x2F9BD, 0x2F9BE, 0x2F9BF, 0x2F9C0, 0x2F9C1, 0x2F9C2, 
  2041 	0x2F9C3, 0x2F9C4, 0x2F9C5, 0x2F9C6, 0x2F9C7, 0x2F9C8, 0x2F9C9, 0x2F9CA, 
  2042 	0x2F9CB, 0x2F9CC, 0x2F9CD, 0x2F9CE, 0x2F9CF, 0x2F9D0, 0x2F9D1, 0x2F9D2, 
  2043 	0x2F9D3, 0x2F9D4, 0x2F9D5, 0x2F9D6, 0x2F9D7, 0x2F9D8, 0x2F9D9, 0x2F9DA, 
  2044 	0x2F9DB, 0x2F9DC, 0x2F9DD, 0x2F9DE, 0x2F9DF, 0x2F9E0, 0x2F9E1, 0x2F9E2, 
  2045 	0x2F9E3, 0x2F9E4, 0x2F9E5, 0x2F9E6, 0x2F9E7, 0x2F9E8, 0x2F9E9, 0x2F9EA, 
  2046 	0x2F9EB, 0x2F9EC, 0x2F9ED, 0x2F9EE, 0x2F9EF, 0x2F9F0, 0x2F9F1, 0x2F9F2, 
  2047 	0x2F9F3, 0x2F9F4, 0x2F9F5, 0x2F9F6, 0x2F9F7, 0x2F9F8, 0x2F9F9, 0x2F9FA, 
  2048 	0x2F9FB, 0x2F9FC, 0x2F9FD, 0x2F9FE, 0x2F9FF, 0x2FA00, 0x2FA01, 0x2FA02, 
  2049 	0x2FA03, 0x2FA04, 0x2FA05, 0x2FA06, 0x2FA07, 0x2FA08, 0x2FA09, 0x2FA0A, 
  2050 	0x2FA0B, 0x2FA0C, 0x2FA0D, 0x2FA0E, 0x2FA0F, 0x2FA10, 0x2FA11, 0x2FA12, 
  2051 	0x2FA13, 0x2FA14, 0x2FA15, 0x2FA16, 0x2FA17, 0x2FA18, 0x2FA19, 0x2FA1A, 
  2052 	0x2FA1B, 0x2FA1C, 0x2FA1D, 0xE0001, 0xE0020, 0xE0021, 0xE0022, 0xE0023, 
  2053 	0xE0024, 0xE0025, 0xE0026, 0xE0027, 0xE0028, 0xE0029, 0xE002A, 0xE002B, 
  2054 	0xE002C, 0xE002D, 0xE002E, 0xE002F, 0xE0030, 0xE0031, 0xE0032, 0xE0033, 
  2055 	0xE0034, 0xE0035, 0xE0036, 0xE0037, 0xE0038, 0xE0039, 0xE003A, 0xE003B, 
  2056 	0xE003C, 0xE003D, 0xE003E, 0xE003F, 0xE0040, 0xE0041, 0xE0042, 0xE0043, 
  2057 	0xE0044, 0xE0045, 0xE0046, 0xE0047, 0xE0048, 0xE0049, 0xE004A, 0xE004B, 
  2058 	0xE004C, 0xE004D, 0xE004E, 0xE004F, 0xE0050, 0xE0051, 0xE0052, 0xE0053, 
  2059 	0xE0054, 0xE0055, 0xE0056, 0xE0057, 0xE0058, 0xE0059, 0xE005A, 0xE005B, 
  2060 	0xE005C, 0xE005D, 0xE005E, 0xE005F, 0xE0060, 0xE0061, 0xE0062, 0xE0063, 
  2061 	0xE0064, 0xE0065, 0xE0066, 0xE0067, 0xE0068, 0xE0069, 0xE006A, 0xE006B, 
  2062 	0xE006C, 0xE006D, 0xE006E, 0xE006F, 0xE0070, 0xE0071, 0xE0072, 0xE0073, 
  2063 	0xE0074, 0xE0075, 0xE0076, 0xE0077, 0xE0078, 0xE0079, 0xE007A, 0xE007B, 
  2064 	0xE007C, 0xE007D, 0xE007E, 0xE007F, 0xE0100, 0xE0101, 0xE0102, 0xE0103, 
  2065 	0xE0104, 0xE0105, 0xE0106, 0xE0107, 0xE0108, 0xE0109, 0xE010A, 0xE010B, 
  2066 	0xE010C, 0xE010D, 0xE010E, 0xE010F, 0xE0110, 0xE0111, 0xE0112, 0xE0113, 
  2067 	0xE0114, 0xE0115, 0xE0116, 0xE0117, 0xE0118, 0xE0119, 0xE011A, 0xE011B, 
  2068 	0xE011C, 0xE011D, 0xE011E, 0xE011F, 0xE0120, 0xE0121, 0xE0122, 0xE0123, 
  2069 	0xE0124, 0xE0125, 0xE0126, 0xE0127, 0xE0128, 0xE0129, 0xE012A, 0xE012B, 
  2070 	0xE012C, 0xE012D, 0xE012E, 0xE012F, 0xE0130, 0xE0131, 0xE0132, 0xE0133, 
  2071 	0xE0134, 0xE0135, 0xE0136, 0xE0137, 0xE0138, 0xE0139, 0xE013A, 0xE013B, 
  2072 	0xE013C, 0xE013D, 0xE013E, 0xE013F, 0xE0140, 0xE0141, 0xE0142, 0xE0143, 
  2073 	0xE0144, 0xE0145, 0xE0146, 0xE0147, 0xE0148, 0xE0149, 0xE014A, 0xE014B, 
  2074 	0xE014C, 0xE014D, 0xE014E, 0xE014F, 0xE0150, 0xE0151, 0xE0152, 0xE0153, 
  2075 	0xE0154, 0xE0155, 0xE0156, 0xE0157, 0xE0158, 0xE0159, 0xE015A, 0xE015B, 
  2076 	0xE015C, 0xE015D, 0xE015E, 0xE015F, 0xE0160, 0xE0161, 0xE0162, 0xE0163, 
  2077 	0xE0164, 0xE0165, 0xE0166, 0xE0167, 0xE0168, 0xE0169, 0xE016A, 0xE016B, 
  2078 	0xE016C, 0xE016D, 0xE016E, 0xE016F, 0xE0170, 0xE0171, 0xE0172, 0xE0173, 
  2079 	0xE0174, 0xE0175, 0xE0176, 0xE0177, 0xE0178, 0xE0179, 0xE017A, 0xE017B, 
  2080 	0xE017C, 0xE017D, 0xE017E, 0xE017F, 0xE0180, 0xE0181, 0xE0182, 0xE0183, 
  2081 	0xE0184, 0xE0185, 0xE0186, 0xE0187, 0xE0188, 0xE0189, 0xE018A, 0xE018B, 
  2082 	0xE018C, 0xE018D, 0xE018E, 0xE018F, 0xE0190, 0xE0191, 0xE0192, 0xE0193, 
  2083 	0xE0194, 0xE0195, 0xE0196, 0xE0197, 0xE0198, 0xE0199, 0xE019A, 0xE019B, 
  2084 	0xE019C, 0xE019D, 0xE019E, 0xE019F, 0xE01A0, 0xE01A1, 0xE01A2, 0xE01A3, 
  2085 	0xE01A4, 0xE01A5, 0xE01A6, 0xE01A7, 0xE01A8, 0xE01A9, 0xE01AA, 0xE01AB, 
  2086 	0xE01AC, 0xE01AD, 0xE01AE, 0xE01AF, 0xE01B0, 0xE01B1, 0xE01B2, 0xE01B3, 
  2087 	0xE01B4, 0xE01B5, 0xE01B6, 0xE01B7, 0xE01B8, 0xE01B9, 0xE01BA, 0xE01BB, 
  2088 	0xE01BC, 0xE01BD, 0xE01BE, 0xE01BF, 0xE01C0, 0xE01C1, 0xE01C2, 0xE01C3, 
  2089 	0xE01C4, 0xE01C5, 0xE01C6, 0xE01C7, 0xE01C8, 0xE01C9, 0xE01CA, 0xE01CB, 
  2090 	0xE01CC, 0xE01CD, 0xE01CE, 0xE01CF, 0xE01D0, 0xE01D1, 0xE01D2, 0xE01D3, 
  2091 	0xE01D4, 0xE01D5, 0xE01D6, 0xE01D7, 0xE01D8, 0xE01D9, 0xE01DA, 0xE01DB, 
  2092 	0xE01DC, 0xE01DD, 0xE01DE, 0xE01DF, 0xE01E0, 0xE01E1, 0xE01E2, 0xE01E3, 
  2093 	0xE01E4, 0xE01E5, 0xE01E6, 0xE01E7, 0xE01E8, 0xE01E9, 0xE01EA, 0xE01EB, 
  2094 	0xE01EC, 0xE01ED, 0xE01EE, 0xE01EF, 	
  2095 };
  2096 
  2097 
  2098 
  2099 //----------------------------------------------------------------------------------------------
  2100 
  2101 /**
  2102    @SYMTestCaseID           TI18N-UCD-CT-4001
  2103    @SYMPREQ                 2471
  2104    @SYMTestCaseDesc         Check UCD support for newly added codepoint.
  2105    @SYMTestPriority         High 
  2106    @SYMTestStatus           Implemented
  2107    @SYMTestActions          1. Select new UCD codepoint
  2108                             2. Get the characters' properties from UCD
  2109    @SYMTestExpectedResults  All properties of the characters are retrieved from UCD
  2110  */
  2111 //----------------------------------------------------------------------------------------------
  2112 // test for characters' attribute newly added or changed in Unicode 5.0
  2113 // the characters are chosen randomly from different blocks
  2114 void test_unicode5_new_chars()
  2115 	{
  2116 	test_unicode_char(0x002B,_L("Sm b=ES w=3"),_L("+"));
  2117 	test_unicode_char(0x002D,_L("Pd b=ES w=3"),_L("-"));
  2118 	test_unicode_char(0x002F,_L("Po b=CS w=3"),_L("/"));
  2119 	test_unicode_char(0x00AD,_L("Cf b=BN np ng"),_L("SOFT HYPHEN"));
  2120 	test_unicode_char(0x00B2,_L("No b=EN n=2"),_L("SUPERSCRIPT TWO"));
  2121 	test_unicode_char(0x019E,_L("Ll u=220"),_L("LATIN SMALL LETTER N WITH LONG RIGHT LEG"));
  2122 	test_unicode_char(0x01C5,_L("Lt u=1c4 l=1c6"),_L("LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON"));
  2123 	test_unicode_char(0x0234,_L("Ll"),_L("LATIN SMALL LETTER L WITH CURL"));
  2124 	test_unicode_char(0x0294,_L("Lo"),_L("LATIN LETTER GLOTTAL STOP"));
  2125 	test_unicode_char(0x02AE,_L("Ll"),_L("LATIN SMALL LETTER TURNED H WITH FISHHOOK"));
  2126 	test_unicode_char(0x02C6,_L("Lm b=ON"),_L("MODIFIER LETTER CIRCUMFLEX ACCENT"));
  2127 	test_unicode_char(0x02FF,_L("Sk b=ON"),_L("MODIFIER LETTER LOW LEFT ARROW"));
  2128 	test_unicode_char(0x034F,_L("Mn b=NSM"),_L("COMBINING GRAPHEME JOINER"));
  2129 	test_unicode_char(0x03D8,_L("Lu l=3d9"),_L("GREEK LETTER ARCHAIC KOPPA"));
  2130 	test_unicode_char(0x03F2,_L("Ll u=3f9"),_L("GREEK LUNATE SIGMA SYMBOL"));
  2131 	test_unicode_char(0x04C0,_L("Lu l=4cf"),_L("CYRILLIC LETTER PALOCHKA"));
  2132 	test_unicode_char(0x06FF,_L("Lo b=AL"),_L("ARABIC LETTER HEH WITH INVERTED V"));
  2133 	test_unicode_char(0x07C0,_L("Nd b=R n=0"),_L("NKO DIGIT ZERO"));
  2134 	test_unicode_char(0x097F,_L("Lo"),_L("DEVANAGARI LETTER BBA"));
  2135 	test_unicode_char(0x0B83,_L("Lo"),_L("TAMIL SIGN VISARGA"));
  2136 	test_unicode_char(0x0CBD,_L("Lo"),_L("KANNADA SIGN AVAGRAHA"));
  2137 	test_unicode_char(0x0F3A,_L("Ps b=ON m"),_L("TIBETAN MARK GUG RTAGS GYON"));
  2138 	test_unicode_char(0x10A0,_L("Lu l=2d00"),_L("GEORGIAN CAPITAL LETTER AN"));
  2139 	test_unicode_char(0x1369,_L("No n=1"),_L("ETHIOPIC DIGIT ONE"));
  2140 	test_unicode_char(0x1900,_L("Lo"),_L("LIMBU VOWEL-CARRIER LETTER"));
  2141 	test_unicode_char(0x200B,_L("Cf b=BN np ng"),_L("ZERO WIDTH SPACE"));
  2142 	test_unicode_char(0x202F,_L("Zs b=CS ng"),_L("NARROW NO-BREAK SPACE"));
  2143 	test_unicode_char(0x214E,_L("Ll u=2132"),_L("TURNED SMALL F"));
  2144 	test_unicode_char(0x2DBE,_L("Lo"),_L("ETHIOPIC SYLLABLE CCHO"));
  2145 	test_unicode_char(0x4DC0,_L("So b=ON w=4"),_L("HEXAGRAM FOR THE CREATIVE HEAVEN"));
  2146 	test_unicode_char(0x9FA6,_L("Lo w=4"),_L("CJK UNIFIED IDEOGRAPH-9FA6"));
  2147 	test_unicode_char(0xA721,_L("Sk b=ON w=4"),_L("MODIFIER LETTER STRESS AND LOW TONE"));
  2148 	test_unicode_char(0xFE00,_L("Mn b=NSM"),_L("VARIATION SELECTOR-1"));
  2149 	test_unicode_char(0x10100,_L("Po"),_L("AEGEAN WORD SEPARATOR LINE"));
  2150 	test_unicode_char(0x20000,_L("Lo w=4"),_L("CJK UNIFIED IDEOGRAPH-20000"));
  2151 	test_unicode_char(0x2F800,_L("Lo w=4 d=4e3d"),_L("CJK UNIFIED IDEOGRAPH-2F800"));
  2152 	}
  2153 
  2154 static void Unicode5NewCharTest()
  2155 	{
  2156 	TUint32 i;
  2157 	for (i=0; i < sizeof(Unicode5NewCharRange)/sizeof(TUint32); i+=2)
  2158 		{
  2159 		TUint32 from = Unicode5NewCharRange[i];
  2160 		TUint32 to = Unicode5NewCharRange[i + 1];
  2161 		
  2162 		for (TUint32 ch = from; ch <= to; ch++)
  2163 			{
  2164 			TChar c(ch);
  2165 
  2166 			TChar::TCharInfo ci;
  2167 			c.GetInfo(ci);
  2168 		
  2169 			test((ci.iCategory & TChar::EUnassignedGroup) != TChar::EUnassignedGroup);
  2170 			
  2171 			}
  2172 		}
  2173 	for (i=0; i < sizeof(Unicode5NewCharOutBMPIndex)/sizeof(TUint32); i++)
  2174 		{
  2175 		TUint32 ch = Unicode5NewCharOutBMPIndex[i]; 
  2176 		TChar c(ch);
  2177 
  2178 		TChar::TCharInfo ci;
  2179 		c.GetInfo(ci);
  2180 	
  2181 		test((ci.iCategory & TChar::EUnassignedGroup) != TChar::EUnassignedGroup);
  2182 
  2183 		}
  2184 	}
  2185 
  2186 //----------------------------------------------------------------------------------------------
  2187 
  2188 /**
  2189    @SYMTestCaseID           TI18N-UCD-CT-4002
  2190    @SYMPREQ                 2471
  2191    @SYMTestCaseDesc         Check UCD support for one byte GB18030 character mapping/support.
  2192    @SYMTestPriority         High 
  2193    @SYMTestStatus           Implemented
  2194    @SYMTestActions          1. Select characters from one-byte character set
  2195                             2. Get the characters' properties from UCD
  2196    @SYMTestExpectedResults  All properties of the characters are retrieved from UCD
  2197  */
  2198 //----------------------------------------------------------------------------------------------
  2199 static void GB18030OneByteCharTest()
  2200 	{
  2201 	for (TInt32 i=0; i <= 127; i++)
  2202 		{
  2203 		TUint32 ch = i;
  2204 		TChar c(ch);
  2205 
  2206 		TChar::TCharInfo ci;
  2207 		c.GetInfo(ci);
  2208 	
  2209 		test((ci.iCategory & TChar::EUnassignedGroup) != TChar::EUnassignedGroup);
  2210 		}
  2211 	}
  2212 
  2213 //----------------------------------------------------------------------------------------------
  2214 
  2215 /**
  2216    @SYMTestCaseID           TI18N-UCD-CT-4003
  2217    @SYMPREQ                 2471
  2218    @SYMTestCaseDesc         Check UCD support for four-byte GB18030 character mapping/support.
  2219    @SYMTestPriority         High 
  2220    @SYMTestStatus           Implemented
  2221    @SYMTestActions          1. Select characters from CJK Ext B
  2222                             2. Get the characters' properties from UCD
  2223                             3. Select characters from CJK Compat Ideograph
  2224                             4. Get the character's properties from UCD
  2225    @SYMTestExpectedResults  All properties of the characters are retrieved from UCD
  2226  */
  2227 //----------------------------------------------------------------------------------------------
  2228 static void GB18030FourBytesCharTest()
  2229 	{
  2230 	/* CJK Ideograph Extension B */
  2231 	for (TInt32 i=0x20000; i <= 0x2A6D6; i++)
  2232 		{
  2233 		TUint32 ch = i;
  2234 		TChar c(ch);
  2235 
  2236 		TChar::TCharInfo ci;
  2237 		c.GetInfo(ci);
  2238 	
  2239 		test((ci.iCategory & TChar::EUnassignedGroup) != TChar::EUnassignedGroup);
  2240 		}
  2241 	
  2242 	/* CJK COMPATIBILITY IDEOGRAPH has been tested in Unicode 5 New char */
  2243 	}
  2244 
  2245 GLDEF_C TInt E32Main(void)
  2246     {
  2247 
  2248 	test.Title();
  2249 	test.Start(_L("TCHAR TESTING"));
  2250 
  2251 	test_unicode_chars();
  2252 	test_unicode_collations();
  2253 
  2254 	test.Next(_L("TChar"));
  2255 	TestTChar<TChar> t;
  2256 	t.Test1();
  2257 	t.Test2(eTChar);
  2258 	t.Test3(eTChar);
  2259 	t.Test4(eTChar);
  2260 
  2261 	test.Next(_L("TCharF"));
  2262 	TestTChar<TCharF> f;
  2263 	f.Test2(eTCharF);
  2264 	f.Test3(eTCharF);
  2265 	f.Test4(eTCharF);
  2266 
  2267 	test.Next(_L("TCharLC"));
  2268 	TestTChar<TCharLC> lc;
  2269 	lc.Test2(eTCharLC);
  2270 	lc.Test3(eTCharLC);
  2271 	lc.Test4(eTCharLC);
  2272 
  2273 	test.Next(_L("TCharUC"));
  2274   	TestTChar<TCharUC> uc;
  2275 	uc.Test2(eTCharUC);
  2276 	uc.Test3(eTCharUC);
  2277 	uc.Test4(eTCharUC);
  2278 
  2279 	test.Next(_L("Unicode 5 New"));
  2280 	Unicode5NewCharTest();
  2281 	test_unicode5_new_chars();
  2282 	
  2283 	test.Next(_L("GB18030 One and Four Bytes Character"));
  2284 	GB18030OneByteCharTest();
  2285 	GB18030FourBytesCharTest();
  2286 	
  2287 	test.End();
  2288 	return(KErrNone);
  2289     }
  2290 
  2291 #pragma warning ( default :4700)
  2292 #pragma warning ( default :4710)