API  0.9.10
CPCharacterSet.j
Go to the documentation of this file.
1 /*
2  * CPCharacterSet.j
3  * Foundation
4  *
5  * Copyright 2008, Emanuele Vulcano
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 
23 // CPCharacterSet is a class cluster. Concrete implementations
24 // follow after the main abstract class.
25 
26 var _builtInCharacterSets = {};
27 
28 @implementation CPCharacterSet : CPObject
29 {
30  BOOL _inverted;
31 }
32 
33 // Missing methods
34 /*
35 - (BOOL)isSupersetOfSet:(CPCharacterSet)theOtherSet{}
36 + (id)characterSetWithBitmapRepresentation:(CPData)data{}
37 + (id)characterSetWithContentsOfFile:(CPString)path{}
38 - (CPData)bitmapRepresentation{}
39 
40 - (void)formIntersectionWithCharacterSet:(CPCharacterSet)otherSet
41 - (void)formUnionWithCharacterSet:(CPCharacterSet)otherSet
42 - (void)removeCharactersInRange:(CPRange)aRange
43 - (void)removeCharactersInString:(CPString)aString
44 */
45 
46 - (id)init
47 {
48  self = [super init];
49 
50  if (self)
51  _inverted = NO;
52 
53  return self;
54 }
55 
56 - (void)invert
57 {
58  _inverted = !_inverted;
59 }
60 
61 - (BOOL)characterIsMember:(CPString)aCharacter
62 {
63  // IMPLEMENTED BY SUBCLASSES
64 }
65 
66 - (BOOL)hasMemberInPlane:(int)aPlane
67 {
68  // IMPLEMENTED BY SUBCLASSES
69 }
70 
71 + (id)characterSetWithCharactersInString:(CPString)aString
72 {
73  return [[_CPStringContentCharacterSet alloc] initWithString:aString];
74 }
75 
76 + (id)characterSetWithRange:(CPRange)aRange
77 {
78  return [[_CPRangeCharacterSet alloc] initWithRange:aRange];
79 }
80 
82 {
83  return [CPCharacterSet _sharedCharacterSetWithName:_cmd];
84 }
85 
87 {
88  return [CPCharacterSet _sharedCharacterSetWithName:_cmd];
89 }
90 
92 {
93  return [CPCharacterSet _sharedCharacterSetWithName:_cmd];
94 }
95 
97 {
98  return [CPCharacterSet _sharedCharacterSetWithName:_cmd];
99 }
100 
102 {
103  return [CPCharacterSet _sharedCharacterSetWithName:_cmd];
104 }
105 
107 {
108  return [CPCharacterSet _sharedCharacterSetWithName:_cmd];
109 }
110 
112 {
113  return [CPCharacterSet _sharedCharacterSetWithName:_cmd];
114 }
115 
117 {
118  return [CPCharacterSet _sharedCharacterSetWithName:_cmd];
119 }
120 
122 {
123  return [CPCharacterSet _sharedCharacterSetWithName:_cmd];
124 }
125 
127 {
128  return [CPCharacterSet _sharedCharacterSetWithName:_cmd];
129 }
130 
132 {
133  return [CPCharacterSet _sharedCharacterSetWithName:_cmd];
134 }
135 
137 {
138  return [CPCharacterSet _sharedCharacterSetWithName:_cmd];
139 }
140 
141 // private methods
142 + (id)_sharedCharacterSetWithName:(id)csname
143 {
144  var cs = _builtInCharacterSets[csname];
145 
146  if (!cs)
147  {
148  var i = 0,
149  ranges = [CPArray array],
150  rangeArray = eval(csname);
151 
152  for (; i < rangeArray.length; i+= 2)
153  {
154  var loc = rangeArray[i],
155  length = rangeArray[i + 1],
156  range = CPMakeRange(loc,length);
157  [ranges addObject:range];
158  }
159 
160  cs = [[_CPRangeCharacterSet alloc] initWithRanges:ranges];
161  _builtInCharacterSets[csname] = cs;
162  }
163 
164  return cs;
165 }
166 
167 - (void)_setInverted:flag
168 {
169  _inverted = flag;
170 }
171 
172 @end
173 
174 var CPCharacterSetInvertedKey = @"CPCharacterSetInvertedKey";
175 
177 
178 - (id)initWithCoder:(CPCoder)aCoder
179 {
180  if (self = [super init])
181  {
182  _inverted = [aCoder decodeBoolForKey:CPCharacterSetInvertedKey];
183  }
184 
185  return self;
186 }
187 
188 - (void)encodeWithCoder:(CPCoder)aCoder
189 {
190  [aCoder encodeBool:_inverted forKey:CPCharacterSetInvertedKey];
191 }
192 
193 @end
194 
195 // A character set that stores a list of ranges of
196 // acceptable characters.
197 @implementation _CPRangeCharacterSet : CPCharacterSet
198 {
199  CPArray _ranges;
200 }
201 
202 // Creates a range character set with a single range.
203 - (id)initWithRange:(CPRange)r
204 {
205  return [self initWithRanges:[CPArray arrayWithObject:r]];
206 }
207 
208 // Creates a range character set with multiple ranges.
209 - (id)initWithRanges:(CPArray)ranges
210 {
211  self = [super init];
212 
213  if (self)
214  {
215  _ranges = ranges;
216  }
217 
218  return self;
219 }
220 
221 - (id)copy
222 {
223  var set = [[_CPRangeCharacterSet alloc] initWithRanges:_ranges];
224  [set _setInverted:_inverted];
225  return set;
226 }
227 
228 - (id)invertedSet
229 {
230  var set = [[_CPRangeCharacterSet alloc] initWithRanges:_ranges];
231  [set invert];
232  return set;
233 }
234 
235 - (BOOL)characterIsMember:(CPString)aCharacter
236 {
237  var c = aCharacter.charCodeAt(0),
238  enu = [_ranges objectEnumerator],
239  range;
240 
241  while ((range = [enu nextObject]) !== nil)
242  {
243  if (CPLocationInRange(c, range))
244  return !_inverted;
245  }
246 
247  return _inverted;
248 }
249 
250 - (BOOL)hasMemberInPlane:(int)plane // TO DO : when inverted
251 {
252  // JavaScript strings can only return char codes
253  // up to 0xFFFF (per the ECMA standard), so
254  // they all live in the Basic Multilingual Plane
255  // (aka plane 0).
256 
257  if (plane !== 0)
258  return NO;
259 
260  var enu = [_ranges objectEnumerator],
261  range;
262 
263  while ((range = [enu nextObject]) !== nil)
264  {
265  if (!CPEmptyRange(range))
266  return YES;
267  }
268 
269  return NO;
270 }
271 
272 - (void)addCharactersInRange:(CPRange)aRange // Needs _inverted support
273 {
274  [_ranges addObject:aRange];
275 }
276 
277 - (void)addCharactersInString:(CPString)aString // Needs _inverted support
278 {
279  var i = 0;
280 
281  for (; i < aString.length; i++)
282  {
283  var code = aString.charCodeAt(i),
284  range = CPMakeRange(code,1);
285 
286  [_ranges addObject:range];
287  }
288 }
289 
290 @end
291 
292 // A character set that scans a string's contents for
293 // acceptable characters.
294 @implementation _CPStringContentCharacterSet : CPCharacterSet
295 {
296  CPString _string;
297 }
298 
299 - (id)initWithString:(CPString)s
300 {
301  self = [super init];
302 
303  if (self)
304  {
305  _string = s;
306  }
307 
308  return self;
309 }
310 
311 - (id)copy
312 {
313  var set = [[_CPStringContentCharacterSet alloc] initWithString:_string];
314  [set _setInverted:_inverted];
315 
316  return set;
317 }
318 
319 - (id)invertedSet
320 {
321  var set = [[_CPStringContentCharacterSet alloc] initWithString:_string];
322  [set invert];
323 
324  return set;
325 }
326 
327 - (BOOL)characterIsMember:(CPString)c
328 {
329  return (_string.indexOf(c.charAt(0)) !== -1) === !_inverted;
330 }
331 
333 {
334  return [super description] + " { string = '" + _string + "'}";
335 }
336 
337 - (BOOL)hasMemberInPlane:(int)plane
338 {
339  // JavaScript strings can only return char codes
340  // up to 0xFFFF (per the ECMA standard), so
341  // they all live in the Basic Multilingual Plane
342  // (aka plane 0).
343 
344  return _string.length && plane === 0;
345 }
346 
347 - (void)addCharactersInRange:(CPRange)aRange // Needs _inverted support
348 {
349  var i = aRange.location,
350  count = aRange.location + aRange.length;
351 
352  for (; i < count; i++)
353  {
354  var s = String.fromCharCode(i);
355 
356  if (![self characterIsMember:s])
357  _string = [_string stringByAppendingString:s];
358  }
359 }
360 
361 - (void)addCharactersInString:(CPString)aString // Needs _inverted support
362 {
363  var i = 0;
364 
365  for (; i < aString.length; i++)
366  {
367  var s = aString.charAt(i);
368 
369  if (![self characterIsMember:s])
370  _string = [_string stringByAppendingString:s];
371  }
372 }
373 
374 - (BOOL)isEqual:(CPCharacterSet)aCharacterSet
375 {
376  if (self === aCharacterSet)
377  return YES;
378 
379  if (!aCharacterSet || ![aCharacterSet isKindOfClass:[self class]])
380  return NO;
381 
382  return [self _isEqualToStringContentCharacterSet:aCharacterSet];
383 }
384 
385 - (BOOL)_isEqualToStringContentCharacterSet:(_CPStringContentCharacterSet)aCharacterSet
386 {
387  if (!aCharacterSet)
388  return NO;
389 
390  return _string === aCharacterSet._string && _inverted === aCharacterSet._inverted;
391 }
392 
393 @end
394 
395 var _CPStringContentCharacterSetStringKey = @"_CPStringContentCharacterSetStringKey";
396 
397 @implementation _CPStringContentCharacterSet (CPCoding)
398 
399 - (id)initWithCoder:(CPCoder)aCoder
400 {
401  if (self = [super initWithCoder:aCoder])
402  {
403  _string = [aCoder decodeObjectForKey:_CPStringContentCharacterSetStringKey]
404  }
405 
406  return self;
407 }
408 
409 - (void)encodeWithCoder:(CPCoder)aCoder
410 {
411  [super encodeWithCoder:aCoder];
412 
413  [aCoder encodeObject:_string forKey:_CPStringContentCharacterSetStringKey];
414 }
415 
416 @end
417 
418 _CPCharacterSetTrimAtBeginning = 1 << 1;
419 _CPCharacterSetTrimAtEnd = 1 << 2;
420 
422 
435 - (CPArray)componentsSeparatedByCharactersInSet:(CPCharacterSet)separator
436 {
437  if (!separator)
438  [CPException raise:CPInvalidArgumentException
439  reason:"componentsSeparatedByCharactersInSet: the separator can't be 'nil'"];
440 
441  var components = [CPMutableArray array],
442  componentRange = CPMakeRange(0, 0),
443  i = 0;
444 
445  for (; i < self.length; i++)
446  {
447  if ([separator characterIsMember:self.charAt(i)])
448  {
449  componentRange.length = i - componentRange.location;
450  [components addObject:[self substringWithRange:componentRange]];
451  componentRange.location += componentRange.length + 1;
452  }
453  }
454 
455  componentRange.length = self.length - componentRange.location;
456  [components addObject:[self substringWithRange:componentRange]];
457 
458  return components;
459 }
460 
461 // As per the Cocoa method.
462 - (id)stringByTrimmingCharactersInSet:(CPCharacterSet)set
463 {
464  return [self _stringByTrimmingCharactersInSet:set options:_CPCharacterSetTrimAtBeginning | _CPCharacterSetTrimAtEnd];
465 }
466 
467 // private method evilness!
468 // CPScanner's scanUpToString:... methods rely on this
469 // method being present.
470 - (id)_stringByTrimmingCharactersInSet:(CPCharacterSet)set options:(int)options
471 {
472  var str = self;
473 
474  if (options & _CPCharacterSetTrimAtBeginning)
475  {
476  var cutEdgeBeginning = 0;
477 
478  while (cutEdgeBeginning < self.length && [set characterIsMember:self.charAt(cutEdgeBeginning)])
479  cutEdgeBeginning++;
480 
481  str = str.substr(cutEdgeBeginning);
482  }
483 
484  if (options & _CPCharacterSetTrimAtEnd)
485  {
486  var cutEdgeEnd = str.length;
487 
488  while (cutEdgeEnd > 0 && [set characterIsMember:str.charAt(cutEdgeEnd - 1)])
489  cutEdgeEnd--;
490 
491  str = str.substr(0, cutEdgeEnd);
492  }
493 
494  return str;
495 }
496 
497 @end
498 
500 48,10,
501 65,26,
502 97,26,
503 170,1,
504 178,2,
505 181,1,
506 185,2,
507 188,3,
508 192,23,
509 216,31,
510 248,458,
511 710,12,
512 736,5,
513 750,1,
514 768,112,
515 890,4,
516 902,1,
517 904,3,
518 908,1,
519 910,20,
520 931,44,
521 976,38,
522 1015,139,
523 1155,4,
524 1160,140,
525 1329,38,
526 1369,1,
527 1377,39,
528 1425,45,
529 1471,1,
530 1473,2,
531 1476,2,
532 1479,1,
533 1488,27,
534 1520,3,
535 1552,6,
536 1569,26,
537 1600,31,
538 1632,10,
539 1646,102,
540 1749,8,
541 1758,11,
542 1770,19,
543 1791,1,
544 1808,59,
545 1869,33,
546 1920,50,
547 1984,54,
548 2042,1,
549 2305,57,
550 2364,18,
551 2384,5,
552 2392,12,
553 2406,10,
554 2427,5,
555 2433,3,
556 2437,8,
557 2447,2,
558 2451,22,
559 2474,7,
560 2482,1,
561 2486,4,
562 2492,9,
563 2503,2,
564 2507,4,
565 2519,1,
566 2524,2,
567 2527,5,
568 2534,12,
569 2548,6,
570 2561,3,
571 2565,6,
572 2575,2,
573 2579,22,
574 2602,7,
575 2610,2,
576 2613,2,
577 2616,2,
578 2620,1,
579 2622,5,
580 2631,2,
581 2635,3,
582 2649,4,
583 2654,1,
584 2662,15,
585 2689,3,
586 2693,9,
587 2703,3,
588 2707,22,
589 2730,7,
590 2738,2,
591 2741,5,
592 2748,10,
593 2759,3,
594 2763,3,
595 2768,1,
596 2784,4,
597 2790,10,
598 2817,3,
599 2821,8,
600 2831,2,
601 2835,22,
602 2858,7,
603 2866,2,
604 2869,5,
605 2876,8,
606 2887,2,
607 2891,3,
608 2902,2,
609 2908,2,
610 2911,3,
611 2918,10,
612 2929,1,
613 2946,2,
614 2949,6,
615 2958,3,
616 2962,4,
617 2969,2,
618 2972,1,
619 2974,2,
620 2979,2,
621 2984,3,
622 2990,12,
623 3006,5,
624 3014,3,
625 3018,4,
626 3031,1,
627 3046,13,
628 3073,3,
629 3077,8,
630 3086,3,
631 3090,23,
632 3114,10,
633 3125,5,
634 3134,7,
635 3142,3,
636 3146,4,
637 3157,2,
638 3168,2,
639 3174,10,
640 3202,2,
641 3205,8,
642 3214,3,
643 3218,23,
644 3242,10,
645 3253,5,
646 3260,9,
647 3270,3,
648 3274,4,
649 3285,2,
650 3294,1,
651 3296,4,
652 3302,10,
653 3330,2,
654 3333,8,
655 3342,3,
656 3346,23,
657 3370,16,
658 3390,6,
659 3398,3,
660 3402,4,
661 3415,1,
662 3424,2,
663 3430,10,
664 3458,2,
665 3461,18,
666 3482,24,
667 3507,9,
668 3517,1,
669 3520,7,
670 3530,1,
671 3535,6,
672 3542,1,
673 3544,8,
674 3570,2,
675 3585,58,
676 3648,15,
677 3664,10,
678 3713,2,
679 3716,1,
680 3719,2,
681 3722,1,
682 3725,1,
683 3732,4,
684 3737,7,
685 3745,3,
686 3749,1,
687 3751,1,
688 3754,2,
689 3757,13,
690 3771,3,
691 3776,5,
692 3782,1,
693 3784,6,
694 3792,10,
695 3804,2,
696 3840,1,
697 3864,2,
698 3872,20,
699 3893,1,
700 3895,1,
701 3897,1,
702 3902,10,
703 3913,34,
704 3953,20,
705 3974,6,
706 3984,8,
707 3993,36,
708 4038,1,
709 4096,34,
710 4131,5,
711 4137,2,
712 4140,7,
713 4150,4,
714 4160,10,
715 4176,10,
716 4256,38,
717 4304,43,
718 4348,1,
719 4352,90,
720 4447,68,
721 4520,82,
722 4608,73,
723 4682,4,
724 4688,7,
725 4696,1,
726 4698,4,
727 4704,41,
728 4746,4,
729 4752,33,
730 4786,4,
731 4792,7,
732 4800,1,
733 4802,4,
734 4808,15,
735 4824,57,
736 4882,4,
737 4888,67,
738 4959,1,
739 4969,20,
740 4992,16,
741 5024,85,
742 5121,620,
743 5743,8,
744 5761,26,
745 5792,75,
746 5870,3,
747 5888,13,
748 5902,7,
749 5920,21,
750 5952,20,
751 5984,13,
752 5998,3,
753 6002,2,
754 6016,52,
755 6070,30,
756 6103,1,
757 6108,2,
758 6112,10,
759 6128,10,
760 6155,3,
761 6160,10,
762 6176,88,
763 6272,42,
764 6400,29,
765 6432,12,
766 6448,12,
767 6470,40,
768 6512,5,
769 6528,42,
770 6576,26,
771 6608,10,
772 6656,28,
773 6912,76,
774 6992,10,
775 7019,9,
776 7424,203,
777 7678,158,
778 7840,90,
779 7936,22,
780 7960,6,
781 7968,38,
782 8008,6,
783 8016,8,
784 8025,1,
785 8027,1,
786 8029,1,
787 8031,31,
788 8064,53,
789 8118,7,
790 8126,1,
791 8130,3,
792 8134,7,
793 8144,4,
794 8150,6,
795 8160,13,
796 8178,3,
797 8182,7,
798 8304,2,
799 8308,6,
800 8319,11,
801 8336,5,
802 8400,32,
803 8450,1,
804 8455,1,
805 8458,10,
806 8469,1,
807 8473,5,
808 8484,1,
809 8486,1,
810 8488,1,
811 8490,4,
812 8495,11,
813 8508,4,
814 8517,5,
815 8526,1,
816 8531,50,
817 9312,60,
818 9450,22,
819 10102,30,
820 11264,47,
821 11312,47,
822 11360,13,
823 11380,4,
824 11392,101,
825 11517,1,
826 11520,38,
827 11568,54,
828 11631,1,
829 11648,23,
830 11680,7,
831 11688,7,
832 11696,7,
833 11704,7,
834 11712,7,
835 11720,7,
836 11728,7,
837 11736,7,
838 12293,3,
839 12321,15,
840 12337,5,
841 12344,5,
842 12353,86,
843 12441,2,
844 12445,3,
845 12449,90,
846 12540,4,
847 12549,40,
848 12593,94,
849 12690,4,
850 12704,24,
851 12784,16,
852 12832,10,
853 12881,15,
854 12928,10,
855 12977,15,
856 13312,6582,
857 19968,20924,
858 40960,1165,
859 42775,4,
860 43008,40,
861 43072,52,
862 44032,11172,
863 63744,302,
864 64048,59,
865 64112,106,
866 64256,7,
867 64275,5,
868 64285,12,
869 64298,13,
870 64312,5,
871 64318,1,
872 64320,2,
873 64323,2,
874 64326,108,
875 64467,363,
876 64848,64,
877 64914,54,
878 65008,12,
879 65024,16,
880 65056,4,
881 65136,5,
882 65142,135,
883 65296,10,
884 65313,26,
885 65345,26,
886 65382,89,
887 65474,6,
888 65482,6,
889 65490,6
890 ];
891 
893 0,32,
894 127,33,
895 173,1,
896 1536,4,
897 1757,1,
898 1807,1,
899 6068,2,
900 8203,5,
901 8234,5,
902 8288,4,
903 8298,6,
904 65279,1
905 ];
906 
908 48,10,
909 1632,10,
910 1776,10,
911 1984,10,
912 2406,10,
913 2534,10,
914 2662,10,
915 2790,10,
916 2918,10,
917 3046,10,
918 3174,10,
919 3302,10,
920 3430,10,
921 3664,10,
922 3792,10,
923 3872,10,
924 4160,10,
925 6112,10,
926 6160,10,
927 6470,10,
928 6608,10,
929 6992,10
930 ];
931 
933 192,6,
934 199,9,
935 209,6,
936 217,5,
937 224,6,
938 231,9,
939 241,6,
940 249,5,
941 255,17,
942 274,20,
943 296,9,
944 308,4,
945 313,6,
946 323,6,
947 332,6,
948 340,18,
949 360,23,
950 416,2,
951 431,2,
952 461,16,
953 478,6,
954 486,11,
955 500,2,
956 504,36,
957 542,2,
958 550,14,
959 832,2,
960 835,2,
961 884,1,
962 894,1,
963 901,6,
964 908,1,
965 910,3,
966 938,7,
967 970,5,
968 979,2,
969 1024,2,
970 1027,1,
971 1031,1,
972 1036,3,
973 1049,1,
974 1081,1,
975 1104,2,
976 1107,1,
977 1111,1,
978 1116,3,
979 1142,2,
980 1217,2,
981 1232,4,
982 1238,2,
983 1242,6,
984 1250,6,
985 1258,12,
986 1272,2,
987 1570,5,
988 1728,1,
989 1730,1,
990 1747,1,
991 2345,1,
992 2353,1,
993 2356,1,
994 2392,8,
995 2507,2,
996 2524,2,
997 2527,1,
998 2611,1,
999 2614,1,
1000 2649,3,
1001 2654,1,
1002 2888,1,
1003 2891,2,
1004 2908,2,
1005 2964,1,
1006 3018,3,
1007 3144,1,
1008 3264,1,
1009 3271,2,
1010 3274,2,
1011 3402,3,
1012 3546,1,
1013 3548,3,
1014 3907,1,
1015 3917,1,
1016 3922,1,
1017 3927,1,
1018 3932,1,
1019 3945,1,
1020 3955,1,
1021 3957,2,
1022 3960,1,
1023 3969,1,
1024 3987,1,
1025 3997,1,
1026 4002,1,
1027 4007,1,
1028 4012,1,
1029 4025,1,
1030 4134,1,
1031 6918,1,
1032 6920,1,
1033 6922,1,
1034 6924,1,
1035 6926,1,
1036 6930,1,
1037 6971,1,
1038 6973,1,
1039 6976,2,
1040 6979,1,
1041 7680,154,
1042 7835,1,
1043 7840,90,
1044 7936,22,
1045 7960,6,
1046 7968,38,
1047 8008,6,
1048 8016,8,
1049 8025,1,
1050 8027,1,
1051 8029,1,
1052 8031,31,
1053 8064,53,
1054 8118,7,
1055 8126,1,
1056 8129,4,
1057 8134,14,
1058 8150,6,
1059 8157,19,
1060 8178,3,
1061 8182,8,
1062 8192,2,
1063 8486,1,
1064 8490,2,
1065 8602,2,
1066 8622,1,
1067 8653,3,
1068 8708,1,
1069 8713,1,
1070 8716,1,
1071 8740,1,
1072 8742,1,
1073 8769,1,
1074 8772,1,
1075 8775,1,
1076 8777,1,
1077 8800,1,
1078 8802,1,
1079 8813,5,
1080 8820,2,
1081 8824,2,
1082 8832,2,
1083 8836,2,
1084 8840,2,
1085 8876,4,
1086 8928,4,
1087 8938,4,
1088 9001,2,
1089 10972,1,
1090 12364,1,
1091 12366,1,
1092 12368,1,
1093 12370,1,
1094 12372,1,
1095 12374,1,
1096 12376,1,
1097 12378,1,
1098 12380,1,
1099 12382,1,
1100 12384,1,
1101 12386,1,
1102 12389,1,
1103 12391,1,
1104 12393,1,
1105 12400,2,
1106 12403,2,
1107 12406,2,
1108 12409,2,
1109 12412,2,
1110 12436,1,
1111 12446,1,
1112 12460,1,
1113 12462,1,
1114 12464,1,
1115 12466,1,
1116 12468,1,
1117 12470,1,
1118 12472,1,
1119 12474,1,
1120 12476,1,
1121 12478,1,
1122 12480,1,
1123 12482,1,
1124 12485,1,
1125 12487,1,
1126 12489,1,
1127 12496,2,
1128 12499,2,
1129 12502,2,
1130 12505,2,
1131 12508,2,
1132 12532,1,
1133 12535,4,
1134 12542,1,
1135 44032,11172,
1136 63744,270,
1137 64016,1,
1138 64018,1,
1139 64021,10,
1140 64032,1,
1141 64034,1,
1142 64037,2,
1143 64042,4,
1144 64048,59,
1145 64112,106,
1146 64285,1,
1147 64287,1,
1148 64298,13,
1149 64312,5,
1150 64318,1,
1151 64320,2,
1152 64323,2
1153 ];
1154 
1156 880,4,
1157 886,4,
1158 895,5,
1159 907,1,
1160 909,1,
1161 930,1,
1162 975,1,
1163 1159,1,
1164 1300,29,
1165 1367,2,
1166 1376,1,
1167 1416,1,
1168 1419,6,
1169 1480,8,
1170 1515,5,
1171 1525,11,
1172 1540,7,
1173 1558,5,
1174 1564,2,
1175 1568,1,
1176 1595,5,
1177 1631,1,
1178 1806,1,
1179 1867,2,
1180 1902,18,
1181 1970,14,
1182 2043,262,
1183 2362,2,
1184 2382,2,
1185 2389,3,
1186 2417,10,
1187 2432,1,
1188 2436,1,
1189 2445,2,
1190 2449,2,
1191 2473,1,
1192 2481,1,
1193 2483,3,
1194 2490,2,
1195 2501,2,
1196 2505,2,
1197 2511,8,
1198 2520,4,
1199 2526,1,
1200 2532,2,
1201 2555,6,
1202 2564,1,
1203 2571,4,
1204 2577,2,
1205 2601,1,
1206 2609,1,
1207 2612,1,
1208 2615,1,
1209 2618,2,
1210 2621,1,
1211 2627,4,
1212 2633,2,
1213 2638,11,
1214 2653,1,
1215 2655,7,
1216 2677,12,
1217 2692,1,
1218 2702,1,
1219 2706,1,
1220 2729,1,
1221 2737,1,
1222 2740,1,
1223 2746,2,
1224 2758,1,
1225 2762,1,
1226 2766,2,
1227 2769,15,
1228 2788,2,
1229 2800,1,
1230 2802,15,
1231 2820,1,
1232 2829,2,
1233 2833,2,
1234 2857,1,
1235 2865,1,
1236 2868,1,
1237 2874,2,
1238 2884,3,
1239 2889,2,
1240 2894,8,
1241 2904,4,
1242 2910,1,
1243 2914,4,
1244 2930,16,
1245 2948,1,
1246 2955,3,
1247 2961,1,
1248 2966,3,
1249 2971,1,
1250 2973,1,
1251 2976,3,
1252 2981,3,
1253 2987,3,
1254 3002,4,
1255 3011,3,
1256 3017,1,
1257 3022,9,
1258 3032,14,
1259 3067,6,
1260 3076,1,
1261 3085,1,
1262 3089,1,
1263 3113,1,
1264 3124,1,
1265 3130,4,
1266 3141,1,
1267 3145,1,
1268 3150,7,
1269 3159,9,
1270 3170,4,
1271 3184,18,
1272 3204,1,
1273 3213,1,
1274 3217,1,
1275 3241,1,
1276 3252,1,
1277 3258,2,
1278 3269,1,
1279 3273,1,
1280 3278,7,
1281 3287,7,
1282 3295,1,
1283 3300,2,
1284 3312,1,
1285 3315,15,
1286 3332,1,
1287 3341,1,
1288 3345,1,
1289 3369,1,
1290 3386,4,
1291 3396,2,
1292 3401,1,
1293 3406,9,
1294 3416,8,
1295 3426,4,
1296 3440,18,
1297 3460,1,
1298 3479,3,
1299 3506,1,
1300 3516,1,
1301 3518,2,
1302 3527,3,
1303 3531,4,
1304 3541,1,
1305 3543,1,
1306 3552,18,
1307 3573,12,
1308 3643,4,
1309 3676,37,
1310 3715,1,
1311 3717,2,
1312 3721,1,
1313 3723,2,
1314 3726,6,
1315 3736,1,
1316 3744,1,
1317 3748,1,
1318 3750,1,
1319 3752,2,
1320 3756,1,
1321 3770,1,
1322 3774,2,
1323 3781,1,
1324 3783,1,
1325 3790,2,
1326 3802,2,
1327 3806,34,
1328 3912,1,
1329 3947,6,
1330 3980,4,
1331 3992,1,
1332 4029,1,
1333 4045,2,
1334 4050,46,
1335 4130,1,
1336 4136,1,
1337 4139,1,
1338 4147,3,
1339 4154,6,
1340 4186,70,
1341 4294,10,
1342 4349,3,
1343 4442,5,
1344 4515,5,
1345 4602,6,
1346 4681,1,
1347 4686,2,
1348 4695,1,
1349 4697,1,
1350 4702,2,
1351 4745,1,
1352 4750,2,
1353 4785,1,
1354 4790,2,
1355 4799,1,
1356 4801,1,
1357 4806,2,
1358 4823,1,
1359 4881,1,
1360 4886,2,
1361 4955,4,
1362 4989,3,
1363 5018,6,
1364 5109,12,
1365 5751,9,
1366 5789,3,
1367 5873,15,
1368 5901,1,
1369 5909,11,
1370 5943,9,
1371 5972,12,
1372 5997,1,
1373 6001,1,
1374 6004,12,
1375 6110,2,
1376 6122,6,
1377 6138,6,
1378 6159,1,
1379 6170,6,
1380 6264,8,
1381 6314,86,
1382 6429,3,
1383 6444,4,
1384 6460,4,
1385 6465,3,
1386 6510,2,
1387 6517,11,
1388 6570,6,
1389 6602,6,
1390 6618,4,
1391 6684,2,
1392 6688,224,
1393 6988,4,
1394 7037,387,
1395 7627,51,
1396 7836,4,
1397 7930,6,
1398 7958,2,
1399 7966,2,
1400 8006,2,
1401 8014,2,
1402 8024,1,
1403 8026,1,
1404 8028,1,
1405 8030,1,
1406 8062,2,
1407 8117,1,
1408 8133,1,
1409 8148,2,
1410 8156,1,
1411 8176,2,
1412 8181,1,
1413 8191,1,
1414 8292,6,
1415 8306,2,
1416 8335,1,
1417 8341,11,
1418 8374,26,
1419 8432,16,
1420 8527,4,
1421 8581,11,
1422 9192,24,
1423 9255,25,
1424 9291,21,
1425 9885,3,
1426 9907,78,
1427 9989,1,
1428 9994,2,
1429 10024,1,
1430 10060,1,
1431 10062,1,
1432 10067,3,
1433 10071,1,
1434 10079,2,
1435 10133,3,
1436 10160,1,
1437 10175,1,
1438 10187,5,
1439 10220,4,
1440 11035,5,
1441 11044,220,
1442 11311,1,
1443 11359,1,
1444 11373,7,
1445 11384,8,
1446 11499,14,
1447 11558,10,
1448 11622,9,
1449 11632,16,
1450 11671,9,
1451 11687,1,
1452 11695,1,
1453 11703,1,
1454 11711,1,
1455 11719,1,
1456 11727,1,
1457 11735,1,
1458 11743,33,
1459 11800,4,
1460 11806,98,
1461 11930,1,
1462 12020,12,
1463 12246,26,
1464 12284,4,
1465 12352,1,
1466 12439,2,
1467 12544,5,
1468 12589,4,
1469 12687,1,
1470 12728,8,
1471 12752,32,
1472 12831,1,
1473 12868,12,
1474 13055,1,
1475 19894,10,
1476 40892,68,
1477 42125,3,
1478 42183,569,
1479 42779,5,
1480 42786,222,
1481 43052,20,
1482 43128,904,
1483 55204,92,
1484 64046,2,
1485 64107,5,
1486 64218,38,
1487 64263,12,
1488 64280,5,
1489 64311,1,
1490 64317,1,
1491 64319,1,
1492 64322,1,
1493 64325,1,
1494 64434,33,
1495 64832,16,
1496 64912,2,
1497 64968,40,
1498 65022,2,
1499 65050,6,
1500 65060,12,
1501 65107,1,
1502 65127,1,
1503 65132,4,
1504 65141,1,
1505 65277,2,
1506 65280,1,
1507 65471,3,
1508 65480,2,
1509 65488,2,
1510 65496,2,
1511 65501,3,
1512 65511,1,
1513 65519,10
1514 ];
1515 
1517 65,26,
1518 97,26,
1519 170,1,
1520 181,1,
1521 186,1,
1522 192,23,
1523 216,31,
1524 248,458,
1525 710,12,
1526 736,5,
1527 750,1,
1528 768,112,
1529 890,4,
1530 902,1,
1531 904,3,
1532 908,1,
1533 910,20,
1534 931,44,
1535 976,38,
1536 1015,139,
1537 1155,4,
1538 1160,140,
1539 1329,38,
1540 1369,1,
1541 1377,39,
1542 1425,45,
1543 1471,1,
1544 1473,2,
1545 1476,2,
1546 1479,1,
1547 1488,27,
1548 1520,3,
1549 1552,6,
1550 1569,26,
1551 1600,31,
1552 1646,102,
1553 1749,8,
1554 1758,11,
1555 1770,6,
1556 1786,3,
1557 1791,1,
1558 1808,59,
1559 1869,33,
1560 1920,50,
1561 1994,44,
1562 2042,1,
1563 2305,57,
1564 2364,18,
1565 2384,5,
1566 2392,12,
1567 2427,5,
1568 2433,3,
1569 2437,8,
1570 2447,2,
1571 2451,22,
1572 2474,7,
1573 2482,1,
1574 2486,4,
1575 2492,9,
1576 2503,2,
1577 2507,4,
1578 2519,1,
1579 2524,2,
1580 2527,5,
1581 2544,2,
1582 2561,3,
1583 2565,6,
1584 2575,2,
1585 2579,22,
1586 2602,7,
1587 2610,2,
1588 2613,2,
1589 2616,2,
1590 2620,1,
1591 2622,5,
1592 2631,2,
1593 2635,3,
1594 2649,4,
1595 2654,1,
1596 2672,5,
1597 2689,3,
1598 2693,9,
1599 2703,3,
1600 2707,22,
1601 2730,7,
1602 2738,2,
1603 2741,5,
1604 2748,10,
1605 2759,3,
1606 2763,3,
1607 2768,1,
1608 2784,4,
1609 2817,3,
1610 2821,8,
1611 2831,2,
1612 2835,22,
1613 2858,7,
1614 2866,2,
1615 2869,5,
1616 2876,8,
1617 2887,2,
1618 2891,3,
1619 2902,2,
1620 2908,2,
1621 2911,3,
1622 2929,1,
1623 2946,2,
1624 2949,6,
1625 2958,3,
1626 2962,4,
1627 2969,2,
1628 2972,1,
1629 2974,2,
1630 2979,2,
1631 2984,3,
1632 2990,12,
1633 3006,5,
1634 3014,3,
1635 3018,4,
1636 3031,1,
1637 3073,3,
1638 3077,8,
1639 3086,3,
1640 3090,23,
1641 3114,10,
1642 3125,5,
1643 3134,7,
1644 3142,3,
1645 3146,4,
1646 3157,2,
1647 3168,2,
1648 3202,2,
1649 3205,8,
1650 3214,3,
1651 3218,23,
1652 3242,10,
1653 3253,5,
1654 3260,9,
1655 3270,3,
1656 3274,4,
1657 3285,2,
1658 3294,1,
1659 3296,4,
1660 3330,2,
1661 3333,8,
1662 3342,3,
1663 3346,23,
1664 3370,16,
1665 3390,6,
1666 3398,3,
1667 3402,4,
1668 3415,1,
1669 3424,2,
1670 3458,2,
1671 3461,18,
1672 3482,24,
1673 3507,9,
1674 3517,1,
1675 3520,7,
1676 3530,1,
1677 3535,6,
1678 3542,1,
1679 3544,8,
1680 3570,2,
1681 3585,58,
1682 3648,15,
1683 3713,2,
1684 3716,1,
1685 3719,2,
1686 3722,1,
1687 3725,1,
1688 3732,4,
1689 3737,7,
1690 3745,3,
1691 3749,1,
1692 3751,1,
1693 3754,2,
1694 3757,13,
1695 3771,3,
1696 3776,5,
1697 3782,1,
1698 3784,6,
1699 3804,2,
1700 3840,1,
1701 3864,2,
1702 3893,1,
1703 3895,1,
1704 3897,1,
1705 3902,10,
1706 3913,34,
1707 3953,20,
1708 3974,6,
1709 3984,8,
1710 3993,36,
1711 4038,1,
1712 4096,34,
1713 4131,5,
1714 4137,2,
1715 4140,7,
1716 4150,4,
1717 4176,10,
1718 4256,38,
1719 4304,43,
1720 4348,1,
1721 4352,90,
1722 4447,68,
1723 4520,82,
1724 4608,73,
1725 4682,4,
1726 4688,7,
1727 4696,1,
1728 4698,4,
1729 4704,41,
1730 4746,4,
1731 4752,33,
1732 4786,4,
1733 4792,7,
1734 4800,1,
1735 4802,4,
1736 4808,15,
1737 4824,57,
1738 4882,4,
1739 4888,67,
1740 4959,1,
1741 4992,16,
1742 5024,85,
1743 5121,620,
1744 5743,8,
1745 5761,26,
1746 5792,75,
1747 5888,13,
1748 5902,7,
1749 5920,21,
1750 5952,20,
1751 5984,13,
1752 5998,3,
1753 6002,2,
1754 6016,52,
1755 6070,30,
1756 6103,1,
1757 6108,2,
1758 6155,3,
1759 6176,88,
1760 6272,42,
1761 6400,29,
1762 6432,12,
1763 6448,12,
1764 6480,30,
1765 6512,5,
1766 6528,42,
1767 6576,26,
1768 6656,28,
1769 6912,76,
1770 7019,9,
1771 7424,203,
1772 7678,158,
1773 7840,90,
1774 7936,22,
1775 7960,6,
1776 7968,38,
1777 8008,6,
1778 8016,8,
1779 8025,1,
1780 8027,1,
1781 8029,1,
1782 8031,31,
1783 8064,53,
1784 8118,7,
1785 8126,1,
1786 8130,3,
1787 8134,7,
1788 8144,4,
1789 8150,6,
1790 8160,13,
1791 8178,3,
1792 8182,7,
1793 8305,1,
1794 8319,1,
1795 8336,5,
1796 8400,32,
1797 8450,1,
1798 8455,1,
1799 8458,10,
1800 8469,1,
1801 8473,5,
1802 8484,1,
1803 8486,1,
1804 8488,1,
1805 8490,4,
1806 8495,11,
1807 8508,4,
1808 8517,5,
1809 8526,1,
1810 8579,2,
1811 11264,47,
1812 11312,47,
1813 11360,13,
1814 11380,4,
1815 11392,101,
1816 11520,38,
1817 11568,54,
1818 11631,1,
1819 11648,23,
1820 11680,7,
1821 11688,7,
1822 11696,7,
1823 11704,7,
1824 11712,7,
1825 11720,7,
1826 11728,7,
1827 11736,7,
1828 12293,2,
1829 12330,6,
1830 12337,5,
1831 12347,2,
1832 12353,86,
1833 12441,2,
1834 12445,3,
1835 12449,90,
1836 12540,4,
1837 12549,40,
1838 12593,94,
1839 12704,24,
1840 12784,16,
1841 13312,6582,
1842 19968,20924,
1843 40960,1165,
1844 42775,4,
1845 43008,40,
1846 43072,52,
1847 44032,11172,
1848 63744,302,
1849 64048,59,
1850 64112,106,
1851 64256,7,
1852 64275,5,
1853 64285,12,
1854 64298,13,
1855 64312,5,
1856 64318,1,
1857 64320,2,
1858 64323,2,
1859 64326,108,
1860 64467,363,
1861 64848,64,
1862 64914,54,
1863 65008,12,
1864 65024,16,
1865 65056,4,
1866 65136,5,
1867 65142,135,
1868 65313,26,
1869 65345,26,
1870 65382,89,
1871 65474,6,
1872 65482,6,
1873 65490,6
1874 ];
1875 
1877 97,26,
1878 170,1,
1879 181,1,
1880 186,1,
1881 223,24,
1882 248,8,
1883 257,1,
1884 259,1,
1885 261,1,
1886 263,1,
1887 265,1,
1888 267,1,
1889 269,1,
1890 271,1,
1891 273,1,
1892 275,1,
1893 277,1,
1894 279,1,
1895 281,1,
1896 283,1,
1897 285,1,
1898 287,1,
1899 289,1,
1900 291,1,
1901 293,1,
1902 295,1,
1903 297,1,
1904 299,1,
1905 301,1,
1906 303,1,
1907 305,1,
1908 307,1,
1909 309,1,
1910 311,2,
1911 314,1,
1912 316,1,
1913 318,1,
1914 320,1,
1915 322,1,
1916 324,1,
1917 326,1,
1918 328,2,
1919 331,1,
1920 333,1,
1921 335,1,
1922 337,1,
1923 339,1,
1924 341,1,
1925 343,1,
1926 345,1,
1927 347,1,
1928 349,1,
1929 351,1,
1930 353,1,
1931 355,1,
1932 357,1,
1933 359,1,
1934 361,1,
1935 363,1,
1936 365,1,
1937 367,1,
1938 369,1,
1939 371,1,
1940 373,1,
1941 375,1,
1942 378,1,
1943 380,1,
1944 382,3,
1945 387,1,
1946 389,1,
1947 392,1,
1948 396,2,
1949 402,1,
1950 405,1,
1951 409,3,
1952 414,1,
1953 417,1,
1954 419,1,
1955 421,1,
1956 424,1,
1957 426,2,
1958 429,1,
1959 432,1,
1960 436,1,
1961 438,1,
1962 441,2,
1963 445,3,
1964 454,1,
1965 457,1,
1966 460,1,
1967 462,1,
1968 464,1,
1969 466,1,
1970 468,1,
1971 470,1,
1972 472,1,
1973 474,1,
1974 476,2,
1975 479,1,
1976 481,1,
1977 483,1,
1978 485,1,
1979 487,1,
1980 489,1,
1981 491,1,
1982 493,1,
1983 495,2,
1984 499,1,
1985 501,1,
1986 505,1,
1987 507,1,
1988 509,1,
1989 511,1,
1990 513,1,
1991 515,1,
1992 517,1,
1993 519,1,
1994 521,1,
1995 523,1,
1996 525,1,
1997 527,1,
1998 529,1,
1999 531,1,
2000 533,1,
2001 535,1,
2002 537,1,
2003 539,1,
2004 541,1,
2005 543,1,
2006 545,1,
2007 547,1,
2008 549,1,
2009 551,1,
2010 553,1,
2011 555,1,
2012 557,1,
2013 559,1,
2014 561,1,
2015 563,7,
2016 572,1,
2017 575,2,
2018 578,1,
2019 583,1,
2020 585,1,
2021 587,1,
2022 589,1,
2023 591,69,
2024 661,27,
2025 891,3,
2026 912,1,
2027 940,35,
2028 976,2,
2029 981,3,
2030 985,1,
2031 987,1,
2032 989,1,
2033 991,1,
2034 993,1,
2035 995,1,
2036 997,1,
2037 999,1,
2038 1001,1,
2039 1003,1,
2040 1005,1,
2041 1007,5,
2042 1013,1,
2043 1016,1,
2044 1019,2,
2045 1072,48,
2046 1121,1,
2047 1123,1,
2048 1125,1,
2049 1127,1,
2050 1129,1,
2051 1131,1,
2052 1133,1,
2053 1135,1,
2054 1137,1,
2055 1139,1,
2056 1141,1,
2057 1143,1,
2058 1145,1,
2059 1147,1,
2060 1149,1,
2061 1151,1,
2062 1153,1,
2063 1163,1,
2064 1165,1,
2065 1167,1,
2066 1169,1,
2067 1171,1,
2068 1173,1,
2069 1175,1,
2070 1177,1,
2071 1179,1,
2072 1181,1,
2073 1183,1,
2074 1185,1,
2075 1187,1,
2076 1189,1,
2077 1191,1,
2078 1193,1,
2079 1195,1,
2080 1197,1,
2081 1199,1,
2082 1201,1,
2083 1203,1,
2084 1205,1,
2085 1207,1,
2086 1209,1,
2087 1211,1,
2088 1213,1,
2089 1215,1,
2090 1218,1,
2091 1220,1,
2092 1222,1,
2093 1224,1,
2094 1226,1,
2095 1228,1,
2096 1230,2,
2097 1233,1,
2098 1235,1,
2099 1237,1,
2100 1239,1,
2101 1241,1,
2102 1243,1,
2103 1245,1,
2104 1247,1,
2105 1249,1,
2106 1251,1,
2107 1253,1,
2108 1255,1,
2109 1257,1,
2110 1259,1,
2111 1261,1,
2112 1263,1,
2113 1265,1,
2114 1267,1,
2115 1269,1,
2116 1271,1,
2117 1273,1,
2118 1275,1,
2119 1277,1,
2120 1279,1,
2121 1281,1,
2122 1283,1,
2123 1285,1,
2124 1287,1,
2125 1289,1,
2126 1291,1,
2127 1293,1,
2128 1295,1,
2129 1297,1,
2130 1299,1,
2131 1377,39,
2132 7424,44,
2133 7522,22,
2134 7545,34,
2135 7681,1,
2136 7683,1,
2137 7685,1,
2138 7687,1,
2139 7689,1,
2140 7691,1,
2141 7693,1,
2142 7695,1,
2143 7697,1,
2144 7699,1,
2145 7701,1,
2146 7703,1,
2147 7705,1,
2148 7707,1,
2149 7709,1,
2150 7711,1,
2151 7713,1,
2152 7715,1,
2153 7717,1,
2154 7719,1,
2155 7721,1,
2156 7723,1,
2157 7725,1,
2158 7727,1,
2159 7729,1,
2160 7731,1,
2161 7733,1,
2162 7735,1,
2163 7737,1,
2164 7739,1,
2165 7741,1,
2166 7743,1,
2167 7745,1,
2168 7747,1,
2169 7749,1,
2170 7751,1,
2171 7753,1,
2172 7755,1,
2173 7757,1,
2174 7759,1,
2175 7761,1,
2176 7763,1,
2177 7765,1,
2178 7767,1,
2179 7769,1,
2180 7771,1,
2181 7773,1,
2182 7775,1,
2183 7777,1,
2184 7779,1,
2185 7781,1,
2186 7783,1,
2187 7785,1,
2188 7787,1,
2189 7789,1,
2190 7791,1,
2191 7793,1,
2192 7795,1,
2193 7797,1,
2194 7799,1,
2195 7801,1,
2196 7803,1,
2197 7805,1,
2198 7807,1,
2199 7809,1,
2200 7811,1,
2201 7813,1,
2202 7815,1,
2203 7817,1,
2204 7819,1,
2205 7821,1,
2206 7823,1,
2207 7825,1,
2208 7827,1,
2209 7829,7,
2210 7841,1,
2211 7843,1,
2212 7845,1,
2213 7847,1,
2214 7849,1,
2215 7851,1,
2216 7853,1,
2217 7855,1,
2218 7857,1,
2219 7859,1,
2220 7861,1,
2221 7863,1,
2222 7865,1,
2223 7867,1,
2224 7869,1,
2225 7871,1,
2226 7873,1,
2227 7875,1,
2228 7877,1,
2229 7879,1,
2230 7881,1,
2231 7883,1,
2232 7885,1,
2233 7887,1,
2234 7889,1,
2235 7891,1,
2236 7893,1,
2237 7895,1,
2238 7897,1,
2239 7899,1,
2240 7901,1,
2241 7903,1,
2242 7905,1,
2243 7907,1,
2244 7909,1,
2245 7911,1,
2246 7913,1,
2247 7915,1,
2248 7917,1,
2249 7919,1,
2250 7921,1,
2251 7923,1,
2252 7925,1,
2253 7927,1,
2254 7929,1,
2255 7936,8,
2256 7952,6,
2257 7968,8,
2258 7984,8,
2259 8000,6,
2260 8016,8,
2261 8032,8,
2262 8048,14,
2263 8064,8,
2264 8080,8,
2265 8096,8,
2266 8112,5,
2267 8118,2,
2268 8126,1,
2269 8130,3,
2270 8134,2,
2271 8144,4,
2272 8150,2,
2273 8160,8,
2274 8178,3,
2275 8182,2,
2276 8305,1,
2277 8319,1,
2278 8458,1,
2279 8462,2,
2280 8467,1,
2281 8495,1,
2282 8500,1,
2283 8505,1,
2284 8508,2,
2285 8518,4,
2286 8526,1,
2287 8580,1,
2288 11312,47,
2289 11361,1,
2290 11365,2,
2291 11368,1,
2292 11370,1,
2293 11372,1,
2294 11380,1,
2295 11382,2,
2296 11393,1,
2297 11395,1,
2298 11397,1,
2299 11399,1,
2300 11401,1,
2301 11403,1,
2302 11405,1,
2303 11407,1,
2304 11409,1,
2305 11411,1,
2306 11413,1,
2307 11415,1,
2308 11417,1,
2309 11419,1,
2310 11421,1,
2311 11423,1,
2312 11425,1,
2313 11427,1,
2314 11429,1,
2315 11431,1,
2316 11433,1,
2317 11435,1,
2318 11437,1,
2319 11439,1,
2320 11441,1,
2321 11443,1,
2322 11445,1,
2323 11447,1,
2324 11449,1,
2325 11451,1,
2326 11453,1,
2327 11455,1,
2328 11457,1,
2329 11459,1,
2330 11461,1,
2331 11463,1,
2332 11465,1,
2333 11467,1,
2334 11469,1,
2335 11471,1,
2336 11473,1,
2337 11475,1,
2338 11477,1,
2339 11479,1,
2340 11481,1,
2341 11483,1,
2342 11485,1,
2343 11487,1,
2344 11489,1,
2345 11491,2,
2346 11520,38,
2347 64256,7,
2348 64275,5
2349 ];
2350 
2352 768,112,
2353 1155,4,
2354 1160,2,
2355 1425,45,
2356 1471,1,
2357 1473,2,
2358 1476,2,
2359 1479,1,
2360 1552,6,
2361 1611,20,
2362 1648,1,
2363 1750,7,
2364 1758,7,
2365 1767,2,
2366 1770,4,
2367 1809,1,
2368 1840,27,
2369 1958,11,
2370 2027,9,
2371 2305,3,
2372 2364,1,
2373 2366,16,
2374 2385,4,
2375 2402,2,
2376 2433,3,
2377 2492,1,
2378 2494,7,
2379 2503,2,
2380 2507,3,
2381 2519,1,
2382 2530,2,
2383 2561,3,
2384 2620,1,
2385 2622,5,
2386 2631,2,
2387 2635,3,
2388 2672,2,
2389 2689,3,
2390 2748,1,
2391 2750,8,
2392 2759,3,
2393 2763,3,
2394 2786,2,
2395 2817,3,
2396 2876,1,
2397 2878,6,
2398 2887,2,
2399 2891,3,
2400 2902,2,
2401 2946,1,
2402 3006,5,
2403 3014,3,
2404 3018,4,
2405 3031,1,
2406 3073,3,
2407 3134,7,
2408 3142,3,
2409 3146,4,
2410 3157,2,
2411 3202,2,
2412 3260,1,
2413 3262,7,
2414 3270,3,
2415 3274,4,
2416 3285,2,
2417 3298,2,
2418 3330,2,
2419 3390,6,
2420 3398,3,
2421 3402,4,
2422 3415,1,
2423 3458,2,
2424 3530,1,
2425 3535,6,
2426 3542,1,
2427 3544,8,
2428 3570,2,
2429 3633,1,
2430 3636,7,
2431 3655,8,
2432 3761,1,
2433 3764,6,
2434 3771,2,
2435 3784,6,
2436 3864,2,
2437 3893,1,
2438 3895,1,
2439 3897,1,
2440 3902,2,
2441 3953,20,
2442 3974,2,
2443 3984,8,
2444 3993,36,
2445 4038,1,
2446 4140,7,
2447 4150,4,
2448 4182,4,
2449 4959,1,
2450 5906,3,
2451 5938,3,
2452 5970,2,
2453 6002,2,
2454 6070,30,
2455 6109,1,
2456 6155,3,
2457 6313,1,
2458 6432,12,
2459 6448,12,
2460 6576,17,
2461 6600,2,
2462 6679,5,
2463 6912,5,
2464 6964,17,
2465 7019,9,
2466 7616,11,
2467 7678,2,
2468 8400,32,
2469 12330,6,
2470 12441,2,
2471 43010,1,
2472 43014,1,
2473 43019,1,
2474 43043,5,
2475 64286,1,
2476 65024,16
2477 ];
2478 
2480 33,3,
2481 37,6,
2482 44,4,
2483 58,2,
2484 63,2,
2485 91,3,
2486 95,1,
2487 123,1,
2488 125,1,
2489 161,1,
2490 171,1,
2491 183,1,
2492 187,1,
2493 191,1,
2494 894,1,
2495 903,1,
2496 1370,6,
2497 1417,2,
2498 1470,1,
2499 1472,1,
2500 1475,1,
2501 1478,1,
2502 1523,2,
2503 1548,2,
2504 1563,1,
2505 1566,2,
2506 1642,4,
2507 1748,1,
2508 1792,14,
2509 2039,3,
2510 2404,2,
2511 2416,1,
2512 3572,1,
2513 3663,1,
2514 3674,2,
2515 3844,15,
2516 3898,4,
2517 3973,1,
2518 4048,2,
2519 4170,6,
2520 4347,1,
2521 4961,8,
2522 5741,2,
2523 5787,2,
2524 5867,3,
2525 5941,2,
2526 6100,3,
2527 6104,3,
2528 6144,11,
2529 6468,2,
2530 6622,2,
2531 6686,2,
2532 7002,7,
2533 8208,24,
2534 8240,20,
2535 8261,13,
2536 8275,12,
2537 8317,2,
2538 8333,2,
2539 9001,2,
2540 10088,14,
2541 10181,2,
2542 10214,6,
2543 10627,22,
2544 10712,4,
2545 10748,2,
2546 11513,4,
2547 11518,2,
2548 11776,24,
2549 11804,2,
2550 12289,3,
2551 12296,10,
2552 12308,12,
2553 12336,1,
2554 12349,1,
2555 12448,1,
2556 12539,1,
2557 43124,4,
2558 64830,2,
2559 65040,10,
2560 65072,35,
2561 65108,14,
2562 65123,1,
2563 65128,1,
2564 65130,2,
2565 65281,3,
2566 65285,6,
2567 65292,4,
2568 65306,2,
2569 65311,2,
2570 65339,3,
2571 65343,1,
2572 65371,1,
2573 65373,1
2574 ];
2575 
2577 65,26,
2578 192,23,
2579 216,7,
2580 256,1,
2581 258,1,
2582 260,1,
2583 262,1,
2584 264,1,
2585 266,1,
2586 268,1,
2587 270,1,
2588 272,1,
2589 274,1,
2590 276,1,
2591 278,1,
2592 280,1,
2593 282,1,
2594 284,1,
2595 286,1,
2596 288,1,
2597 290,1,
2598 292,1,
2599 294,1,
2600 296,1,
2601 298,1,
2602 300,1,
2603 302,1,
2604 304,1,
2605 306,1,
2606 308,1,
2607 310,1,
2608 313,1,
2609 315,1,
2610 317,1,
2611 319,1,
2612 321,1,
2613 323,1,
2614 325,1,
2615 327,1,
2616 330,1,
2617 332,1,
2618 334,1,
2619 336,1,
2620 338,1,
2621 340,1,
2622 342,1,
2623 344,1,
2624 346,1,
2625 348,1,
2626 350,1,
2627 352,1,
2628 354,1,
2629 356,1,
2630 358,1,
2631 360,1,
2632 362,1,
2633 364,1,
2634 366,1,
2635 368,1,
2636 370,1,
2637 372,1,
2638 374,1,
2639 376,2,
2640 379,1,
2641 381,1,
2642 385,2,
2643 388,1,
2644 390,2,
2645 393,3,
2646 398,4,
2647 403,2,
2648 406,3,
2649 412,2,
2650 415,2,
2651 418,1,
2652 420,1,
2653 422,2,
2654 425,1,
2655 428,1,
2656 430,2,
2657 433,3,
2658 437,1,
2659 439,2,
2660 444,1,
2661 452,2,
2662 455,2,
2663 458,2,
2664 461,1,
2665 463,1,
2666 465,1,
2667 467,1,
2668 469,1,
2669 471,1,
2670 473,1,
2671 475,1,
2672 478,1,
2673 480,1,
2674 482,1,
2675 484,1,
2676 486,1,
2677 488,1,
2678 490,1,
2679 492,1,
2680 494,1,
2681 497,2,
2682 500,1,
2683 502,3,
2684 506,1,
2685 508,1,
2686 510,1,
2687 512,1,
2688 514,1,
2689 516,1,
2690 518,1,
2691 520,1,
2692 522,1,
2693 524,1,
2694 526,1,
2695 528,1,
2696 530,1,
2697 532,1,
2698 534,1,
2699 536,1,
2700 538,1,
2701 540,1,
2702 542,1,
2703 544,1,
2704 546,1,
2705 548,1,
2706 550,1,
2707 552,1,
2708 554,1,
2709 556,1,
2710 558,1,
2711 560,1,
2712 562,1,
2713 570,2,
2714 573,2,
2715 577,1,
2716 579,4,
2717 584,1,
2718 586,1,
2719 588,1,
2720 590,1,
2721 902,1,
2722 904,3,
2723 908,1,
2724 910,2,
2725 913,17,
2726 931,9,
2727 978,3,
2728 984,1,
2729 986,1,
2730 988,1,
2731 990,1,
2732 992,1,
2733 994,1,
2734 996,1,
2735 998,1,
2736 1000,1,
2737 1002,1,
2738 1004,1,
2739 1006,1,
2740 1012,1,
2741 1015,1,
2742 1017,2,
2743 1021,51,
2744 1120,1,
2745 1122,1,
2746 1124,1,
2747 1126,1,
2748 1128,1,
2749 1130,1,
2750 1132,1,
2751 1134,1,
2752 1136,1,
2753 1138,1,
2754 1140,1,
2755 1142,1,
2756 1144,1,
2757 1146,1,
2758 1148,1,
2759 1150,1,
2760 1152,1,
2761 1162,1,
2762 1164,1,
2763 1166,1,
2764 1168,1,
2765 1170,1,
2766 1172,1,
2767 1174,1,
2768 1176,1,
2769 1178,1,
2770 1180,1,
2771 1182,1,
2772 1184,1,
2773 1186,1,
2774 1188,1,
2775 1190,1,
2776 1192,1,
2777 1194,1,
2778 1196,1,
2779 1198,1,
2780 1200,1,
2781 1202,1,
2782 1204,1,
2783 1206,1,
2784 1208,1,
2785 1210,1,
2786 1212,1,
2787 1214,1,
2788 1216,2,
2789 1219,1,
2790 1221,1,
2791 1223,1,
2792 1225,1,
2793 1227,1,
2794 1229,1,
2795 1232,1,
2796 1234,1,
2797 1236,1,
2798 1238,1,
2799 1240,1,
2800 1242,1,
2801 1244,1,
2802 1246,1,
2803 1248,1,
2804 1250,1,
2805 1252,1,
2806 1254,1,
2807 1256,1,
2808 1258,1,
2809 1260,1,
2810 1262,1,
2811 1264,1,
2812 1266,1,
2813 1268,1,
2814 1270,1,
2815 1272,1,
2816 1274,1,
2817 1276,1,
2818 1278,1,
2819 1280,1,
2820 1282,1,
2821 1284,1,
2822 1286,1,
2823 1288,1,
2824 1290,1,
2825 1292,1,
2826 1294,1,
2827 1296,1,
2828 1298,1,
2829 1329,38,
2830 4256,38,
2831 7680,1,
2832 7682,1,
2833 7684,1,
2834 7686,1,
2835 7688,1,
2836 7690,1,
2837 7692,1,
2838 7694,1,
2839 7696,1,
2840 7698,1,
2841 7700,1,
2842 7702,1,
2843 7704,1,
2844 7706,1,
2845 7708,1,
2846 7710,1,
2847 7712,1,
2848 7714,1,
2849 7716,1,
2850 7718,1,
2851 7720,1,
2852 7722,1,
2853 7724,1,
2854 7726,1,
2855 7728,1,
2856 7730,1,
2857 7732,1,
2858 7734,1,
2859 7736,1,
2860 7738,1,
2861 7740,1,
2862 7742,1,
2863 7744,1,
2864 7746,1,
2865 7748,1,
2866 7750,1,
2867 7752,1,
2868 7754,1,
2869 7756,1,
2870 7758,1,
2871 7760,1,
2872 7762,1,
2873 7764,1,
2874 7766,1,
2875 7768,1,
2876 7770,1,
2877 7772,1,
2878 7774,1,
2879 7776,1,
2880 7778,1,
2881 7780,1,
2882 7782,1,
2883 7784,1,
2884 7786,1,
2885 7788,1,
2886 7790,1,
2887 7792,1,
2888 7794,1,
2889 7796,1,
2890 7798,1,
2891 7800,1,
2892 7802,1,
2893 7804,1,
2894 7806,1,
2895 7808,1,
2896 7810,1,
2897 7812,1,
2898 7814,1,
2899 7816,1,
2900 7818,1,
2901 7820,1,
2902 7822,1,
2903 7824,1,
2904 7826,1,
2905 7828,1,
2906 7840,1,
2907 7842,1,
2908 7844,1,
2909 7846,1,
2910 7848,1,
2911 7850,1,
2912 7852,1,
2913 7854,1,
2914 7856,1,
2915 7858,1,
2916 7860,1,
2917 7862,1,
2918 7864,1,
2919 7866,1,
2920 7868,1,
2921 7870,1,
2922 7872,1,
2923 7874,1,
2924 7876,1,
2925 7878,1,
2926 7880,1,
2927 7882,1,
2928 7884,1,
2929 7886,1,
2930 7888,1,
2931 7890,1,
2932 7892,1,
2933 7894,1,
2934 7896,1,
2935 7898,1,
2936 7900,1,
2937 7902,1,
2938 7904,1,
2939 7906,1,
2940 7908,1,
2941 7910,1,
2942 7912,1,
2943 7914,1,
2944 7916,1,
2945 7918,1,
2946 7920,1,
2947 7922,1,
2948 7924,1,
2949 7926,1,
2950 7928,1,
2951 7944,8,
2952 7960,6,
2953 7976,8,
2954 7992,8,
2955 8008,6,
2956 8025,1,
2957 8027,1,
2958 8029,1,
2959 8031,1,
2960 8040,8,
2961 8072,8,
2962 8088,8,
2963 8104,8,
2964 8120,5,
2965 8136,5,
2966 8152,4,
2967 8168,5,
2968 8184,5,
2969 8450,1,
2970 8455,1,
2971 8459,3,
2972 8464,3,
2973 8469,1,
2974 8473,5,
2975 8484,1,
2976 8486,1,
2977 8488,1,
2978 8490,4,
2979 8496,4,
2980 8510,2,
2981 8517,1,
2982 8579,1,
2983 11264,47,
2984 11360,1,
2985 11362,3,
2986 11367,1,
2987 11369,1,
2988 11371,1,
2989 11381,1,
2990 11392,1,
2991 11394,1,
2992 11396,1,
2993 11398,1,
2994 11400,1,
2995 11402,1,
2996 11404,1,
2997 11406,1,
2998 11408,1,
2999 11410,1,
3000 11412,1,
3001 11414,1,
3002 11416,1,
3003 11418,1,
3004 11420,1,
3005 11422,1,
3006 11424,1,
3007 11426,1,
3008 11428,1,
3009 11430,1,
3010 11432,1,
3011 11434,1,
3012 11436,1,
3013 11438,1,
3014 11440,1,
3015 11442,1,
3016 11444,1,
3017 11446,1,
3018 11448,1,
3019 11450,1,
3020 11452,1,
3021 11454,1,
3022 11456,1,
3023 11458,1,
3024 11460,1,
3025 11462,1,
3026 11464,1,
3027 11466,1,
3028 11468,1,
3029 11470,1,
3030 11472,1,
3031 11474,1,
3032 11476,1,
3033 11478,1,
3034 11480,1,
3035 11482,1,
3036 11484,1,
3037 11486,1,
3038 11488,1,
3039 11490,1
3040 ];
3041 
3043 9,5,
3044 32,1,
3045 133,1,
3046 160,1,
3047 5760,1,
3048 8192,12,
3049 8232,2,
3050 8239,1,
3051 8287,1
3052 ];
3053 
3055 9,1,
3056 32,1,
3057 160,1,
3058 5760,1,
3059 8192,12,
3060 8239,1,
3061 8287,1
3062 ];
Used to implement exception handling (creating & raising).
Definition: CPException.h:2
id lowercaseLetterCharacterSet()
var isEqual
id uppercaseLetterCharacterSet()
CPString substringWithRange:(CPRange aRange)
Definition: CPString.j:291
id alphanumericCharacterSet()
void raise:reason:(CPString aName, [reason] CPString aReason)
Definition: CPException.j:66
CPString description()
Definition: CPObject.j:358
id decimalDigitCharacterSet()
var CPCharacterSetInvertedKey
function CPEmptyRange(aRange)
Definition: CPRange.j:59
An immutable string (collection of characters).
Definition: CPString.h:2
id decomposableCharacterSet()
int length()
Definition: CPString.j:186
id whitespaceAndNewlineCharacterSet()
id copy()
Definition: CPObject.j:154
Defines methods for use when archiving & restoring (enc/decoding).
Definition: CPCoder.h:2
id init()
Definition: CPObject.j:145
function CPLocationInRange(aLocation, aRange)
Definition: CPRange.j:93
CPRange function CPMakeRange(location, length)
Definition: CPRange.j:37